2010-11-23 1 views
1

У меня есть следующий цикл, который просто проверяет все «зеленые» строки в таблице под названием элементы, чтобы увидеть, который один содержит скрытый элемент ввода с именем ххх, который не соответствует данное значение:jQuery.each() не возвратит

$('table#items tr.green').each(function() { 
    if (myvalue != $('input#xxx', $(this)).val()){ 
     alert('The xxx element is not the same as ' + myvalue + ' on all green rows'); 
     return; 
    } 
}); 

Но ниже этого кода есть запрос jQuery.ajax(), и даже когда отображается окно предупреждения, jQuery.ajax() все еще работает! Любая идея почему?

+0

Не могли бы вы, возможно, показать фактический АЯКС вызов, то а ? – poke 2010-11-23 08:27:26

+0

`return false;` или `break`? – Fred 2010-11-23 08:30:03

ответ

1

Вы хотите вернуть функцию за пределы каждого из них? Вы не можете просто вернуться внутри каждого, каждый генерирует функцию, вы возвращаетесь теперь этот Funktion закрыт, цикл по-прежнему работает, вы должны сделать что-то вроде этого

var continue = true; 

jQuery(bla).each(function(){ 
    if(bla == blubb){ 
     continue = false; 
    } 
}); 

if(!continue){ 
    return 
} 
0

JQuery's .each выполняет переданную функцию на каждый прилагается элемент. Поэтому, даже когда вы решите вернуться из одной из функций, он все равно выполнит функцию для всех остальных элементов.

Если вы хотите закончить весь звонок .each, вам нужно будет проверить переменную в начале вызова и пропустить обработку функции. Однако вы не можете остановить JQuery от выполнения этой функции для всех элементов только потому, что один из них вернулся.

3

Помните, что jQuery.each принимает обратный вызов в качестве аргумента. Вы передаете ему анонимную функцию, и эта функция вызывается для каждого элемента, сопоставленного table#items tr.green, поэтому все return действительно возвращается из анонимной функции.

Вы должны установить флаг какого-то для того, чтобы достичь того, чего вы хотите:

var flag = false; 
$('table#items tr.green').each(function() { 
    if (myvalue != $('input#xxx', $(this)).val()){ 
     alert('The xxx element is not the same as ' + myvalue + ' on all green rows'); 
     flag = false; 
    } 
}); 

if (flag) 
{ 
    return; 
} 
0

Возвращения в вашем возвращении кода из внутренней функции обратного вызова в каждом методе. Он не возвращается из функции, содержащей jQuery.each

0

Когда вы вернетесь, то, что вы действительно возвращаете, это функция, выполняемая .each(), остальные итерации все равно будут выполняться. Вместо этого попробуйте использовать флаг в той же области, что и вызов .ajax().