2015-11-06 97 views
0

寫這個函數有沒有更高效的方法?不需要寫這個函數有沒有更高效的方法?

$('input').change(function() { 

    if($("#m1, #m2, #m3, #m4, #m5").is(":checked")){ 

    // do something 
    } 

    else if($("#m1, #m2, #m3, #m4, #m5").is(":not(:checked)")){ 

    // do something 

    } 

} 
+0

從'else'測試中刪除'if($(「#m1,#m2,#m3,#m4,#m5」)。(「:not(:checked)」))''。 –

+0

他們是單選按鈕。 –

回答

0

else if,只是一個if/else會做到這一點:

$('input').change(function() { 
    if($(".radios").is(":checked")){ 
     // do something 
    } else { 
     // do something 
    } 
} 

$('input').change(function() { 
    if($("#m1, #m2, #m3, #m4, #m5").is(":checked")){ 
     // do something 
    } else { 
     // do something 
    } 
} 

你也可以爲了使選擇更短的添加一個類的元素

另一種方法,如果兩個if/else塊都有很多代碼行,則可以將它們移動到指定函數並使用三元運算符:

$('input').change(function() { 
    return $("#m1, #m2, #m3, #m4, #m5").is(":checked") ? funcForChecked() : funcForUnchecked(); 
} 
0

內部事件監聽器,你有代表觸發事件的元素this對象,所以你可以寫:

$('input').change(function() { 

    if($(this).is(":checked")){ 
     // do something 

     return; 
    } 

    // do something   
} 
0

而不是引用所有的ID,你可以用一個類將它們標記即 「複選框」,並使用以下

if($('.checkbox:checked').length == $('.checkbox').length){ blah blah } ; 

看到這個小提琴https://jsfiddle.net/hyopdt3v/

0

我假設你有類似

<input id="m1" type="radio" name="groupName" /> 
... 
<input id="m5" type="radio" name="groupName" /> 

在這種情況下,你可以換組到一個div有自己的ID:

<div id="m15"> 
</div> 

和改變事件綁定到:

$('#m15').change(function() { 
    if ($(this).find('input').is(":checked")) { 
     // do something 
    } 
} 

或者您可以更具體地使用類別:

<div id="m15"> 
    ... 
    <input id="m1" class="m15" /> 
</div> 

$('#m15').change(function() { 
    if ($(this).find('input.m15').is(":checked")) { 
     // do something 
    } 
} 

因爲它們是單選按鈕,所以沒有選中,或者只選中一個。

出於同樣的原因,這會工作:

$('#m15 input.m15').change(function() { 
    // Triggered the first time - and all subsequent times 
}); 

您當前的代碼勢必所有input元素,這意味着如果一個人改變了一些其他控制它仍將觸發;在我看來,這是不受歡迎的行爲。

請參閱this fiddle這兩個代碼。

相關問題