jQuery event.target和(“:checked”)不起作用

时间:2011-09-04 13:30:54

标签: jquery

只是一个简单的问题。

我正在使用

console.log(jQuery(event.target).is(":checked"));

并且每次都返回false。

如果我这样做,console.log(jQuery(event.target))打印出输入框,所以我知道event.target是正确的。

我不能在这里使用this,因为jQuery事件绑定到父div。

为什么这不起作用的任何想法?似乎很容易。

EDIT ######################################### 其余代码:

jQuery(".core-create-install-pkg-parent").live("click", function(event){
var cls = jQuery(event.target).attr("type");
if(cls != "checkbox"){
    event.stopPropagation();
    jQuery(".core-create-install-pkg-child:first", this).toggle();
}else{
    console.log(event.target);
    if(jQuery(event.target).is(":checked")){
        console.log("it's checked");
        jQuery("input[type=checkbox]", this).removeAttr('checked'); 
    }else{
        console.log("not checked");
        jQuery("input[type=checkbox]", this).attr("checked", true);
    }
}
});

html看起来像:

<div class="core-create-install-pkg-parent">
  <div class="core-create-install-pkg-title">
    <input type="checkbox" value="" checked>
    plugins
  </div>
</div>

2 个答案:

答案 0 :(得分:15)

不需要jQuery:

event.target.checked
如果event.target是复选框,则

应该有效。但是,你的代码应该也可以正常工作......如果没有,那么元素不是复选框,也不是其他错误。

答案 1 :(得分:7)

此代码剪切的问题是您在切换后立即恢复控件。

if (jQuery(event.target).is(":checked")) { //Enters if the checkbox is checked
    console.log("it's checked");
    jQuery("input[type=checkbox]", this).removeAttr('checked'); //Removes the checked attribute, effectively unchecking it
} else { //Enters if the checkbox is Unchecked
    console.log("not checked");
    jQuery("input[type=checkbox]", this).attr("checked", true); //Sets the checked attribute, checkbox becomes checked again
}

我还建议使用jquery的prop方法来测试checked状态(返回true或false)。 [需要jQuery 1.6)

($(event.target).prop("checked")
($(event.target).prop("checked", true)