Javascript 如何在jquery中使用toggle执行两个函数?

Javascript 如何在jquery中使用toggle执行两个函数?,javascript,jquery,html,Javascript,Jquery,Html,我使用切换函数来执行两个函数。 当我单击class=favorite的图像时,第一次单击时,必须执行第一个函数,我应该得到警报“test1”,第二次单击时,必须执行第二个函数,我应该得到警报“test2”,执行必须停止在那里 我的问题是,当第二次单击图像时,我会收到警报“test2”,然后是警报“test1”,第二次单击只应执行第二个函数,即第二次单击时我只应收到警报“test2”。如何在第二次单击时停止第一个函数的执行 这是index.phtml文件中的jquery代码: jqry("#wra

我使用切换函数来执行两个函数。 当我单击class=favorite的图像时,第一次单击时,必须执行第一个函数,我应该得到警报“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'>
我第一次点击得到的输出是 测试1

我在第二次单击时得到的输出是 测试2 测试1

在第二次单击时,我应该获得输出警报test2并停止执行,但它将进一步执行前面的函数并同时发出警报,即test2和test1。如何解决这个问题?

您使用的.toggle格式在jQuery 1.8中被弃用,在1.9中被删除。此外,每次调用它时,它都会绑定一个click处理程序,因此您确实不想多次调用它,这可能就是为什么您会看到两个警报的原因,因为每次绑定它时,一次单击就会得到一个以上的回调。先是一个,然后是两个,然后是三个,等等

我建议您在每次单击时找到一种不同的交替函数的方法。可能只是在项目上设置一个标志,并基于该标志使用.data和alternate

目前还不清楚您试图对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);
});

缩进代码会使代码更具可读性。有几件事我不明白。您正在呼叫+id,即使您的图像上没有id。此外,如果您切换图像,第二次如何单击它?如果它被隐藏了?@Niklas-我想他们在呼叫。切换到其他对象。但是,他们想要达到什么目的还不清楚。@Rajitha-既然你是StackOverflow的新手,你应该知道当有人回答你的问题或许多问题中最好的答案时,你可以勾选答案左边的绿色复选标记。这向您选择的答案的其他人表明,这会为您和回答者赢得一些信誉点,随着时间的推移,这些信誉点可以为您在该网站上赢得特权。谢谢,这很有效!!但当我加载页面时,函数只在单击两次后运行,然后工作正常,但如果刷新页面,我需要再次单击两次。怎么解决这个问题?是的,我正要去,现在我检查了绿色支票mark@Rajitha-我必须看到更多的页面和你的实际代码,才能知道为什么需要额外的点击。所有的代码都是我在查询中粘贴的。如果这工作正常,我需要通过在警报附近放置实际代码来实现它。现在我想知道为什么我需要点击两次来获得第一个警报,以及我应该做什么来运行第一次点击。