为什么我添加到一个无序列表中的val在我添加它之后就消失了?
Why is the val I'm adding to an unordered list vanishing right after I add it?
我有一个"文本框",当用户按下"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"中的值也消失了,但这是意料之中的。为什么它也要腾出美国总部?
更新这是我最终得到的(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
在jquery中,只要jquery版本在1.6.4以上就可以。
在这种情况下,我将我的项目更新为jquery 1.9.1(它在一个地方引用1.4.4版本,在所有其他地方引用1.6.2版本)。然而,它仍然不起作用…?
我在UL中看到了"flash"的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:
同样的事情发生在任何代码块(我的是第一个;adeo的是秒),也就是说,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 = "";
}
});
问题中的代码工作得很好,然而我想象在您的实际代码中input
在表单内。
因此,按enter键很可能提交表单(参见规范中的§4.10.22.2"隐式提交")。你所看到的不是一个脚本/逻辑错误,正在清除ul
;您正在看到页面重新加载。
你可以添加:[event object].preventDefault();
例子:
- 不良提交 固定
Adeneo的解决方案是正确的。但是如果你想让它在不升级到jQuery 1.9的情况下工作,你可以使用"bind"事件而不是"on"事件。On从v1.7开始支持,并在新版本中取代bind。
$('#InputUPC').bind('keyup', function(e) {
UPDATE 4问题是表单正在被提交,即使有代码来防止这种情况(preventDefault)。我知道这些是因为当我选中一堆复选框时,它们都会同时被取消选中在UL中短暂输入值的时间也将告别。所以有没有类似的"隐喻"的混合:
e.preventDefault ();! 重要吗?
您的问题可能是由事件冒泡引起的。尝试在event.preventDefault();
之前添加以下代码if (event.stopPropagation) { // W3C/addEventListener()
event.stopPropagation();
} else { // Older IE.
event.cancelBubble = true;
}
- 正在添加'X'按钮,在文本字段旁边使用javascript
- 如何在映射数组中添加换行符
- 正在将数据主题添加到所有项目
- ZeroClipboard-在复制之前添加到值
- 我可以在json对象中添加一个函数吗
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 正在SharePoint 2013母版页中添加JQuery移动文件
- 如何添加浮动和非浮动,其他
- 添加文字和评论功能更新Div
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 在 jquery 中添加多个 val
- 多个数字输入,jquery .each 如果 val() 大于,则将类添加到元素
- Jquery .val() == ** 添加多个可能的答案 **.
- 如何在其中的 val 数组中添加键
- Jquery(input/textarea).val():如何在不更改DOM的情况下添加内容
- jQuery.val()无法处理用.html()添加的隐藏字段
- 如果文本框val为空,则在javascript中被添加到数组中
- 为什么我添加到一个无序列表中的val在我添加它之后就消失了?
- 添加不带变量的.val()