2011-02-27 61 views
0

我需要運行一個功能,使複選框的行爲像單選按鈕。我知道,長話短說。無論如何,我想讓它更加可重用,而不必爲每個組重寫它。我有它的工作是這樣的:使功能更可重用

$(function() { 
    var $apples = $('input.apples'); 
    $apples.click(function() { 
     $apples.removeAttr('checked'); 
     $(this).attr('checked', true); 
    }); 
}); 

我怎樣才能讓這個越來越全球化,所以,如果我有另一組複選框.bannanas它會爲他們工作,以及無需重寫呢?

THX

回答

5

做一個插件:

例子:http://jsfiddle.net/YbGtE/2/

(function($) { 
    $.fn.makeRadios = function() { 
     var $items = this; 
     return this.click(function() { 
      $items.removeAttr('checked'); 
      $(this).attr('checked', true); 
     }); 
    }; 
})(jQuery); 

$('input.apples').makeRadios(); 
$('input.bananas').makeRadios(); 

編輯:正如評論要求如下,以取消對雙擊一個複選框,這樣做:

例如:http://jsfiddle.net/YbGtE/3/

(function($) { 
    $.fn.makeRadios = function() { 
     var $items = this; 
     return this.click(function() { 
      $items.removeAttr('checked'); 
      $(this).attr('checked', true); 
     }).dblclick(function() { 
      $items.removeAttr('checked'); 
     }); 
    }; 
})(jQuery); 

$('input.apples').makeRadios(); 
$('input.bananas').makeRadios(); 
+0

完美。謝謝帕特里克dw! – 2011-02-27 23:57:17

+0

@Dirty Bird設計:不客氣。 – user113716 2011-02-27 23:58:39

+0

+1 partrick,今天我學到了一件新事物。 – kobe 2011-02-27 23:58:58

1

使用選擇:

'input:checkbox' 

或者,如果只有特定的複選框都應該被改變,一類添加到選擇:

'input:checkbox.makeRadio' 

而那類添加到您想更改的複選框。

+0

對不起,「全球」是錯誤的字眼。它應該讀取「可重用」,如果您選中「bannana」複選框,這將取消選中「apple」複選框嗎?我需要保持兩個小組分開。 – 2011-02-27 23:47:27

+0

使用他的第二個示例,並將類'makeRadio'添加到所有您希望用作收音機的複選框。 – 2011-02-27 23:49:48

+0

他們需要只有他們的團體或班級有這種行爲。從「蘋果」中檢查一個不應該從「bannanas」中取消選中它,如果他們有相同的類,對吧? – 2011-02-27 23:58:03

0

如果假設每個組複選框具有相同class屬性,你可以將其與自動化:

$(function() { 
    var checkboxes = $('input:checkbox.asRadio'); 
    checkboxes.click(function() { 
     var myClass = $(this).attr('class'); 
     checkboxes.each(function() { 
      if($(this).attr('class') == myClass) $(this).removeAttr('checked'); 
     }); 
     $(this).attr('checked', true); 
    }); 
}); 

如果你想表現爲無線電領域有「asRadio」複選框類也是如此。