如何从$ .each

时间:2018-04-21 17:34:53

标签: javascript jquery

如果在$.each内满足条件,我如何从整个jquery点击事件函数中存在。一种解决方案是将条件结果存储在变量中,然后在循环之后有一个if语句但是没有直接的方法吗?

$(".main").on("click",".button",function(e){

    $(this).siblings('input').each(function(){

       if($(this).val() == 'yourvalue') {
         return false;
       }

    });


    //......rest of the code runs if the above condition is NOT met

 });

4 个答案:

答案 0 :(得分:1)

  

如何从$ .each

内部突破jQuery点击事件功能

因此,您希望根据内部循环的结果从return false处理程序中click。您有几种选择:

  1. 使用简单的for循环[如您的回答]

  2. 使用get获取输入数组,然后使用Array#some

    $(".main").on("click", ".button", function(e) {
        if ($(this).siblings('input').get().some(function(input) { return input.value == 'yourvalue'; })) {
            return false;
        }
    
        //...
    });
    

    使用ES2015 +箭头功能更简洁:

    $(".main").on("click", ".button", function(e) {
        if ($(this).siblings('input').get().some(input => input.value == 'yourvalue')) {
            return false;
        }
    
        //...
    });
    
  3. 在循环外使用标记:

    $(".main").on("click", ".button", function(e) {
        var flag = false;
        $(this).siblings('input').each(function() {
            if ($(this).val() == 'yourvalue') { // can use this.value instead of $(this).val() here
                flag = true;
                return false; // Breaks the `each` loop
            }
        });
        if (flag) {
            return false;
        }
    
        //...
    });
    

答案 1 :(得分:0)

你有什么应该工作。要打破$ .each循环,只需返回false。

返回true跳到下一次迭代,相当于在正常循环中继续。

$(".main").on("click",".button",function(e){

    $.each(array, function(i){

       if(i === 'yourvalue') {
         return false; // will exit the $.each loop
       }

    });

 });

答案 2 :(得分:0)

使用return false

时,转换为原生循环将使我能够存在click函数
$(".main").on("click",".button",function(e){

   var inputs = $(this).siblings('input')

   for(var x = 0; x < inputs.length; x++){

     if(inputs.eq(x).val() == 'yourvalue') {
       return false;
     }

   }


//......rest of the code runs if the above condition is NOT met

});

答案 3 :(得分:-1)

jQuery doc:&#34;我们可以通过使回调函数返回false来打破特定迭代的$ .each()循环。返回非false与for循环中的continue语句相同;它会立即跳到下一次迭代。&#34;