单击以使用jQuery切换

时间:2009-09-23 16:41:38

标签: jquery onclick toggle

我使用了悬停功能,你可以在鼠标悬停和y和mouseout上执行x。我正在为点击尝试相同但它似乎不起作用:

$('.offer').click(function(){ 
  $(this).find(':checkbox').attr('checked', true ); 
},function(){
  $(this).find(':checkbox').attr('checked', false ); 
});

我希望在点击div时选中该复选框,如果再次点击则取消选中 - 点击切换。

15 个答案:

答案 0 :(得分:214)

通过在每次点击时翻转复选框的当前“已检查”状态,可以轻松完成此操作。例子:

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox.attr('checked'));
 });

或:

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox.is(':checked'));
 });

或者,通过直接操作DOM'checked'属性(即不使用attr() 获取所点击的复选框的当前状态):

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.attr('checked', !$checkbox[0].checked);
 });

......等等。

注意:自jQuery 1.6起,复选框应使用prop而不是attr设置:

 $(".offer").on("click", function () { 
       var $checkbox = $(this).find(':checkbox');
       $checkbox.prop('checked', !$checkbox[0].checked);
 });

答案 1 :(得分:27)

另一种方法是像这样扩展jquery:

$.fn.toggleCheckbox = function() {
    this.attr('checked', !this.attr('checked'));
}

然后致电:

$('.offer').find(':checkbox').toggleCheckbox();

答案 2 :(得分:11)

警告:使用 attr() prop()更改复选框的状态不会触发更改事件在我测试过的大多数浏览器中。检查状态将发生变化,但没有事件冒泡。您必须在设置checked属性后手动触发更改事件。我有一些其他事件处理程序监视复选框的状态,它们可以正常用户点击直接。但是,以编程方式设置已检查状态无法始终触发更改事件。

jQuery 1.6

$('.offer').bind('click', function(){ 
    var $checkbox = $(this).find(':checkbox');
    $checkbox[0].checked = !$checkbox[0].checked;
    $checkbox.trigger('change'); //<- Works in IE6 - IE9, Chrome, Firefox
});

答案 3 :(得分:7)

您可以使用toggle功能:

$('.offer').toggle(function() {
    $(this).find(':checkbox').attr('checked', true);
}, function() {
    $(this).find(':checkbox').attr('checked', false);
});

答案 4 :(得分:2)

为什么不在一行?

$('.offer').click(function(){
    $(this).find(':checkbox').attr('checked', !$(this).find(':checkbox').attr('checked'));
});

答案 5 :(得分:1)

我有一个名为chkDueDate的复选框和一个带有点击事件的HTML对象,如下所示:

$('#chkDueDate').attr('checked', !$('#chkDueDate').is(':checked'));

单击HTML对象(在本例中为<span>)切换复选框的checked属性。

答案 6 :(得分:1)

jQuery:Best Way,将动作委托给jQuery(jQuery = jQuery)。

$( "input[type='checkbox']" ).prop( "checked", function( i, val ) {
    return !val;
});

答案 7 :(得分:0)

尝试改变这一点:

$(this).find(':checkbox').attr('checked', true ); 

到此:

$(this).find(':checkbox').attr('checked', 'checked'); 

不是100%肯定是否会这样做,但我似乎记得有类似的问题。祝你好运!

答案 8 :(得分:0)

$('.offer').click(function(){ 
    if ($(this).find(':checkbox').is(':checked'))
    {
        $(this).find(':checkbox').attr('checked', false); 
    }else{
        $(this).find(':checkbox').attr('checked', true); 
    }
});

答案 9 :(得分:0)

在JQuery中,我不认为click()接受两个切换函数。您应该使用toggle()函数:http://docs.jquery.com/Events/toggle

答案 10 :(得分:0)

$('.offer').click(function() { 
    $(':checkbox', this).each(function() {
        this.checked = !this.checked;
    });
});

答案 11 :(得分:0)

<label>
    <input
        type="checkbox"
        onclick="$('input[type=checkbox]').attr('checked', $(this).is(':checked'));"
    />
    Check all
</label>

答案 12 :(得分:0)

最简单的解决方案

$('.offer').click(function(){
    var cc = $(this).attr('checked') == undefined  ? false : true;
    $(this).find(':checkbox').attr('checked',cc);
});

答案 13 :(得分:0)

切换复选框值的另一种替代解决方案:

<div id="parent">
    <img src="" class="avatar" />
    <input type="checkbox" name="" />
</div>


$("img.avatar").click(function(){

    var op = !$(this).parent().find(':checkbox').attr('checked');
    $(this).parent().find(':checkbox').attr('checked', op);

});

答案 14 :(得分:0)

    $('controlCheckBox').click(function(){
    var temp = $(this).prop('checked');
    $('controlledCheckBoxes').prop('checked', temp);
});