2013-07-27 77 views
-1

我正在使用jQuery將動態內容添加到php頁面。添加內容我沒有問題,我似乎無法找到讓新內容響應點擊事件的方法。如何使動態添加的內容可點擊?

例如(我在這裏使用一個div,但可能是一個按鈕或其他類型)。

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

編輯:我目前使用jQuery 1.9.1 ,我用的是1.6.2,但我檢查出這需要一個新的jQuery版本蕩氣迴腸 - 彈出。

我沒有張貼我的嘗試失敗(

$("#newstuff").click(function() {... 
$("#newstuff").live('click', function() {... 
binding the click event, etc. 

,因爲我認爲我缺少一些基本的東西,一個更有經驗的jQuery的用戶會發現沒有斷碼的噪音。

+0

哪裏是你的點擊事件? – Red

回答

1

似乎無法找到讓新內容響應點擊事件的方法。

你要做event delegation

$("#oldstuff").on("click", '#newstuff',function(){ 
alert($(this).text()); 
}); 
+1

@downvoter,你可以發表評論嗎? –

+0

這是有效的 - 有人可以解釋爲什麼這被拒絕嗎? – TheSteven

+1

當有人無理由低估時,這是最令人討厭的事情。 – Maroun

4

你可以前將click事件插入元素到DOM:

$('<div id="newstuff">...</div>').click(function(){ 
    //do something 
}).insertAfter('#oldstuff'); 
+0

不熟悉這樣做,將檢查此... – TheSteven

+0

這表明承諾,我會在未來探索它。目前,我將我的內容插入/修改代碼與我​​的事件處理代碼分開,因此還有另一個響應,它是我尋找的更好的解決方案。謝謝您的意見! – TheSteven

-2

試試這個

$("#yourElementId").live("click",function(){ 
    alert($(this).text()); 
}); 

由於.click加載DOM後不工作或動態創建的元素

+0

任何人都可以解釋爲什麼downvote那個職位。我們都知道dom加載'.click'後我們都知道''.click'在dom加載之前會被加載。所以jquery有新的方法'.live'或'.on',但'.live'是新版本的版本。我的情況也一樣。 –

+1

由於'。對()'的語法不同於'.live()'其中在所選擇的客體是靜態元件,第一個參數是的情況下,第二是動態元素,並且第三個是callbakc。 – Ohgodwhy

+0

@Ohgodwhy爲了您的親切關懷,我已經找到了語法形式的Jquery官方網站'http:// api.jquery.com/on /'現在你能解釋一下爲什麼嗎? –

0

你需要的是附加事件到父元素。

HTML:

<div id="parent"> 
    <div class="thediv">Hello</div> 
</div> 

的JavaScript:

function addDiv() { 
    var div = document.createElement('div'); 
    div.className = 'thediv'; 
    document.getElementById('parent').appendChild(div); 
} 

$('#parent').on('click', '.thediv', function() { 
    // ... 
}); 

看是否有此技術的原理。

+1

該技術是事件代表團..是這裏工作 –

-1

它可能是要連接DOM之前綁定事件,並在jQuery庫活法的最新版本已經過時所以嘗試綁定點擊甚至連接DOM或者您可以使用下面的代碼後...

第一個加法DOM。

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

然後綁定事件。

$('#newstuff').on('click',function(){alert('do your stuff!')}); 

或者

$('#newstuff').click(function(){alert('do your stuff!')}); 
+0

任何理由您的整個職位是代碼? – Doorknob

+0

這些都不適用於動態內容。如果我正確理解其他評論說的是什麼,那是因爲'#newstuff'不是DOM中加載的原始內容的一部分,而是之後添加的。 – TheSteven

+0

您可以綁定現有DOM上的事件作爲您的DOM(

Some content that should respond to click event
)稍後加載,因此您應該在加載DOM後綁定事件,然後它將工作 – anand4tech