2010-06-08 64 views
0

我有一个AJAX调用,这是做每5秒这个呼叫,当呼叫“成功”我有一个触发停止触发jQuery中

success: function (msg) { 
     ... 
     $('#test').trigger('click'); 
     return false; 
    }, 
    ... 

但我必须这样做触发只有一次,第一次,不是每5秒!

有人建议我如何制止这种触发,或者可能使用另一种东西来触发这个“点击”

谢谢!

+0

我可以帮你更好的,如果你发布你的整个代码,包括运行在每隔5秒的代码 – Starx 2010-06-08 03:09:56

回答

2

添加一个全局变量的函数外部跟踪状态

var trigger_triggered = false; 

某处在你的Ajax调用

success: function (msg) { 
     ... 
     if(trigger_triggered == false) 
     { 
      $('#test').trigger('click'); 
      trigger_triggered = true; //set it executed here 
     } 
     return false; 
    }, 
+1

另一个选项是使用.data选项。如果($('#test')。data('triggered'))类型检查。 – 2010-06-08 03:56:12

+0

我从来没有想到这一点,傻我..根据天气元素#测试正在更新通过ajax,那么它将不得不去实时模式 – RobertPitt 2010-06-08 03:59:02

0

好吧,将ajax调用放在$(document).ready(function() { });中,它只会在文档准备就绪时执行。

或者,当您执行ajax调用时,创建一个会话标志来表示已经执行的脚本。

我的意思是

这是你的Ajax调用页面

<? 
if(!isset($_SESSION['scriptflag']) or $_SESSION['scriftflag']==false) { 
      //Your action 
      $_SESSION['scriptflag'] = true; 
} 
?> 

得到点

+0

我可以帮你更好的,如果你发布你的整个代码,包括其运行的代码的函数的函数每5秒钟 – Starx 2010-06-08 03:07:40

0

设置一个标志,它告诉你,你是否这样做过触发。如果你有,那么不要致电点击事件。

您也可以在触发器执行后从#test中删除click事件,以便在您调用trigger('click')时不发生任何事情。

或者我错过了这个问题的重点?

5

jQuery有事件一个内置的方法,该方法只能触发一次: one()

$('#test').one('click', function() { 
    // your regular click function 
    // which you only want to run once 

    // for example: 
    alert('event fired'); 
}); 

$('#test').trigger('click'); // "event fired" 
$('#test').trigger('click'); // <nothing> 
+0

这是正确的答案。没有理由引入状态变量。 – Cruel 2013-02-01 20:01:02