Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery切换事件与复选框值冲突_Jquery_Forms - Fatal编程技术网

Jquery切换事件与复选框值冲突

Jquery切换事件与复选框值冲突,jquery,forms,Jquery,Forms,当用户单击复选框时,我使用Jquery的切换事件执行一些操作,如下所示: $('input#myId').toggle( function(){ //do stuff }, function(){ //do other stuff } ); 问题是当我点击复选框时,复选框没有被勾选。(我在切换事件中输入的所有内容都正常工作。) 我尝试了以下方法: $('input#myId').attr('checked', 'checked'); 及 甚至很简单 return true; 但

当用户单击复选框时,我使用Jquery的切换事件执行一些操作,如下所示:

$('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") }    
    });