在jQuery中逐个检查已选中的复选框

时间:2015-02-04 20:36:31

标签: jquery checkbox

我正在使用ajax提交表单。到目前为止我所做的是我已经选中了所有复选框(同名)。我正在使用$ .each()函数来迭代它们但是我需要它来同步。

jQuery.each(jQuery("input[name='checkboxes_name']:checked"), function(){
        if (jQuery(this).val()=='some_val') { // processing goes here}
if (jQuery(this).val()=='some_val2') { // processing goes here}
}

现在发生的事情是它在满足条件时进入IF语句,开始处理它并继续下一个EACH函数的迭代(前一个仍然在进行中)。这样它就会同时开始执行多个IF语句。 我需要做的是在上一次迭代完成处理之前,下一次迭代才会开始。

我希望你们明白。

2 个答案:

答案 0 :(得分:1)

虽然不是必需的,但我建议您在这种情况下使用IIFE,以避免因为任何原因无法使用jQuery而每次都写$

单独使用.each()无法实现您想要实现的目标,但是,您可以使用递归函数调用来获得所需的结果。

此外,在每次检查时反复获取元素的值,同时使用 jQuery 这样做会增加大量不必要的等待时间。从this.value获取价值更快,更直接,通常更好。

考虑到您只检查一个变量的值,您可以使用switch语句而不是链式if

(function(jQ){
    var $checked = jQ("input[name='checkboxes_name']:checked"), i = 0;
    function nextIteration(){
        i++;
        var elem = $checked.get(i);
        switch (elem.value){
            case "some_val":
                // your processing goes here, e.g.
                jQ.post('/save',{val:this.value},function(){
                    // If finished, call nextIteration(), optionally with return
                    return nextIteration();
                });
            break;
            case "some_val":
                // your processing goes here, e.g.
                jQ.post('/save',{val:elem.value},function(){
                    // If finished, call nextIteration(), optionally with return
                    return nextIteration();
                });
            break;
        }
    }

    nextIteration();
})(jQuery)

答案 1 :(得分:-1)

您是否曾尝试使用javascript for循环而不是jquery每个函数?

var _this = jQuery("input[name='checkboxes_name']:checked");
var count = _this.length;
for(var i = 0; i < count; i++){
    if (_this.val()=='some_val') { 
        // processing goes here
    } else if (_this.val()=='some_val2') { 
        // processing goes here
    }
}