只运行一次javascript函数

只运行一次javascript函数,javascript,jquery,Javascript,Jquery,我有一个简单的javascript函数: <script type="text/javascript"> var popup = '0'; if(popup == '0') { $(document).ready(function () { $(document).on('click', '.button', function(){ alert('test');

我有一个简单的javascript函数:

<script type="text/javascript">
    var popup = '0';
    if(popup == '0') {
       $(document).ready(function () {     
            $(document).on('click', '.button', function(){
                  alert('test');
                  popup = '1';
            });
       }); 
    }
</script>

<button class="button">Test</button>

var popup='0';
如果(弹出窗口='0'){
$(文档).ready(函数(){
$(文档)。在('单击','按钮',函数()上){
警报(“测试”);
弹出窗口='1';
});
}); 
}
试验

我希望该功能仅在第一次单击时发出警报,但它仍能继续工作,尽管我已将
弹出窗口的值更改为1

按如下方式编写代码:

<script type="text/javascript">
    var popup = '0';

     $(document).ready(function () {     
          $(document).on('click', '.button', function(){
             if(popup == '0') {
                alert('test');
                popup = '1';
             }
          });
     }); 
</script>

正如Mathletics所提到的,更干净的方法是从内存中清除不必要的回调。

您需要的是
.one()
函数。它确保代码只为您触发一次

文件:

文档示例:

$( "#foo" ).one( "click", function() {
  alert( "This will be displayed only once." );
});
尝试:


var popup='0';
$(文档).ready(函数(){
$(文档)。在('单击','按钮',函数()上){
如果(弹出窗口='0'){
警报(“测试”);
}
弹出窗口='1';
});
}); 

您有一个函数将弹出窗口设置为1,但从未再次检查其值。通过这种方式,它会得到检查并正常工作。

首先,您可以说明他的解决方案被破坏的原因。然后你可以建议更好的方法。这会将处理程序留在内存中,每次触发都没有效果。解除绑定将完全删除处理程序。完全同意您的意见。但为什么不先教他当前的方法有什么错呢。然而,现在的问题也提出了更好的选择。我个人并不主张用同样糟糕的解决方案修复糟糕的代码。显然,投票结果表明,我既不是一个人,也不是一致支持;我们可以同意不同意。许多提问者只是简单地复制+粘贴解决方案,而不理解他们的方法为什么不起作用。我们在这里教学,同时也提供答案。-1这在jQuery docs@Mathletics:有什么问题?这个问题本身非常有效。@jsalonen IMO,已经足够成熟了,回答这样的简单问题不再有价值。这个问题是关于无法提问(“我如何才能只执行一次函数?”虽然公平地说,它在标题中有很好的表述),而不是关于一个独特的编程问题。我明白你的意思。如果您认为这不是一个独特的编程问题,请给我们指出一个重复的问题,我们可以继续进行结束投票。我还需要说,我更愿意将其视为一个不断增长的社区,在那里,新用户受到欢迎,支持Stackoverflow“教条”。你可能不同意,没关系。事实上,这就是为什么我们投票的原因是我的1个问题,我认为这是一个值得回答的问题。这似乎是最优雅的解决方案:以前没有听说过。
$( "#foo" ).one( "click", function() {
  alert( "This will be displayed only once." );
});
<script type="text/javascript">
    var popup = '0';

       $(document).ready(function () {     
            $(document).on('click', '.button', function(){
                if(popup == '0') {
                  alert('test');
                }
                  popup = '1';
            });
       }); 
</script>