Javascript 为什么可以';是否单击使用jQuery动态创建的此复选框?

Javascript 为什么可以';是否单击使用jQuery动态创建的此复选框?,javascript,jquery,jquery-ui,checkbox,Javascript,Jquery,Jquery Ui,Checkbox,我正在使用一个jQuery插件,它允许用户在一个区域中绘制框。我使用jQuery在用户松开鼠标按钮时出现的框中放置一个复选框(以及一个下拉列表)(这是JSFIDLE中javascript的底部)。问题是,复选框不可勾选 我确实在\u mouseStart、\u mouseDrag和\u mouseStop事件中有一些单击检查代码来阻止在现有框中单击时创建另一个框,但我认为这不会导致问题,因为可以单击创建的下拉列表,此外,如果删除了“单击检查”代码,则复选框仍不可勾选 是什么导致复选框不可勾选?谢

我正在使用一个jQuery插件,它允许用户在一个区域中绘制框。我使用jQuery在用户松开鼠标按钮时出现的框中放置一个复选框(以及一个下拉列表)(这是JSFIDLE中javascript的底部)。问题是,复选框不可勾选

我确实在
\u mouseStart
\u mouseDrag
\u mouseStop
事件中有一些单击检查代码来阻止在现有框中单击时创建另一个框,但我认为这不会导致问题,因为可以单击创建的下拉列表,此外,如果删除了“单击检查”代码,则复选框仍不可勾选

是什么导致复选框不可勾选?谢谢你的阅读

编辑: 多亏了VinayC的回答,我现在可以看到单击到达复选框,代码如下:

$('#box').click(function(e){
    alert('clicked');
    $(this).attr('checked', true);
});
但是
$(this.attr('checked',true)行不会选中复选框。谁能告诉我为什么?我已经更新了

编辑2:
Harmen注意到代码为每个复选框分配了相同的id。在实际代码中,id后面附加了一个计数器,因此每个计数器都是唯一的,但我去掉了它,因为我认为这只是jQuery的问题。我想更改JSFIDLE,但如果您只创建一个框(即一个复选框),同样的问题也会出现。

看来顶级事件处理程序正在取消单击事件。在复选框元素警报上添加onclick事件处理程序,您将看到click到达复选框。

您正在使用相同的
id创建多个复选框。

我不知道为什么,但在摆弄(是的,在fiddlejs上)时,这似乎起到了作用

  $('#box', ui.box).click(
      function(evt){
          evt.stopPropagation();
      }
   );
当设置框时。见:

我实际上试图截获事件并手动将其设置为选中状态,但如果不需要设置它,那么嘿。。也许在某个地方产生了一个额外的事件,否定了第一个。。?但单击只会触发一次

可能与


注:仅在Chrome for Linux上进行了测试,实际上在警报可见时会对其进行检查,但之后会变得未经检查。我猜,在事件处理程序将其设置为选中后,单击的默认事件(即切换复选标记)将发生,并且由于此时选中了它,因此它再次变为未选中。尝试从单击处理程序调用。

您也可以尝试这种更通用的方法

这对我有用

$(document).click(function (e) {
   if (element.tagName == 'INPUT') {
      if ($(element).attr("type") == 'checkbox') {
         e.stopPropagation();                                
         e.preventBubble();                             
         return;
      }
   }
});

那个插件似乎给你带来了各种各样的麻烦@亚历克斯:当然是!希望我知道足够多的jQuery来创建我自己的jQuery。谢谢你的回答,现在我看到点击到达了复选框。但是我仍然不能设置复选框,我已经编辑了这个问题。啊,谢谢你。我实际上不在真正的代码中,因为我根据一些外部代码为每个代码的id添加了一个计数器,我只是想去掉这一点,因为它会混淆事情,这似乎只是jQuery的问题。但是,如果只创建一个复选框,同样的问题也会发生,并且只有一个复选框。谢谢你的回复,我会把这个编辑成问题。谢谢萨根!我一直在扯头发,但现在效果很好。