2014-01-07 92 views
0

我有一個小工具提示。在一些地方,它被動態添加到頁面上。在其他情況下,它從一開始就存在。jQuery:如何檢查一個元素是否動態添加?

因爲像$("mytooltip").mouseover(...)不會爲動態添加我必須使用像$("body").on("mouseover, ".mytooltip", function(){...})

我擔心元素然而工作與第二個解決方案,它會嘗試每一個我將時間以觸發功能鼠標在body上,效率非常低(對吧?)。

我在想也許我可以在我動態添加工具提示時觸發某種自定義事件。這樣,如果事件被解僱,我們切換到$("body").on("mouseover", .....);,否則,我們將使用普通的$(".mytooltip").mouseover

因此,像:

if(...){//Event was fired - i.e. we've added the tooltip dynamically 
     $("body").on("mouseover", ".mytooltip", function(){ 
      mouseOverFunc(); 
     }); 
     $("body").on("mouseout", ".mytooltip", function(){ 
      mouseOutFunc(); 
     }); 
    }else{ 
     $(".mytooltip").mouseover(function(){ 
      mouseOverFunc(); 
     }); 
     $(".mytooltip").mouseout(function(){ 
      mouseOutFunc(); 
     }); 

    } 

的問題是,我不知道如何來檢測,如果事件被解僱或不....

PS - 獎金的問題:是什麼我做得合理嗎?還是我太過分了,應該只爲$("body").on("mouseover")做一切?

+0

看你如何添加工具提示,作爲事件處理程序可以添加到我會更有益創建它時的元素 – adeneo

+0

工具提示只是標記'

content goes here
' 它是通過AJAX調用添加的 - 所以它以響應的形式從服務器返回。我使用'.html()'來添加DOM – user1775598

+1

然後你可以做這樣的事情 - > http://jsfiddle.net/ySCYs/ – adeneo

回答

0

如果動態添加HTML,你需要在Ajax調用之後,而不是執行JavaScript的DOM

$.ajax{ 
    //do something 
    $(div).html(code); 
    if(...){//Event was fired - i.e. we've added the tooltip dynamically 
     $("body").on("mouseover", ".mytooltip", function(){ 
      mouseOverFunc(); 
     }); 
     $("body").on("mouseout", ".mytooltip", function(){ 
      mouseOutFunc(); 
     }); 
    }else{ 
     $(".mytooltip").mouseover(function(){ 
      mouseOverFunc(); 
     }); 
     $(".mytooltip").mouseout(function(){ 
      mouseOutFunc(); 
     }); 
    } 
} 
相關問題