当用户使用backspace
删除输入中的值时,该功能正常工作,但如果他删除该值并设置一个新的数字,则删除新值并再次设置为零。
<input type="text" id="txtField" value="0" ></input>
$(document).ready(function() {
$("#txtField").keyup(function() {
var v = $(this).val();
console.log(v)
if (v == "") {
console.log(v)
setTimeout(function() {
$("#txtField").val(0);
}, 1000);
}
});
});
我不知道我的代码中的问题有什么帮助吗?
jsFiddle:http://jsfiddle.net/2shadgtw/2/
答案 0 :(得分:2)
请勿使用setTimeout
。而是尝试使用这三个事件进行映射:
$(document).ready(function() {
$("#txtField").on("keyup change blur", function() {
if ($(this).val().trim() == "")
$(this).val(0);
});
});
答案 1 :(得分:1)
我会使用blur
事件而不是keyup
:
$(document).ready(function() {
$("#txtField").on("blur", function() {
if (!$(this).val().trim())
$(this).val(0);
});
});
如果输入失去焦点时为空 - 则为其赋值0.
否则 - 什么都不做。
答案 2 :(得分:0)
问题是您有setTimeout
。如果用户清除input
,然后在下一秒输入值,则setTimeout
中的功能仍将关闭,将value
设置为0
。
请尝试检查input
内的setTimeout
,如下所示:
的JavaScript
$("#txtField").keyup(function() {
setTimeout(function() {
if ($("#txtField").val().trim().length === 0) {
$("#txtField").val(0);
}
}, 1000);
});
答案 3 :(得分:0)
setTimeout
是一个糟糕的解决方案。但是ypu可以使用if语句:
$(document).ready(function() {
$("#txtField").keyup(function() {
var v = $(this).val();
console.log(v)
if (v == "") {
console.log(v)
setTimeout(function() {
if(!$("#txtField").val()){
$("#txtField").val(0);
}
}, 1000);
}
});
});
答案 4 :(得分:0)
执行此操作的最佳方法是使用focusout()函数。试试这个
<input type="text" id="txtField" value="0" />
$("#txtField").focusout(function() {
var v = $(this).val();
console.log(v)
if (v == "") {
$("#txtField").val(0);
}
});
如果字段为空,它将在焦点输出时将值设置为零。