Как вернуть false в методе? - PullRequest
       1

Как вернуть false в методе?

0 голосов
/ 08 февраля 2011

У меня есть этот цикл, запускаемый после click (), и он не return false, если return false помещен глубже внутри итератора.Как я могу гарантировать, что он возвращает ложь;?

$.each($(".payment"), function(key, value) { 
  the_date = $(value).children("input:first").val();
  if( the_date != "") {
    if( the_date.split("/").length != 3) {
      return false; // <---  This doesn't work 
    };
  };
};

Вот еще один валидатор, который работает

if( $("input#date_awarded").val().split("/")[2] > 2010 ) {
  return false; // <-- Totally works
};

Ответы [ 3 ]

3 голосов
/ 08 февраля 2011

В .each() выполнение return false возвращается из каждого обратного вызова и останавливает цикл.

Вместо этого вы можете использовать переменную для хранения возвращаемого значения и вернуть его после цикла.

var returnValue = true; //use a variable for the return value
$.each($(".payment"), function (key, value) {
    the_date = $(value).children("input:first").val();
    if (the_date != "") {
        if (the_date.split("/").length != 3) {
            returnValue = false; // set the return value
            return false; // break the loop
        }
    }
});
return returnValue; // return the return value
1 голос
/ 08 февраля 2011

Пример кода @patrickdw, который исправляет вашу ошибку, но затем очищает ваш код.

var returnValue = true; 
$.each($(".payment>input:first-child"), function (key, value) {
    if (this.value.split("/").length !== 3) {
        return (returnValue = false);
    }
});
return returnValue; 

или только для ударов, давайте переделаем его в одну строку для цикла без блока тела.

for (var returnVal = true, var i = 0, var inputs = $(".payment>input:first-child"), var text = $(inputs[i]).val(); i < inputs.length && ((text.split("/").length !== 3 && (returnVal  = false)) || true); text = $(inputs[++i]).val());
return returnVal;

Я не рекомендую вам мучить сопровождающего и писать код, подобный приведенному выше, который действительно действительно злоупотребляет циклами.

0 голосов
/ 08 февраля 2011

return false применяется для «каждого» обратного вызова.Вы хотите применить его к обратному вызову click?Если так, то сделайте это так:

jQuery(selector).click(function() {
    var returnValue = true;

    jQuery(anotherSelector).each(function() {
        do_stuff();
        returnValue = false;
    }

    return returnValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...