Javascript 当我单击复选框中的任何位置时,如何正确选中此复选框?

Javascript 当我单击复选框中的任何位置时,如何正确选中此复选框?,javascript,jquery,html,forms,input,Javascript,Jquery,Html,Forms,Input,这确实有效,但现在当我单击复选框本身时,它不会被选中。我假设是因为它正在被检查,然后JS会立即取消选中它。但我不太确定我会怎么说“如果我单击复选框以外的任何位置”检查事件是否不是来自复选框本身,如下所示: $('.vehicle-item').click(function() { var $checkbox = $(this).find('input'); $checkbox.attr('checked', !$checkbox.attr('checked')); }); .检查事

这确实有效,但现在当我单击复选框本身时,它不会被选中。我假设是因为它正在被检查,然后JS会立即取消选中它。但我不太确定我会怎么说“如果我单击复选框以外的任何位置”

检查事件是否不是来自复选框本身,如下所示:

 $('.vehicle-item').click(function() {
  var $checkbox = $(this).find('input');
  $checkbox.attr('checked', !$checkbox.attr('checked'));
 });

.

检查事件是否不是来自复选框本身,如下所示:

 $('.vehicle-item').click(function() {
  var $checkbox = $(this).find('input');
  $checkbox.attr('checked', !$checkbox.attr('checked'));
 });

.

最近,人们以另一种方式提出了这个问题,与某些儿童的活动冒泡和停止有关

您需要确保事件不会为您的案例中的复选框本身触发

$('.vehicle-item').click(function(e) {
  if(e.target.nodeName == "INPUT") return;
  var cb = $(this).find('input')[0];
  cb.checked = !cb.checked;
});

最近有人以另一种方式提出了这个问题,与某些儿童的活动沸腾和停止有关

您需要确保事件不会为您的案例中的复选框本身触发

$('.vehicle-item').click(function(e) {
  if(e.target.nodeName == "INPUT") return;
  var cb = $(this).find('input')[0];
  cb.checked = !cb.checked;
});

+1! jQuery的较新版本支持
.attr('checked',/*bool在这里*/)
。我想这会更优雅。太好了!不过你有一个输入错误;)<代码>cb非
ch
。很好,谢谢:D@elusive:这就是我所拥有的。。。除了切换它,您还必须再次使用
.attr
检索它。。。我认为Nick的答案实际上更优雅。@elvasive-虽然会贵得多:)而且,据我记忆所及,它在jQuery中是受支持的,可能是1.0。@Nick:它实际上在JSFIDLE中对我不起作用。但在我的实际网页上工作。+1!jQuery的较新版本支持
.attr('checked',/*bool在这里*/)
。我想这会更优雅。太好了!不过你有一个输入错误;)<代码>cb非
ch
。很好,谢谢:D@elusive:这就是我所拥有的。。。除了切换它,您还必须再次使用
.attr
检索它。。。我认为Nick的答案实际上更优雅。@elvasive-虽然会贵得多:)而且,据我记忆所及,它在jQuery中是受支持的,可能是1.0。@Nick:它实际上在JSFIDLE中对我不起作用。不过,在我的实际网页上可以使用。仅供参考,您的HTML代码在Chrome中可以正常工作,而不需要jQuery代码。不过,在FF中,它的作用与您描述的一样。@Gregg:我先在FF中测试:)如果任何主要浏览器出现故障,它都是无用的。有趣的是,您的HTML代码在Chrome中的工作方式与没有jQuery代码的Chrome相同。不过,在FF中,它的作用正如您所描述的那样。@Gregg:我先在FF中测试:)如果任何主要浏览器出现故障,它都是无用的。