Jquery切换事件与复选框值冲突
当用户单击复选框时,我使用Jquery的切换事件执行一些操作,如下所示:Jquery切换事件与复选框值冲突,jquery,forms,Jquery,Forms,当用户单击复选框时,我使用Jquery的切换事件执行一些操作,如下所示: $('input#myId').toggle( function(){ //do stuff }, function(){ //do other stuff } ); 问题是当我点击复选框时,复选框没有被勾选。(我在切换事件中输入的所有内容都正常工作。) 我尝试了以下方法: $('input#myId').attr('checked', 'checked'); 及 甚至很简单 return true; 但
$('input#myId').toggle(
function(){
//do stuff
},
function(){
//do other stuff
}
);
问题是当我点击复选框时,复选框没有被勾选。(我在切换事件中输入的所有内容都正常工作。)
我尝试了以下方法:
$('input#myId').attr('checked', 'checked');
及
甚至很简单
return true;
但一切都不起作用。谁能告诉我哪里出了问题
编辑-感谢所有回复的人。德雷斯的回答几乎对我有效,除了检查属性的部分。这工作得很好(尽管有点不正常)
再次感谢所有回复者。使用
change
事件而不是toggle
事件,如下所示:
$('input#myId').change(function () {
if ($(this).attr("checked")) {
//do the stuff that you would do when 'checked'
return;
}
//Here do the stuff you want to do when 'unchecked'
});
虽然使用Dreas Grech建议的
change
事件处理程序是合适的,但它在IE 6和IE 7中不起作用,IE 6和IE 7不会触发change
事件,直到焦点模糊为止(也就是说,直到您在复选框区域外单击)。正如我们所说,“这是一个严重的错误”
您可能希望使用单击
事件处理程序,但这不适用于键盘导航。您还需要注册一个keyup
处理程序
另见
我还并没有找到一个好的跨浏览器解决方案,它支持鼠标点击和键盘激活复选框(并且不会触发太多事件)
关于检查复选框是否选中的解决方案,您可以使用HTML的
checked
属性,而不是添加自己的checked
类:
$('input#myInput').change(function () {
if ($(this).attr("checked")) {
//do stuff if the checkbox is checked
} else {
//do stuff if the checkbox isn't checked
}
});
如果选中复选框,任何浏览器都会将
输入
元素的checked属性设置为值“checked”
,如果未选中复选框,则将其设置为null(或删除该属性)。我使用了类似的方法,但只是使用了checked属性,例如
//toggles checkbox on/off
$("input:checkbox").change(
function(){
if(!this.checked){
this.checked=true;
}
else{
this.checked=false;
}
}
);
//end toggle
尝试使用非jquery函数:
function chkboxToggle() {
if ($('input#chkbox').attr('checked'))
// do something
else
// do something else
}
然后以您的形式:
<input id="chkbox" type="checkbox" onclick="chkboxToggle()" />
这是MorningZ(我发现的)的回答,完全有道理:
您缺少的部分是“checkbox”是一个jQuery对象,而不是一个
复选框DOM对象
因此:
复选框。选中
肯定会出错,因为没有jQuery的。选中
属性
反对
因此:
复选框[0]。选中的
将起作用,因为jQuery数组上的第一项是DOM对象
本身
因此,在change()
函数中,您可以使用
$(this)[0].checked
这对我很有效。。。。。。。。。。。。检查它
$(":checkbox").click(function(){
if($(this).attr("id").split("chk_all")[1])
{
var ty = "sel"+$(this).attr("id").split("chk_all")[1]+"[]";
if($(this).attr("checked"))
{
$('input[name="'+ty+'"]').attr("checked", "checked");
}
else
{
$('input[name="'+ty+'"]').removeAttr("checked");
}
}
})
尝试:
为什么不使用$.is()
当你点击它时,它在浏览器中没有显示为选中状态,或者仅仅是你的事件没有触发?事件正确触发,所有正确的代码都在执行,但是复选框没有被选中!如果我发布表单中的值,复选框值也不会通过发布。使用toggleClass代替addClass、hasClass和removeClass。感谢您的输入,但我必须添加和删除类,而不是检查属性-出于某种原因,我无法完全实现这一点。我将在上面发布完整的解决方案(至少是对我有效的解决方案)。再次感谢!我一直想知道==和===之间的实际区别是什么?这个比较会使===变得必要吗?“==”执行类型强制(转换),这意味着编译器将隐式地尝试转换值。例如,[1==true//true]因为它将“true”转换为1…但是[1==true//false]因为数字不等于布尔值而不是$(this).attr(“checked”),您可以简单地调用this.checked,它将返回checked valueif($(this).is(:checked))//更好的检查方法对我有效,我使用它在应用某些逻辑之前进行检查。提供用户反馈非常方便
<input id="chkbox" type="checkbox" onclick="chkboxToggle()" />
$(this)[0].checked
$(":checkbox").click(function(){
if($(this).attr("id").split("chk_all")[1])
{
var ty = "sel"+$(this).attr("id").split("chk_all")[1]+"[]";
if($(this).attr("checked"))
{
$('input[name="'+ty+'"]').attr("checked", "checked");
}
else
{
$('input[name="'+ty+'"]').removeAttr("checked");
}
}
})
$(":checkbox").click(function(){
if($(this).attr("checked"))
{
$('input[name="name[]"]').attr("checked", "checked");
}
else
{
$('input[name="name[]"]').removeAttr("checked");
}
})
$('input#myId').change(
function() {
if ($(this).is(':checked')) {
// do stuff here
} else {
// do other stuff here
}
});
$("input[type=checkbox][checked=false]")// be shure to set to false on ready
$("input#Checkbox1").change(function() {
if ($(this).attr("checked")) {
$("#chk1").html("you just selected me")//the lable
} else {$("#chk1").html("you just un selected me") }
});