2013-03-20 43 views
1

我知道你可以綁定到單擊事件使用jQuery像這樣:捕獲所有`了`點擊包括那些添加dynamcally

$('a').click(function(){}); 

但對於動態添加HTML元素?比方說,我有以下內容的div

<div> 
    <a href='location.html'>location</a> 
</div> 

現在我打電話:

$('a').click(
     function(){ 
      console.log("going to " + $(this).attr('href')); 
      return true; 
     }); 

這將正常工作。但是,如果某處沿線我打電話

$('div').("<a href='location2.html'>location2</a>"); 

沒有明確地結合該事件處理該事件,則事件處理程序將拿起它。

是否有可能在添加新的a元素時重新綁定。或者甚至更好,當location.href屬性發生變化時,我可以每次向它添加一個get參數。

例如,如果我是一個a元素綁定到click事件的事件處理程序是:

function(){ 
    var newid = parseInt(Obj.Request('pageid'), 10) + 1; 
    location.href = $(this).attr('href') + '?pageid=' + newid.toString(); 
    return false; 
} 

假設Obj.Request是返回一個GET參數的函數。 (我已經有這個地方)。

回答

4

使用它以這種方式:

$(document).on('click', 'a', function() { 
     console.log("going to " + $(this).attr('href')); 
     return true; 
}); 

處理您的fiddle鏈接。

2

您想使用功能.on

+0

這會抓住所有匹配它嗎?無論它是動態還是靜態添加的? – FabianCook 2013-03-20 01:21:31

+0

是的,請參閱http://api.jquery.com/on/ – thomas 2013-03-20 01:21:47

+0

請參閱... http://jsfiddle.net/L2CG2/ 我想讓'2'引發事件。但是不是每次都明確地調用'on',更有另一個事件處理函數來抓取它併爲我做這件事? – FabianCook 2013-03-20 01:28:11

1

你想使用.on(),但作爲委託方法。

將它綁定到最近的靜態父對象 - 對於此示例,我將使用body

$('body').on('click', 'a', function(e){ 
    e.preventDefault(); 
}); 

這會等到事件冒泡到body元素和檢查什麼事件的最初目標是 - 如果它是一個a元素,它會火的處理程序。

+0

那就是我想要的:)如何捕獲location.href更改? – FabianCook 2013-03-20 01:29:08

+0

將位置。href'改變不會導致頁面重新加載,你的JavaScript被重新初始化? – ahren 2013-03-20 01:30:48

+0

非常。在它繼續之前,我想改變它中的一件事。但我想這是不可能的。 – FabianCook 2013-03-20 01:33:46

2
$('a').on('click', function() { 
    //works on non dynamic elements present at page load 
}); 

$('#some_non_dynamic_parent_ID').on('click', 'a', function() { 
    //works on dynamic elements added later 
}); 
1

如果您使用jquery高於1.7版本,則可以使用.on()或live()函數。關於這些功能的差異,你可以read in this article

相關問題