2010-07-09 73 views
0

我有這個需要顯示和隱藏一個div如果複選框被選中多個複選框。用於多個表單元素的相同jQuery函數。我如何合併

需要顯示的每個div的id將與複選框名稱相同。有沒有一種簡單的方法來完成這一點,而不寫一個函數來處理每個複選框?

$('input[name=checkbox_1]').click(function() { 
     if ($('input[name=checkbox_1]').is(':checked')) { 
      $('#checkbox_1').show('slow'); 
     } 

     else { 
      $('#checkbox_1').hide('slow'); 
     } 
    }); 
    $('input[name=checkbox_2]').click(function() { 
        if ($('input[name=checkbox_2]').is(':checked')) { 
      $('#checkbox_2').show('slow'); 
     } 

     else { 
      $('#checkbox_2').hide('slow'); 
     } 
    }); 

    }); 

回答

0

看起來您正在進行某種類型的命名約定。您可以直接進入當前的上下文對象,獲取名稱並按照慣例操作。你可能想給你的選框字段一些特殊的CSS類,易於進行選擇:

$('input.someCssClass').click(function() { 

    var selector = '#' + $(this).attr('name'); 

    if ($(this).is(':checked')) 
     $(selector).show('slow'); 
    else 
     $(selector).hide('slow'); 
}); 
+0

這工作得很好!這個網站總讓我驚訝。 – Taylor 2010-07-09 22:07:13

2

您可以從名稱獲取ID,像這樣:

$('input[name^=checkbox_]').click(function() { 
    $('#' + this.name)[this.checked ? 'show' : 'hide']('slow'); 
}); 

它使用attribute-starts-with selector獲得的輸入,然後使用自己的.name property通過ID來獲得相應的元素。如果已選中,則在具有該ID的元素上運行.show('slow'),否則運行.hide('slow')

1
$('input[name^=checkbox]').click(function() { 
    if(this.checked){ 
     $('#' + this.name).show('slow'); 
    } else{ 
     $('#' + this.name).hide('slow'); 
    } 

} 

編輯:使用選擇「以」將比檢查的indexOf,像其他人說

+1

有很少,如果需要'$(本)。是(「:檢查」)'複選框處理器中,'this.checked'更簡單/更快速:) – 2010-07-09 16:51:43

+0

良好的通話。我會在解決方案中改變這一點 - 謝謝! – amfeng 2010-07-09 16:54:01

+1

@afeng - 它是'this.checked' :),'$(this).checked'將始終爲false,它不是jQuery對象的屬性,而是DOM元素屬性。 – 2010-07-09 17:02:02

0

您可以使用toggle()代替if ... else這裏,以進一步減少代碼更好:

('input[name^=checkbox_]').click(function(){ 
    $('#' + this.name).toggle('slow') 
}); 

切換也可以在替代點擊上運行不同的功能,而不是僅隱藏/顯示元素:

('input[name^=checkbox_]').toggle(function(){ 
    $('#' + this.name).hide('slow') 
}, function(){ 
    $('#' + this.name).show('slow') 
    }); 
+0

從經驗中我會說'.toggle()處理程序不是99%的時間......如果最初檢查複選框怎麼辦?如果它被顛倒了呢?雖然'.toggle()隱藏/顯示快捷方式「縮短了事情的效果,但效果並非如此,明確執行」hide「或」show「可確保元素的狀態與複選框的狀態相同。例如,如果用戶在DOM準備就緒之前點擊複選框,那麼它沒有執行並且狀態與它應該是相反的。或者,再次,如果複選框已被選中並且最初不同步呢? – 2010-07-09 17:01:02

+0

然後它不是他的解決方案;) – 2010-07-11 02:06:10

相關問題