Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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_Checkbox - Fatal编程技术网

JQuery:切换用户刚刚切换的复选框

JQuery:切换用户刚刚切换的复选框,jquery,checkbox,Jquery,Checkbox,编辑这个问题是而不是重复的问题,因为这里的这个问题专门询问一种特殊情况:“一旦用户单击复选框,该复选框将停止响应“已选中”属性的更改。” 有一个答案(一个答案与另一个答案相比,得票较少)谈到了这一点,但该答案中的所有链接都完全断开了 我想做点什么“出于好奇”。我想做的事毫无意义 我成功地使用JQuery来显示复选框是否通过警报被选中或取消选中。以下工作很好: $(document).ready(function() { $('.cb').change(function(){ if (

编辑这个问题是而不是重复的问题,因为这里的这个问题专门询问一种特殊情况:“一旦用户单击复选框,该复选框将停止响应“已选中”属性的更改。”

有一个答案(一个答案与另一个答案相比,得票较少)谈到了这一点,但该答案中的所有链接都完全断开了

我想做点什么“出于好奇”。我想做的事毫无意义

我成功地使用JQuery来显示复选框是否通过警报被选中或取消选中。以下工作很好:

$(document).ready(function() {
  $('.cb').change(function(){
    if ($('.cb').is(':checked')) {
      alert('changed to checked');
    } else {
      alert('changed to unchecked');
    }
   });
});
但是,我不知道如何将复选框返回到其初始状态(再一次:这样做没有意义,但我想这样做)

是否可以这样做?是否可以在不触发更改事件的情况下将复选框切换回其原始状态

我尝试了attr和removeAttr,但没有成功。

在更改事件添加中:

$(this.prop('checked',!this.checked))

检查我的小提琴:


在callbackfunctions中,您应该始终使用
$(this)
访问触发元素。在您的代码中,您总是选中(并更改)cb类的所有复选框。

请参见@j08691:我尝试了这一点,但没有成功。。。我正试图从一个回调中更改这个复选框,这个回调名为“精确单击该复选框,可以这样做吗?”?难道没有“无限事件”的问题吗?如果有变化,触发调用,我切换回值,重新触发调用。我认为变化事件是不可避免的。如果要避免执行更改时发生的某些代码,则必须添加catch。因此,您希望复选框上更改事件的回调与用户的单击操作相反吗?如果你让它工作起来,宇宙可能会内爆。@j08691:这是因为实际上任何更改都会对新页面进行post/redirect/get操作:每个页面都是无状态的,并且对应于一个状态(和一个URL)。这一切都很好,除了在某些浏览器上,当用户单击后退按钮时,他会进入上一页,但复选框被错误地{un}选中。如果我能做到我在这里要求的,我会解决我的问题…+1,很棒的jsfiddle在那里。。。然而有一件事让我完全困惑:为什么当你改变值时,一个新的改变(…)不会被触发?在未来版本的JQuery中是否保证不会触发更改事件?更改事件仅在用户交互时触发。我不知道这是js/浏览器的限制还是作为jQuery的设计要求。您可以确保它不会在任何浏览器中触发。至少这是我从jQuery文档中读到的。
$(document).ready(function() {
  $('.cb').change(function(){
    if ($(this).is(':checked')) {
        alert('changed to checked -> uncheck again');
        $(this).attr('checked', false);
    } else {
        alert('changed to unchecked -> recheck');
        $(this).attr('checked', true);
    }
   });
});​