2011-02-27 87 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”复选框类也是如此。