javascript - 为什么我添加到无序列表的 val 在添加后立即消失?

标签 javascript jquery html css

我有一个“文本框”,当用户按下“Enter”键时,我想将其内容发送到一个无序列表:

HTML

<input type="text" name="InputUPC" id="InputUPC" />
<ul id="CandidateUPCs" name="CandidateUPCs" class="ulUPCs"></ul>

CSS

.ulUPCs {
    min-height:160px;
    height:auto !important;
    height:160px;
    max-width:344px;
    width:auto !important;
    width:344px;
    border-style:solid;
    border-width:2px;
}

jQuery

$('#InputUPC').keypress(function (event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        var upcPrefix = jQuery.trim($("#InputUPC").val());

        if (upcPrefix != "") {
              $("#CandidateUPCs").append('<li>' + upcPrefix + '</li>');
        }
        $("#InputUPC").val("");
    }
});

当我在“InputUPC”中输入内容并混合键时,该值会出现在无序列表中,但只会出现“短暂的一秒钟”,然后就会消失。 “InputUPC”中的值也消失了,但这是预期的。为什么它也腾出 UL premesis?

更新

这就是我最终得到的 ( http://jsfiddle.net/AEy9x/ ),主要基于 adeneo 的回答:

$('#InputUPC').keyup(function (event) {
    event.preventDefault();
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        var upcPrefix = jQuery.trim($("#InputUPC").val());

        if (upcPrefix != "") {
              $("#CandidateUPCs").append('<label for=' + upcPrefix + '>' + upcPrefix + ' </label>');
              $("#CandidateUPCs").append('<input type=\"checkbox\" name=' + upcPrefix + ' id=' + upcPrefix + ' />');
              $("#CandidateUPCs").append('<br>');
        }
        $("#InputUPC").val("");
    }
});

更新 2

在 jsfiddle 中,只要 jquery 版本高于 1.6.4,这就有效。

在这种情况下,我将我的元素更新为 jquery 1.9.1(它在一个地方引用了版本 1.4.4,在所有其他地方引用了 1.6.2)。但是,它仍然不起作用...?!?

我在 UL 中看到 val 表示“一闪而过”,但随后它又消失了。

注意:我还更新了 jquery-ui:

@*    <script src="@Url.Content("~/Scripts/jquery-ui-1.8.16.custom.min.js")" type="text/javascript"> </script>*@
    <script src="@Url.Content("http://code.jquery.com/ui/1.10.3/jquery-ui.js")" type="text/javascript"> </script>

更新 3

@sriniris:

同样的事情发生在任何一个代码块上(我的是第一个;adeneo 的是第二个),即 UL 被填充了纳秒,但是轻浮的位比润滑和抛光的闪电更快地滑行:

$('#InputUPC').keyup(function (event) {
    event.preventDefault();
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == '13') {
        var upcPrefix = jQuery.trim($("#InputUPC").val());

        if (upcPrefix != "") {
              $("#CandidateUPCs").append('<label for=' + upcPrefix + '>' + upcPrefix + ' </label>');
              $("#CandidateUPCs").append('<input type=\"checkbox\" name=' + upcPrefix + ' id=' + upcPrefix + ' />');
              $("#CandidateUPCs").append('<br>');
        }
        $("#InputUPC").val("");
    }
});



$('#InputUPC').on('keyup', function(e) {
e.preventDefault();
if (e.which == 13) {
    var upcPrefix = $.trim( this.value );

    if (upcPrefix != "") {
          var upcElem = $('<li />', {text : upcPrefix});
          $("#CandidateUPCs").append(upcElem);
    }
    this.value = "";
}

更新 4

问题是 正在提交表单,即使有代码可以防止这种情况发生 (preventDefault)。我知道这一点是因为当我选择一系列复选框时,它们都会同时取消选择,而短暂输入 UL 的值也将告别。那么,是否存在与这种“隐喻”混合类似的东西:

e.preventDefault(); ! important

?

更新 5

我仍然有同样的问题:

    $('#InputUPC').keyup(function (event) {
    if (event.stopPropagation) { // W3C/addEventListener()
        event.stopPropagation();
    } else { // Older IE.
        event.cancelBubble = true;
}
         event.preventDefault();
        var keycode = (event.keyCode ? event.keyCode : event.which);
        if (keycode == '13') {
            //alert('get the values that start with what was entered and place it in ulUPCStartsWith');
            var upcPrefix = jQuery.trim($("#InputUPC").val());

            if (upcPrefix != "") {
                  $("#CandidateUPCs").append('<label for=' + upcPrefix + '>' + upcPrefix + ' </label>');
                  $("#CandidateUPCs").append('<input type=\"checkbox\" name=' + upcPrefix + ' id=' + upcPrefix + ' />');
                  $("#CandidateUPCs").append('<br>');
            }
            $("#InputUPC").val("");
        }
    });

最佳答案

$('#InputUPC').on('keyup', function(e) {
    e.preventDefault();
    if (e.which == 13) {
        var upcPrefix = $.trim( this.value );

        if (upcPrefix != "") {
              var upcElem = $('<li />', {text : upcPrefix});
              $("#CandidateUPCs").append(upcElem);
        }
        this.value = "";
    }
});

关于javascript - 为什么我添加到无序列表的 val 在添加后立即消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16367965/

相关文章:

javascript - 如何通过javascript更改div中的文本

javascript - JQuery/Javascript - 使用变量名称引用对象

javascript - 如何使用 jQuery 更改 Bootstrap 按钮属性

html - 固定页眉与页内 anchor 重叠

javascript - Crafty.js 教程

javascript - HAML 中动态生成的 Javascript

javascript - 单击时如何使某些元素突出显示?

javascript - jquery追加奇怪的行为

jQuery 服务响应显示在 firebug 中但未成功

javascript - Materialize:通过 js/jquery 激活可折叠标题