打破每个循环

时间:2014-01-14 12:08:06

标签: javascript jquery

原谅提出这个问题。我已经经历了很多解决方案,但它对我不起作用。

我有大约5个输入字段,如果它在任何输入字段中找到非法字符(如果有人输入并尝试保存),它应该提醒消息。

到目前为止,当它找到一个时,它会发出警报,然后它会继续并保存它。

我试图突破每个()循环,返回false不起作用。

更好的解决方案也将受到赞赏。

Fiddle here

// Illegal Character Check
$('.illegal-check').click(function () {
    var illegal = /[&<>]/;
    $( ".scoring input:text" ).each(function() {
        var inptStr =$(this).val();
        if (illegal.test(inptStr)===true) {
            alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
            return false;
        }
    });//each
});//click

6 个答案:

答案 0 :(得分:3)

$('.illegal-check').click(function (e) {
    ...
    if (illegal.test(inptStr)===true) {
        ...
        e.preventDefault();
        return;
    }
}

编辑: 你的数据仍然被保存的原因是,即使你使用“return false”打破了循环您的数据提交仍在进行中。你也需要取消它。为此,您使用事件参数“e”,通过调用其“preventDefault”函数传递给事件处理程序。

答案 1 :(得分:0)

您还可以添加变量以查看是否找到了非法值like this

// Illegal Character Check
$('.illegal-check').click(function () {
  var illegal = /[&<>]/;
  var found = false;
  $( ".scoring input:text" ).each(function() {
    var inptStr =$(this).val();
    if (illegal.test(inptStr)===true) {
        alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
        found = true;
    }
  });
  if(!found){
    alert("Nothing has been found")
  }else{
    alert("Illegal char has been found");
  }
});

答案 2 :(得分:0)

我个人会在表单上添加一个提交处理程序,而不是在表格单元格上添加click事件。

$('form').on('submit', function(e) {
    // ...
    if (illegal.test(inptStr)===true) {
        alert('...');
        e.preventDefault();
        return false;
    }
    // ...

此处,事件将传递给函数,任何错误都会阻止此事件触发实际提交。

答案 3 :(得分:0)

jQuery的$.fn.each$.each类似,将使用return false突破循环,并继续使用任何非虚假return进行下一次迭代。 It's documented on the API site

除了所有权利,这部分代码应该没问题。

答案 4 :(得分:0)

这是更新的小提琴。检查单独函数中的错误

$('.illegal-check').click(function () {
    if(checkIllegal()) evt.preventDefault();
});

function checkIllegal(){
   var illegal = /[&<>]/;
   var isIllegal = false;
   $( ".scoring input:text" ).each(function() {
      if (illegal.test($(this).val()) && !isIllegal) {
         alert('Your Scoring field(s) contain these & < > invalid characters. Please remove them and try again.');
         isIllegal = true;
         return false;
      }
   });
   return isIllegal;
}

http://jsfiddle.net/T2vT9/7/

答案 5 :(得分:0)

return false语句确实会突破$(...).each(...)循环。你的问题是它仍然继续并保存它。您还应该使用e.preventDefault()停止事件执行其默认操作。 (注意:m1kael在代码转储中也提到了这一点,没有添加解释)

此代码的数量:

// Illegal Character Check
$('.illegal-check').click(function (e) {
    var illegal = /[&<>]/;
    $( ".scoring input:text" ).each(function() { // loop over elements in form
        var inptStr = $(this).val();
        if (illegal.test(inptStr)===true) {
            alert('...'); // show alert
            e.preventDefault(); // prevent default action on click (stop submit)
            return false; // break out of elements loop, no more alerts needed
        }
    });//each
});//click