Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.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
Javascript 使用$.data()更改单击事件的状态时出现问题_Javascript_Jquery - Fatal编程技术网

Javascript 使用$.data()更改单击事件的状态时出现问题

Javascript 使用$.data()更改单击事件的状态时出现问题,javascript,jquery,Javascript,Jquery,大家先谢谢你。在下面的代码中,我想从一个数据值为no的foodiv开始,当单击时,我应该能够执行一个操作并将该值更改为yes。然后,当我再次单击div时,我想将该值更改回no,并且每次单击都会发生相同的情况。我的逻辑有什么问题?我尝试了不同的方法,比如使用attr。我做不到 <div id = "foo" data-clicked="no"> #FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO </div>

大家先谢谢你。在下面的代码中,我想从一个数据值为no的foodiv开始,当单击时,我应该能够执行一个操作并将该值更改为yes。然后,当我再次单击div时,我想将该值更改回no,并且每次单击都会发生相同的情况。我的逻辑有什么问题?我尝试了不同的方法,比如使用attr。我做不到

<div id = "foo" data-clicked="no"> #FOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO </div>

            $(document).ready( function(){
如果数据更改为是,为什么下面的代码不计算为真?它不起作用

我也在下面试过,但没用。。。我的逻辑

                $("#foo").on("click", function(){
                if($(this).attr("data-clicked") == "no"){
                    alert("turn on");
                    $(this).attr("data-clicked", "yes") 
                }
                if($(this).attr("data-clicked") == "yes"){
                    alert("turn off")
                    $(this).attr("data-clicked", "no")
                }

            })

看起来您只是在基于原始值设置处理程序。 将逻辑放在函数中可以克服这个问题,这可以通过多种方式实现。见下面的例子

示例1:使用else if

jQuerydocument.readyfunction{ //在这里,如果数据atribute:data clicked=no,那么当我单击foo时,div应该在控制台中将值更改为yes,并将alert更改为yes,它会这样做 jQueryfoo.onclick,函数{ 如果$this.dataclicked==否{ jQuerythis.dataclicked,是; 警报更改为是; console.logjQuerythis.dataclicked }否则,如果$this.dataclicked===是{ jQuerythis.dataclicked,否; 警报关闭; console.logjQuerythis.dataclicked; } }; };
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

<div clicked='no'> </div>

$('#foo').on('click', function(){
  $('#foo').attr('clicked') == 'no' ? $('#foo').attr('clicked', 'yes') : $('#foo').attr('clicked', 'no');
}

请参阅此方法:

jQuery的数据不会更改属性,它会更改jQuery中的内部存储。如果这只是为了创建一个切换函数,那么很好,如果需要更改实际属性,那么必须使用attr。代码的问题是,您正在检查单击处理程序外部的数据,每次单击时,它都需要在该处理程序内部进行检查。我想更改属性是因为我想为元素指定值on off开关。使用.attr还是数据更容易?我希望能够通过我的代码将这些信息用于条件语句。感谢您的光临,我正在检查点击处理程序中的数据,但我猜数据不会在点击处理程序之间传输,否则如果方法真的有用,我几乎从未使用过其他如果。我想我可以在两个独立的if语句中完成为什么我不能完成它。你能在点击处理程序中给我看两个不同的if语句吗?我认为这会很有帮助。我知道效率不高,但我正在学习。很好的回答,我会接受。我可以在if语句中使用$this.data而不是jQueryfoo。我想知道为什么你不能使用两个单独的if语句,因为如果第一个if语句发现no,它会将其更改为yes,然后第二个if语句会运行并将其更改回no。这就是为什么我使用else if,但实际上更稳健的方法可能是使用switch语句,如我在示例2中所述。我没有想到,但你当然应该这样做。将更新答案
                $("#foo").on("click", function(){
                if($(this).attr("data-clicked") == "no"){
                    alert("turn on");
                    $(this).attr("data-clicked", "yes") 
                }
                if($(this).attr("data-clicked") == "yes"){
                    alert("turn off")
                    $(this).attr("data-clicked", "no")
                }

            })
<div clicked='no'> </div>

$('#foo').on('click', function(){
  $('#foo').attr('clicked') == 'no' ? $('#foo').attr('clicked', 'yes') : $('#foo').attr('clicked', 'no');
}