2013-03-15 3 views
0

У меня есть пользовательская функция, называемая addItem(), в которой есть каждая функция(). Когда выполняется определенное условие, мне нужно выйти из функции addItem(). Я не могу использовать return, поскольку он только выходит из каждой функции() и все еще запускает остальную часть кода внутри основной функции. Я пробовал exit и, похоже, отлично работает. Я просто не знаю, правильно ли использовать exit, потому что я не видел exit много использовал.Есть ли функция выхода jQuery?

Вот мой код:

var addItem = function (position) { 
    $(position + ' .item_div').each(function() { 
     if($(this).find('.item').val() == '') { 
      alert('Cannot be empty'); 
      exit; // exit from addItem() function 
        // return does not work 
     } 
    }); 
    ........... 
    ........... 
    rest of the code here... this gets executed ONLY if each() fails... 
    ........... 
    ........... 
} 

ответ

3

вы можете использовать вернуть ложь разорвать .each петлю.

Вы можете остановить цикл из функции обратного вызова, вернув false.

var addItem = function (position) { 
    var valid = true; 
    $(position + ' .item_div').each(function() { 
     if($(this).find('.item').val() == '') { 
      alert('Cannot be empty'); 
      valid = false; 
      return false; 
     } 
    }); 

    if(!valid) { 
     return; 
    } 
    ........... 
    ........... 
    rest of the code here... this gets executed ONLY if each() fails... 
    ........... 
    ........... 
} 
+0

Это именно то, что я сделал, но он все еще выполняет остальную часть кода даже после выхода из каждой функции(). Я понятия не имею, что происходит. Знаете ли вы, что использование «exit» - это плохая практика? В моем случае это работает очень хорошо. – user1448031

+0

@ user1448031 см. Обновление –

+0

Да, я все равно думал об этом. Это работает. Благодарю. Я все еще не уверен, что «exit» по-прежнему является допустимым вариантом. Никто, казалось, не мог мне сказать. Если вы случайно это выясните, дайте мне знать. – user1448031

0

Согласно документации. да. вам нужно return false; в петле Break loop

$('.someclass').each(function() { 

    if (someConditionMet) 
     return false; 
}); 
+0

Я уже пробовал 'return false', но он не работает. Он только выходит из функции each(), но все еще выполняет оставшуюся часть кода. Это из-за 'alert()', который почему-то затрудняет его? Но я так не думаю ... «Выход», кажется, работает идеально. Знаете ли вы, что «exit» устарел или не является хорошей практикой? – user1448031

0

Вы пробовали использовать перерыв. Оператор break выпрыгивает из цикла.

Или вы можете создать ярлык и использовать goto для перехода на эту метку.

+0

Нет 'break' не работает. – user1448031

+0

Попробуйте использовать goto. создайте ярлык, а затем используйте goto, чтобы прыгать туда. –

+0

@Dev - серьезно предлагаю перейти? Http: //xkcd.com/292/ плохой ответ и плохое предложение. –

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