2013-03-20 49 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

相关问题