11 回答

TA貢獻1828條經驗 獲得超3個贊
從jQuery 1.7開始,你應該使用jQuery.fn.on
:
$(staticAncestors).on(eventName, dynamicChild, function() {});
在此之前,推薦的方法是使用live()
:
$(selector).live( eventName, function(){} );
但是,live()
在1.7中贊成使用on()
,并在1.9中完全刪除。該live()
簽名:
$(selector).live( eventName, function(){} );
...可以用以下on()
簽名替換:
$(document).on( eventName, selector, function(){} );
例如,如果您的頁面是動態創建具有類名的元素,dosomething
您可以將事件綁定到已存在的父項(這是問題的核心,您需要存在要綁定的內容,不要綁定到動態內容),這可能是(也是最簡單的選擇)document
。雖然記住document
可能不是最有效的選擇。
$(document).on('mouseover mouseout', '.dosomething', function(){ // what you want to happen when mouseover and mouseout // occurs on elements that match '.dosomething'});
綁定事件時存在的任何父級都可以。例如
$('.buttons').on('click', 'button', function(){ // do something here});
適用于
<div class="buttons"> <!-- <button>s that are generated dynamically and added here --></div>

TA貢獻1982條經驗 獲得超2個贊
這是一個沒有任何庫或插件的純JavaScript解決方案:
document.addEventListener('click', function (e) { if (hasClass(e.target, 'bu')) { // .bu clicked // Do your thing } else if (hasClass(e.target, 'test')) { // .test clicked // Do your other thing }}, false);
這里hasClass
是
function hasClass(elem, className) { return elem.className.split(' ').indexOf(className) > -1;}
歸功于Dave和Sime Vidas
使用更現代的JS,hasClass
可以實現為:
function hasClass(elem, className) { return elem.classList.contains(className);}

TA貢獻1829條經驗 獲得超4個贊
您可以在創建對象時向對象添加事件。如果要在不同時間向多個對象添加相同的事件,則可能需要創建命名函數。
var mouseOverHandler = function() { // Do stuff};var mouseOutHandler = function () { // Do stuff};$(function() { // On the document load, apply to existing elements $('select').hover(mouseOverHandler, mouseOutHandler);}); // This next part would be in the callback from your Ajax call$("<select></select>") .append( /* Your <option>s */ ) .hover(mouseOverHandler, mouseOutHandler) .appendTo( /* Wherever you need the select box */ );

TA貢獻1816條經驗 獲得超4個贊
您可以簡單地將事件綁定調用包裝到一個函數中,然后調用它兩次:一次是在文檔準備就緒,一次是在添加新DOM元素的事件之后。如果這樣做,您將希望避免在現有元素上綁定相同的事件兩次,因此您需要解除現有事件的綁定或(更好)僅綁定到新創建的DOM元素。代碼看起來像這樣:
function addCallbacks(eles){ eles.hover(function(){alert("gotcha!")});}$(document).ready(function(){ addCallbacks($(".myEles"))});// ... add elements ...addCallbacks($(".myNewElements"))

TA貢獻1852條經驗 獲得超1個贊
我更喜歡使用選擇器并將其應用于文檔。
這將綁定在文檔上,并將適用于頁面加載后將呈現的元素。
例如:
$(document).on("click", $(selector), function() { // Your code here});

TA貢獻1828條經驗 獲得超4個贊
記下放置元素的“MAIN”類,例如
<div class="container"> <ul class="select"> <li> First</li> <li>Second</li> </ul></div>
在上面的場景中,jQuery將觀看的MAIN對象是“容器”。
然后,你將主要有元素的名稱下的容器,如ul
,li
和select
:
$(document).ready(function(e) { $('.container').on( 'click',".select", function(e) { alert("CLICKED"); }); });
添加回答
舉報