jQuery.each () не вернется - PullRequest
       36

jQuery.each () не вернется

1 голос
/ 23 ноября 2010

У меня есть следующий цикл, который просто проверяет все "зеленые" строки в таблице, называемой элементами, чтобы увидеть, какая из них содержит скрытый элемент ввода с именем xxx, который не соответствует данному значению:

$('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() все еще выполняется!Есть идеи почему?

Ответы [ 5 ]

3 голосов
/ 23 ноября 2010

Помните, что 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;
}
1 голос
/ 23 ноября 2010

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

var continue = true;

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

if(!continue){
    return
}
0 голосов
/ 23 ноября 2010

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

0 голосов
/ 23 ноября 2010

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

0 голосов
/ 23 ноября 2010

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

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

...