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

时间:2015-12-07 09:29:12

标签: javascript

当用户使用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/

5 个答案:

答案 0 :(得分:2)

请勿使用setTimeout。而是尝试使用这三个事件进行映射:

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

小提琴:http://jsfiddle.net/5hm6e8hL/

答案 1 :(得分:1)

我会使用blur事件而不是keyup

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

如果输入失去焦点时为空 - 则为其赋值0.

否则 - 什么都不做。

FIDDLE

答案 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);
});

JSFiddle

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

}


});
});

http://jsfiddle.net/guv0c5ox/

答案 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);
}
});

如果字段为空,它将在焦点输出时将值设置为零。

JSFIDDLE EXAMPLE