2014-12-02 72 views
0

我使用jQuery 1.6.2。當該元素出現在頁面上時,我只想調用一次點擊事件。這是我的選擇:元素出現後立即致電點擊事件?

span[resizer='north'][title=''] :first-child" 

這可以觸發點擊事件工作:

$("span[resizer='north'][title=''] :first-child").click(); 

我怎樣才能使它只有一次工作或該元素後出現在網頁上?

+0

使用'off()'解除點擊事件 – Mivaweb 2014-12-02 15:29:35

+0

該元素是通過AJAX加載的,還是通常在DOM中加載? – j08691 2014-12-02 15:29:54

+0

@VDesign'off()'不是jQuery 1.6.2的一部分嗎? – kamaci 2014-12-02 15:30:46

回答

0

答案根據我的理解你的最新評論:我的意思是我只會打電話點擊事件一次。我們假設有一個按鈕。我將調用該按鈕的單擊事件一次。我的意思是我會以編程方式點擊那個按鈕。

$('button').click(function() { 

    $('span[resizer='north'][title='']:first-child').click(); 
    $(this).unbind('click'); 
}); 
0

你可以使用DOMNodeInserted事件時,新元素動態插入檢測。

var alreadyclicked = false; // variable to check that it will be clicked just once 
$(document).bind('DOMNodeInserted', function(e) { 
    if (!alreadyclicked){ 
     $("span[resizer='north'][title=''] :first-child").click(); 
     alreadyclicked = true; 
    } 
}); 

更新

DOMNodeInserted事件與其他mutation events一起棄用。一些瀏覽器支持它,但看起來這不會持續很長時間。

您可以使用mutation observers,而不是跟蹤變化的DOM

var alreadyclicked = false; 
var observer = new MutationObserver(function(mutations, observer){ 
      //if new nodes were added 
      if(mutations[0].addedNodes.length && !alreadyclicked) 
       $("span[resizer='north'][title=''] :first-child").click(); 
       alreadyclicked = true; 

     }); 
observer.observe(document, { childList:true, subtree:true }); 
0

使用自定義事件,有一個委託處理程序使用附接的。一()。

事件有2個組件,觸發和處理。不要關注它被觸發了多少次,關注它被處理了多少次。

$("document").one("myclick", "span[resizer='north'][title=''] :first-child", function(e) { 
    do something...; 
    $(this).click(); //if you actually need the "click" 
}); 
$("span[resizer='north'][title=''] :first-child").trigger("myclick"); 

這個例子將意味着它的「處理」一次。這裏的其他答案可用於確保在文檔準備好之後添加元素時觸發它。

你也可以使用一個pub/sub,這會讓它更容易。然後,您只需從ajax或任何可添加元素的代碼觸發您的自定義事件,而不必擔心專門針對元素。訂閱中的最後一行代碼將取消訂閱。