我正在使用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语句。 我需要做的是在上一次迭代完成处理之前,下一次迭代才会开始。
我希望你们明白。
答案 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
}
}