我使用toggle()函数来执行两个函数。当我单击带有class=“宠儿”的图像时,在第一次单击时,必须执行第一个函数,并且我应该得到警报(‘test1’);对于第二个单击,必须执行第二个函数,我应该得到警报(‘test2’),并且执行必须停止。
我的问题是,当第二次单击图像时,我得到警告(‘test2’),然后是警报(‘test1’),第二次单击时只执行第二个函数,即在第二次单击时只得到警告(‘test2’)。如何在第二次单击时停止第一个函数的执行?
这是我在index.phtml文件中的jquery代码:
jqry("#wrap").delegate('img.favourite','click',function(){
var id = jqry(this).attr('pid');
jqry('#'+id).toggle(function(){
alert('test1');
},
function(){
alert('test2');
}
);
});
这是我在JS文件中的代码
<img class="favourite" src="images/fav.png" alt="favourite" pid ='project_id'>
我第一次点击得到的输出是test1
。
第二次单击得到的输出是test2
test1
。
在第二次单击时,我应该获得输出警报test2
并停止执行,但它将进一步执行前面的函数,并给出两个警报,即test2
和test1
。我怎么才能解决这个问题?
发布于 2014-04-09 00:10:33
您使用的.toggle()
格式在jQuery 1.8中被废弃,在1.9中被删除。此外,每次调用它时,它都会绑定一个单击处理程序,因此您真的不想多次调用它--这可能是您看到两个警报的原因,因为每次绑定它时,都会在单击时再得到一个回调。第一次,第二次,第三次,等等。
我建议你在每次点击时找到一种不同的交替函数的方法。也许只需使用.data()
在项目上设置一个标志,然后根据标志设置一个备用标志。
对于id元素上的.toggle()
函数,还不太清楚,但这将使您可以交替调用函数,然后可以在每个函数中实现您想要的任何操作:
jqry("#wrap").delegate('img.favourite', 'click', function() {
var toggle = $(this).data("toggleFlag") || false;
var id = jqry(this).attr('pid');
if (toggle) {
// do whatever you want with id here
alert("test1");
} else {
// do whatever you want with id here
alert("test2");
}
// reverse the toggle flag
$(this).data("toggleFlag", !toggle);
});
https://stackoverflow.com/questions/22956278
复制相似问题