2013-07-29 5 views
0

я прочитал следующее сообщение о том, как выйти из яваскрипта функции:выхода из функции яваскрипта

How can I exit from a javascript function?

Я пытаюсь адаптировать пример моего кода, но я что-то не хватает/делать что-то не так.

У меня есть следующий код JQuery:

$('#main_submit_button').live('click', function(){ 

     check_for_duplicate_rule().done(function(result) { 
        console.log("result from check for duplicate" + result); 
        if (result == 'true') {     
         $('#validation_error').html("A similar rule already exists"); 
         return; 
        } 
      }); 
     //} 
     console.log("i made it this far"); 
     return false; 
     console.log($('#rule_form').serialize()); 

}

Когда я проверить с помощью повторяющихся данных, система правильно отображает ошибку, которая говорит: «Аналогичное правило уже существует», но он также отображает сообщение «Я сделал это так далеко» в консоли. Это НЕ отображает результаты команды formizeize(). Я ожидал, что код просто выйдет из обработчика .click даже после установки сообщения об ошибке.

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

Благодаря

EDIT 1

Я изменил код, чтобы выглядеть следующим образом:

  var bduplicate = false; 
      check_for_duplicate_rule().done(function(result) { 
        console.log("result from check for duplicate" + result); 
        if (result == 'true') {     
         $('#validation_error').html("A similar rule already exists"); 
         bduplicate = true 
         return; 
        } 
      }); 
     //} 
     if (bduplicate) { 
      return; 
     } 
     console.log("i made it this far"); 

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

function check_for_duplicate_rule() { 
      var parameters = { 
        num: $('#num').val(), 
        condition: $('#condition').val(), 
        cdidnumber: $('#cdidnumber').val() 
      } 

      return $.getJSON(  
        url = aURLdefinedsomewhere, 
        parameters, 
        function(data) { 
          //if (data=='true') {        
           //$('#validation_error').html("A similar rule already exists");  
          //} 
        }//end data 
       );//end getJSON  
     } 

Что я вижу в консоли является то, что «результатом проверки истинного дубликата» сообщение печатается после «я сделал это настолько далеко», который, кажется, указывает что я проверяю результаты, которых у меня нет ...? Если это правда, я действительно не знаю, как это сделать.

+5

Первый 'return' возвращается из' .done() 'функция , – tymeJV

+0

tymeJV, это имеет смысл! Я попытался исправить код, но он все еще не работает. Пожалуйста, проверьте мои изменения. 1 –

ответ

0

Чтобы расширить @ tymeJV свой комментарий, ваш первый возврат возвращается done функционирует асинхронно. Это не влияет на остальную часть метода.

+0

спасибо. можете ли вы привести пример того, как изменить код? Я собираюсь на самом деле перенести эту проверку проверки из события отправки сообщения. Но я все еще не понимаю, как сделать асинхронный вызов, а затем проверить результат .. всякий раз, когда он возвращается. –

+0

Я понял это на основе вашего первоначального комментария. благодаря! –

0

Замените return false на return, а затем консоль.log после этого будет не определена !!!

возвращение завершает возврат функции undefined.

$('#main_submit_button').live('click', function() { 
     check_for_duplicate_rule().done(function(result) { 
      console.log("result from check for duplicate" + result); 
      if (result == 'true') {     
       $('#validation_error').html("A similar rule already exists"); 
       return; 
      } 
     }); 
    //} 
     console.log("i made it this far"); 
     return;//replace return false with return. 
     console.log($('#rule_form').serialize());//this will be undefined 
    } 

ПРИМЕЧАНИЕ: return возвращает неопределенными, не false

  • перерыв: для выхода из цикла
+0

'live' устарел от' jQuery 1.7'. Вместо этого используйте 'on'. – Konsole

0

возвращение внутри .done(function(result) { }) просто выходит из этой функции, а не от .live('click', function(){ })

вы должны переписать код, как этот

$('#main_submit_button').live('click', function(){ 

    result = check_for_duplicate_rule() 
    console.log("result from check for duplicate" + result); 
    if (result == 'true') {     
        $('#validation_error').html("A similar rule already exists"); 
        return; 
    } 
    console.log("i made it this far"); 
    return false; 
    console.log($('#rule_form').serialize()); 
+0

serg123e, я добавил некоторые подробности к моему сообщению. Check_for_duplicate_rule делает вызов ajax/getJSON ... что я, почему у меня был метод .done(). Ваш ответ по-прежнему применяется? –

+0

Когда вы переписываете код, он тоже должен работать. , но результат (true == 'true') всегда ложный, поэтому вы получаете «Я сделал это так далеко» в консоли сейчас – serg123e

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