Jquery 如何防止在子元素上执行单击操作?

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" )){

我在div中有一个收音机。get函数在单击div时更改收音机状态。问题是,当我单击radio本身时,操作会被调用两次(本机radio单击和div单击),因此它不会更改其状态。我如何预防它?尝试了
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复杂得多!若我说标签不合适,那个么就并没有理由争论了???好吧,但当我想要的是不可勾选的收音机时,它就不起作用了。所以,是的,这是一个解决方案,但不是全球性的。哇。。。有点长的解决方案。。。所以没有办法简单地中止默认行为?