2013-07-29 34 views
0

我讀過有關如何從一個JavaScript函數退出以下後退出:從javascript函數

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()); 

}

當我測試使用重複的數據,該系統能夠正確顯示,說:「類似的規則已經存在」,但它也顯示了一個錯誤消息「我做到了這一點」在控制檯中。 它不顯示窗體serialize()命令的結果。 我期待代碼在設置錯誤消息後立即退出.click甚至處理程序。

我試過把「return」語句改成「return false」,但那也行不通。 你能告訴我我做錯了什麼嗎?最終,我希望這個例程做的是在將數據提交給服務器之前執行幾個客戶端驗證檢查。 所以我會在需要「返回」或退出的函數中有多個點。

感謝

編輯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,這很有道理!我試圖糾正代碼,但它仍然無法正常工作。請檢查我的Edit 1 –

回答

0

爲了擴大對@ tymeJV的評論,你的第一個回報返回done功能異步。它對該方法的其餘部分沒有影響。的.done(function(result) { })

+0

謝謝。你能給我一個如何改變我的代碼的例子嗎?我將實際移動這個驗證檢查提交點擊事件..但我仍然不清楚如何進行異步調用,然後測試結果..每當它回來。 –

+0

我想出了你的初步評論。謝謝! –

0

return false替換爲return然後console.log之後將是未定義的!

return退出函數返回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

回報只是從這個函數退出,而不是從.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')的結果總是爲false,這就是爲什麼你現在在控制檯中「」我做到了這一點「 – serg123e