2012-12-03 36 views
1

我有一個$(document).ready函數,它爲某些元素設置偵聽器。但是,所有的#leave-ride元素都是動態添加的。

聽衆:

$(document).ready(function() { 
    $("#post-ride").click(function() { 
     addRide(currentDriver, $(destinationInput).val(), $(originInput).val(), $(dateInput).val(), $(timeInput).val()); 
     $.getScript("scripts/myRides.js", function() {}); 
    }); 

    $("#request-ride").click(function() { 
     requestRide(currentDriver, $(destinationInput).val(), $(originInput).val(), $(dateInput).val(), $(timeInput).val()); 
     $.getScript("scripts/myRides.js", function() {}); 
    }); 

    $("#leave-ride").click(function() { 
     console.log("leave Ride"); 
     leaveRide(currentDriver, $("leave-ride").closest("div").attr("id")); 
     $.getScript("scripts/myRides.js", function() {}); 
    }); 
}); 

什麼我需要做的就是那個聽衆聽動態內容?

+1

可能重複http://stackoverflow.com/問題/ 9163637/javascript-event-loading-w-dynamic-content) – Bergi

+0

一個id只能在你的文檔中使用一次,'$('leave-ride')'最有可能是空的。 –

回答

-1

使用.on()

例子:

$("#leave-ride").on('click', function() { 
    console.log("leave Ride"); 
    leaveRide(currentDriver, $("leave-ride").closest("div").attr("id")); 
    $.getScript("scripts/myRides.js", function() { 
    }); 
}); 
+0

這不會有什麼區別。你需要傳遞一個選擇器。 – SLaks

+0

您在這裏不使用代表團 –

+0

'on'與'live'有一些區別,其中之一就是您需要將事件委託出去。 –

3

使用on,改變你的事件聲明

$("#post-ride").click(function() { 

$("body").on('click',"#post-ride",(function() { 
+0

$(document)without quotes –

+0

@roasted - yup :)通常我在那裏使用「body」,所以這是引用來自的地方,我會將其改爲body。 –

9

是,ready只運行一次。您可以使用事件委託:

取最接近未動態加載的#leave-ride的元素(在極端情況下爲document)。然後在其上附加處理程序,並使用#leave-ride作爲delegated event的選擇器。

假設具有ID #container一個div是靜態元件:

$('div#container').on('click', '#leave-ride', function(){…}); 

參見Event binding on dynamically created elements?

[Java腳本事件裝載重量/動態內容(的
+0

使用容器比在()上應用整個文檔更有效率。 – Christophe