2013-03-15 48 views
0

我有一個名爲addItem()的自定義函數,它裏面有each()函數。當滿足某個條件時,我需要從addItem()函數中退出。我不能使用return,因爲它只能從each()函數中退出,並且仍然在主函數內部運行代碼的其餘部分。我試過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

您可以使用返回false打破.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 2013-03-15 05:33:08

+0

@ user1448031查看更新 – 2013-03-15 05:51:41

+0

是的,無論如何我正在考慮這樣做。這樣可行。謝謝。我仍然不確定'退出'是否仍然是一個有效的選擇。似乎沒有人能夠告訴我。如果你碰巧弄清楚了,請告訴我。 – user1448031 2013-03-15 06:19:07

0

根據文檔。是。你需要return false;在循環Break loop

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

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

我已經嘗試過'返回false',但它不起作用。它只會退出each()函數,但仍然運行代碼的其餘部分。是否因爲alert()出於某種原因使其有點困難?但我不這麼認爲....'退出'似乎工作完美。你知道退出是否被棄用或不是一個好習慣嗎? – user1448031 2013-03-15 05:20:40

0

您是否嘗試過使用斷點。 break語句「跳出」一個循環。

或者您可以創建標籤並使用goto跳轉到該標籤。

+0

沒有'break'不起作用。 – user1448031 2013-03-15 05:17:44

+0

嘗試使用goto。 創建一個標籤,然後使用goto跳到那裏。 – 2013-03-15 05:18:53

+0

@Dev是否認真建議轉到?http://xkcd.com/292/錯誤的答案和不好的建議。 – 2013-03-15 05:24:04