【问题标题】:Event when checkbox is checked by removeAttr('checked')removeAttr('checked') 选中复选框时的事件
【发布时间】:2013-01-11 20:09:30
【问题描述】:

我有一个功能可以通过这样做取消选中复选框:

$('[name = destination]').removeAttr('checked');

现在我希望在复选框上触发一个事件,就像我手动检查它一样。有活动吗?

我尝试过更改并单击。当我手动选中/取消选中该框时,两者都可以工作,但像这样完成时则不行。

【问题讨论】:

  • “我尝试过更改并单击。”您为该部分尝试的代码在哪里?
  • $('[name = destination]').live('change', function() {

标签: jquery


【解决方案1】:

为什么不将属性设置为false,而不是删除属性

$('[name = destination]').removeAttr('checked');

试试

$('[name = destination]').prop('checked', false);

然后写下处理你正在寻找的这个功能的事件

$('[name = destination]').on('click' , function(){
  var $chk = $('[name="description"]');
  if($chk.is(':checked')){
       console.log('Checkbox is checked !!');
  }
  else{
       console.log('Checkbox is now UNCHECKED !!');
  }
});

$('[name = destination]').prop('checked', false).trigger('click');

您也可以使用.trigger()方法手动触发事件

  $('[name = destination]').trigger('click');

触发事件时要小心

如果您使用 this 来检查状态,则在这种情况下可能不会反映当前的属性状态

Check Fiddle

【讨论】:

  • 你仍然需要触发一个事件,不是吗?
  • 不起作用。 .prop('checked', false); 仍然不会触发点击和更改事件;
  • 试试这个$('[name = destination]').prop('checked', false).trigger('click');
【解决方案2】:

当您更改checked 属性时,您将需要手动触发changeclick 事件(您可能应该通过prop 而不是changeAttribute 来执行此操作,正如另一张海报提到的那样)

这只是意味着而不是仅仅

$('[name = destination]').removeAttr('checked');

$('[name = destination]').removeAttr('checked');
$('[name = destination]').trigger('click');

【讨论】:

  • 我希望避免必须记住在选中或取消选中该框的每个函数中触发此事件。也许没有这样的方法。
  • 嗯嗯。我将使用这种触发方法。谢谢。 (我可以在 6 分钟内接受)
  • 啊,不。它没有用。触发单击或更改实际上会导致框被单击/更改。但这就是我刚刚对 .removeAttr('checked'); 所做的。它实际上撤销了我刚刚所做的。我想我只需要定义并显式调用一个函数来完成我想要它做的事情。或者验证该框的选中状态,然后决定是否要触发点击。
  • 顺便说一句,但请记住,您可以(如果到处都是,可能应该)创建一个函数来进行检查 - 这样您就不必记得检查了。
【解决方案3】:

触发事件 $('[name = destination]').click();

它会在您手动单击复选框时起作用

【讨论】:

    猜你喜欢
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2013-06-23
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多