2012-12-18 59 views
3

我想在條件語句失敗後返回false。如何提高我的代碼來實現'返回false'?

$('#btn').click(function() { 
    $('.title').each(function() { 
     if (id == $(this).attr('id')) { 
      alert('The name already exists.') 
      return false; //I hope my codes would stop here if condition is true 
     } 
    }) 
    // my codes still call the doSomething function even if the conditional   
    //statement is true 
    doSomething(); 
})​ 

我想你所說的doSomething函數僅如果跌破id != $(this).attr('id).

的代碼給我我想要什麼,但它似乎醜陋。

$('#btn').click(function() { 
    var nameExist = false 
    $('.title').each(function() { 
     if (id == $(this).attr('id')) { 
      alert('The name already exists.') 
      nameExist = true; 
      return false; //I hope my codes would stop here if condition is true 
     } 
    }) 
    if (!nameExist) { 
     doSomething(); 
    } 
})​ 

任何人都有更好的方法呢?非常感謝!

+0

使用break - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/break –

+0

我不明白你的意思。 'doSomething()'方法在功能塊之外。因此它與函數中發生的事情無關。 – AmShaegar

+1

您從$ .each中的匿名函數返回false,而不是從您的匿名函數返回false $ .click – xdumaine

回答

3

你並不需要遍歷thrue元素,您可以通過id和class讓它像, #myId.myClass

$('#btn').click(function() { 
    if($('#' + id + '.title').length) { 
     alert('The name already exists.'); 
    } else { 
     doSomething(); 
    } 
}); 
+1

我認爲只有這個解決方案的錯誤是'doSomething()'應該在其他地方:) –

+0

@wirey O yeap,:)謝謝 –

1

我覺得你有什麼是好的,但這樣就避免了額外的條件:

var func = doSomething; 
... 
if (id == $(this).attr('id')) { 
    func = $.noop; 
... 

func(); 
+0

'$(this).attr('id')'==>'this.id' – gdoron

+0

不知道這是乾淨的。它具有自我重寫代碼的味道。代碼也不按時間順序編寫。 –

3

如果你不介意不及早退出循環,你可以使用jQuery filter

$('#btn').click(function(){ 
    var itensWithSameName = $('.title').filter(function(){ 
     return id == $(this).attr('id'); 
    }) 

    if(itensWithSameName.size() > 0) 
     alert('The name already exists.'); 
}); 
+0

+1;說明可用性的條件總是更好。 –

+1

請用'.length'替換'.size()': –

+0

@KevinB:可以使用大小和長度。由於它在循環之外,所以額外的方法調用沒有性能損失。這是個人喜好的問題(雖然我通常在生產代碼中使用'.length') – Andre

4

切換到一個基本的for循環。

$('#btn').click(function() { 
    var elements = $(".title"); 
    for (var i = 0; i < elements.length; i++) { 
     if (id == elements[i].id) { 
      alert('The name already exists.') 
      return false; //I hope my codes would stop here if condition is true 
     } 
    } 

    doSomething(); 
})​ 
相關問題