在javascript中检查输入是否为空并设置为零

在javascript中检查输入是否为空并设置为零,javascript,Javascript,当用户使用backspace删除输入中的值时,功能正常工作,但如果用户删除该值并设置一个新数字,如1,则新值将被删除并再次设置为零 <input type="text" id="txtField" value="0" ></input> $(document).ready(function() { $("#txtField").keyup(function() { var v = $(this).val(); console.log(v)

当用户使用
backspace
删除输入中的值时,功能正常工作,但如果用户删除该值并设置一个新数字,如1,则新值将被删除并再次设置为零

<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);

    }
  });
});

$(文档).ready(函数(){
$(“#txtField”).keyup(函数(){
var v=$(this.val();
控制台日志(v)
如果(v==“”){
控制台日志(v)
setTimeout(函数(){
$(“#txtField”).val(0);
}, 1000);
}
});
});
我不知道我的代码有什么问题请帮忙


jsiddle:

不要使用
setTimeout
。请尝试使用以下三个事件进行映射:

$(document).ready(function() {
  $("#txtField").on("keyup change blur", function() {
    if ($(this).val().trim() == "")
      $(this).val(0);
  });
});

Fiddle:

问题是您有
setTimeout
。如果用户清除
输入
,然后在下一秒输入一个值,则
设置超时
中的功能仍将关闭,将
设置为
0

请尝试检查
设置超时
中的
输入
,如下所示:

JavaScript

$("#txtField").keyup(function() {
    setTimeout(function() {
        if ($("#txtField").val().trim().length === 0) {
            $("#txtField").val(0);
        }
    }, 1000);
});

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);

}


});
});

我会使用
模糊事件来执行此操作,而不是
键控

$(document).ready(function() {
  $("#txtField").on("blur", function() {
    if (!$(this).val().trim())
      $(this).val(0);
  });
});
如果输入在失去焦点时为空-则给它一个值0

否则——什么也不做


最好的方法是使用focusout()函数。试试这个

<input type="text" id="txtField" value="0" />

$("#txtField").focusout(function() {

var v = $(this).val();

console.log(v)
if (v == "") {
    $("#txtField").val(0);
}
});

$(“#txtField”).focusout(函数(){
var v=$(this.val();
控制台日志(v)
如果(v==“”){
$(“#txtField”).val(0);
}
});
如果字段为空,则在焦点输出时将该值设置为零


这不起作用,我无法更改默认值,它将返回零immediately@Sora你到底想干什么?什么是默认值?我的意思是值0这是我做的:1-如果我用空格删除0,输入仍然为空2-如果我删除0并将值返回10@Sora你看到了吗,
标签没有
。@Sora这是我的错误。更正了。是的,但是如果页面中有一个提交按钮,并且用户使用backspace清空输入并单击该按钮,则该值将被忽略empty@Sora你确定吗?看看这个:-如果删除文本字段的内容,然后单击按钮,模糊事件仍然会发生,将空值替换为0。似乎我错了,我在未测试结果的情况下发布了我的评论。。很抱歉