2013-09-16 31 views
1

我有一些HTML中使用附加的把手,但我無法得到的超鏈接事件火災:jQuery的點擊不被束縛

JS - 的document.ready這段代碼被調用。

$(".media-item a.meddelete").unbind("click"); 
$(".media-item a.meddelete").click(function (event) { 
    event.preventDefault(); 
    var id = $(this).data("assetid"); 
    alert(id); 
}); 

HTML

<div class="media-item"> 
    <p><a href="ImageManipulation.aspx">Edit</a></p> 
    <p><a href="#" class="meddelete">Delete</a></p> 
</div> 

我看不到什麼是錯,什麼想法?

+1

綁定是在注入HTML之前還是之後發生的? –

+0

Handlebars也將運行在'document.ready()'上面,直到那之後HTML纔會存在。下面的兩個答案,使用'on()'和委託將解決這個問題。如果他們不工作,那麼還有其他問題。 – Archer

回答

2

通過假設「注入」你的意思是在你的例子中的元素被添加到頁面加載後動態DOM中,你需要使用委派的事件處理程序:

$(document).on('click', '.media-item a.meddelete', function (event) { 
    event.preventDefault(); 
    var id = $(this).data("assetid"); 
    alert(id); 
}); 

注意,在document我應該將示例更改爲最佳靜態元素以獲得最佳性能。

+0

它沒有被附加,因此它將'放入'開始和結束之間的某個地方。你的代碼示例是否仍然有效? – DavidB

+0

它會的。您應該使用此方法(委派事件)來掛接頁面加載後創建的任何元素。 –

+0

非常感謝您的幫助 – DavidB

2

更改此:

$(".media-item a.meddelete").click(function (event) { 

這樣:

$(document).on('click', ".media-item a.meddelete", function (event) { 

如果你動態地添加元素的頁面,你需要使用jQuery的事件代表團語法。

+0

謝謝,有什麼不同,因爲我從另一段代碼中複製出來,像上面那樣工作? – DavidB

+0

非常感謝您 – DavidB

+2

您在問題中使用的語法將適用於代碼執行時已存在的元素。我發佈的代碼適用於代碼執行時存在的任何元素,以及稍後動態添加的任何新匹配元素。 – j08691