2010-06-08 62 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