2010-08-11 3 views
1

Я новичок в jQuery (и, действительно, javascript вообще), и пытаюсь написать общую функцию, которая проверяет все текстовые поля и поля выбора на странице для ввода, возвращая «true», если один или больше ящиков на странице содержат по крайней мере один символ и «ложь», если нет (использование отключает кнопку поиска, если нет ввода). Я написал следующую функцию:jQuery - управление возвратом во время цикла

function hasUserProvidedInput() { 
     $('input[type="text"]').each(function() { 

      if ($(this).val() != '') { 
       alert("he has"); 
       return true; 
      } 
     }); 
     $('select').each(function() { 
      if ($(this).val() != '') { 
       return true; 
      } 


     }); 

     return false; 
    } 

Намерение состоит в том, что он будет перебирать все текстовые поля и выберите флажки на странице, а второй он поражает один со входом он возвращает управление вызывающей функции с значение «true» (я вызываю функцию с событиями keyup, прикрепленными к текстовым полям, и выбирает поля на странице). Если он выполняет итерацию через все эти элементы управления на странице и не находит ее со входом, она вернет false.

Я добавил предупреждение для целей отладки. Предупреждение работает правильно, чтобы указать, когда текстовое поле содержит вход, однако моя функция всегда возвращает значение «false». Может ли кто-нибудь пролить свет на меня, почему это происходит/как я могу это исправить? Благодарю.

ответ

1

Где вы проверяете val() ваших входов, вы находитесь в области анонимной функции. Когда вы возвращаете значение из одной из этих 2 анонимных функций, которые просто вернутся из этой функции, а не ваша общая функция hasUserProvidedInput. Таким образом, по сути, заявления «вернуть истину», которые у вас есть в ваших анонимных функциях, отбрасываются.

Попробуйте что-то вроде этого:

function hasUserProvidedInput() { 
     var returnValue = false; 
     $('input[type="text"],select').each(function() { 
      if ($(this).val() != '') { 
       returnValue = true; 
      } 
     }); 

     alert(returnValue); 
     return returnValue; 
} 

Я ставлю этот код в скрипке, так что вы можете играть с ним: http://jsfiddle.net/tddmp/

+0

Понял! Спасибо за объяснение – Andrew

Смежные вопросы