jQuery Alert消息循环

时间:2015-06-05 10:42:29

标签: javascript jquery

我正在使用以下jQuery脚本。这是为了在用户离开空输入元素时提醒用户。

function checkEmpty(elem){
 $(elem).focusout(function (){

if(!$(elem).val() || $(elem).val()==" "){
    alert("This Field can't be empty");     
    return true;
}
});
}

以HTML格式调用

onclick="checkEmpty(this);

如果我第一次将输入元素留空,则只提供一个警告 但是,当我将相同的输入元素留空一次以上时,我会收到连续的警报信息 我使用调试器来查看发生了什么,它一次又一次地循环。
哪里出错了?

3 个答案:

答案 0 :(得分:1)

每次源元素为focusout时,您都会绑定clicked事件。处理程序不断添加每次点击,您只需要一次。而不是直接绑定点击事件处理程序绑定onfocusout

结合

onfocusout="checkEmpty(this);

处理程序功能

function checkEmpty(elem){
  if(!$(elem).val() || $(elem).val()==" "){
    alert("This Field can't be empty");     
    return true;
  }
}

答案 1 :(得分:1)

试试此代码

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
function checkEmpty(elem)
{
  if(!$(elem).val() || $(elem).val()==" ")
  {
    alert("This Field can't be empty");     
    return true;
  }
}
</script>
</head>
<body>

Enter your name: <input type="text" onblur="checkEmpty(this)">
<p>Write something in the input field, and then click outside the field to lose focus (blur).</p>

</body>
</html>

答案 2 :(得分:0)

您应该在页面加载时绑定处理程序。

试试这个:

$(document).ready(
     $(elem).focusout(function (){

         if(!$(elem).val() || $(elem).val()==" "){
             alert("This Field can't be empty");     
         }
     });
);

编辑:如果您想将它用于多个文本字段,那么您只需要像这样修改您的功能:

function check(elem){
    if(!elem.data.val() || elem.data.val()==" "){
        alert("This Field can't be empty");     
    }
}

然后使用它:

$(document).ready(
    // Input element 1
    $(elem1).focusout($(elem1), check);

    // Input element 2
    $(elem2).focusout($(elem2), check);

);

这是一个JSFiddle示例:Stack Overflow: LINQ with Skip and Take

注意:我对jQuery并不精通,所以我先用小提琴尝试过。对于迟到的编辑感到抱歉。