Jquery 如何防止在子元素上执行单击操作?
我在div中有一个收音机。get函数在单击div时更改收音机状态。问题是,当我单击radio本身时,操作会被调用两次(本机radio单击和div单击),因此它不会更改其状态。我如何预防它?尝试了Jquery 如何防止在子元素上执行单击操作?,jquery,Jquery,我在div中有一个收音机。get函数在单击div时更改收音机状态。问题是,当我单击radio本身时,操作会被调用两次(本机radio单击和div单击),因此它不会更改其状态。我如何预防它?尝试了stopPropagation(),preventDefault(),返回false,但没有结果 $('div').click(function(e){ var elem = $('input[type=radio]',this); if(elem.prop( "checked" )){
stopPropagation()
,preventDefault()
,返回false,但没有结果
$('div').click(function(e){
var elem = $('input[type=radio]',this);
if(elem.prop( "checked" )){
elem.prop('checked', false);
}else{
elem.prop('checked', true);
}
if(e.target != this){
e.preventDefault();
e.stopPropagation();
return false;
}
});
**我已经将一个问题编辑为更恰当的情况,对不起,但这些答案不是我需要的**最简单的解决方案是检查目标是否是输入元素(因为div中只有一个复选框,如果目标是输入元素,那么它就是复选框),如果是,不要做任何事情
$('div').click(function (e) {
if (e.target.tagName == 'INPUT') {
return;
}
var elem = $('input[type=checkbox]', this);
if (elem.prop("checked")) {
elem.prop('checked', false);
} else {
elem.prop('checked', true);
}
});
演示:尝试使用,event.stopImmediatePropagation()。这将停止其他事件的发生 您可以使用输入
:
$('div').click(function(e){
var elem = $('input[type=checkbox]',this);
if(elem.prop( "checked" )){
elem.prop('checked', false);
}else{
elem.prop('checked', true);
}
});
$('input').click(function(e) {
e.stopPropagation();
});
编辑:希望这是您的要求:
$('div').click(function (e) {
var elem = $('input[type=radio]', this);
if (elem.prop("checked")) {
elem.prop('checked', false);
} else {
elem.prop('checked', true);
}
});
var radioStatus = false;
$.each($('input[type=radio]'), function () {
// Set initial state of radio
this.radioStatus = $(this).attr("checked") || false;
$(this).data("status", this.radioStatus);
// Set mouse-over event callback
$(this).mouseover(function () {
this.radioStatus = $(this).attr("checked") || false;
$(this).data("status", this.radioStatus);
});
// Set on-click event callback
$(this).click(function () {
this.radioStatus = !$(this).data("status")
$(this).attr("checked", this.radioStatus);
$(this).data("status", this.radioStatus);
});
});
“我在div.get函数中得到了一个复选框,它可以在单击div时更改复选框状态。”–这就是标签
元素的用途;因此,使用合理的HTML,而不是用JavaScript实现已经给定的功能。这是简化的情况。如果我能使用标签,我会使用它!我说你很可能会,除非你提供更多的信息来证明这一点。请阅读编辑。我需要取消选择收音机盒。检查输入的元素可能比某些div复杂得多!若我说标签不合适,那个么就并没有理由争论了???好吧,但当我想要的是不可勾选的收音机时,它就不起作用了。所以,是的,这是一个解决方案,但不是全球性的。哇。。。有点长的解决方案。。。所以没有办法简单地中止默认行为?