2013-01-18 27 views
5

好的結合這裏的jsfiddle例如jQuery的事件是不是不存在的元素

http://jsfiddle.net/HTjCT/1/

正如你可以看到你的時候你懸停它在不觸發鼠標懸停事件

我怎樣才能解決這個問題?

我正在使用jQuery 1.9

<div id='superdiv'>Click Me</div> 


$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append('<div id="super">another'); 
    }); 
    $('#super').on('mouseover', function (event) { 
     alert('not working'); 
    }); 
}); 

的JavaScript

回答

9

您必須使用「委託」,像這樣的(提供「活」) $('body').on('mouseover', '#super', function (event) {

+0

感謝工作:) – MonsterMMORPG

+8

雖然這是正確的,請不要啓動所有事件處理程序連接到身體。事件委託通過捕獲*每個*起泡的事件,然後檢查源元素來查看它是否匹配感興趣的元素(這裏是'#super')。因此,每當您在頁面上鼠標懸停**任何內容時,都會觸發一次,以檢查該元素是否匹配。儘可能地將代表放到源代碼中,並且您將獲得更好的性能,而不是每次都堅持使用本體 – WickyNilliams

+0

這是絕對正確的,僅用於此示例來顯示代表。 –

-1

您要創建的onclick股利,不與 '</DIV>' 標記關閉。

如果你嘗試下面的代碼:

$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append(
      $('<div/>',{ 'id' : 'super', 'text' : 'tetet'}).mouseover(function(event) { 
        alert('test'); 
      }) 
     ); 
    }); 
}); 
+0

你們卻依然不作區別:) http://jsfiddle.net/HTjCT/5/ – MonsterMMORPG

0

你也可以換鼠標懸停事件在一個函數中,並且當你添加你想要影響的新元素時調用它。 這樣WickyNilliams指出的問題不會影響你。

$(function() { 
    $('#superdiv').on('click', function (event) { 
     $('body').append('<div id="super">another'); 
     mouse(); 
    }); 
    function mouse() { 
     $('#super').on('mouseover', function (event) { 
      alert('not working'); 
     }); 
    }); 
    mouse(); 
} 
相關問題