2013-02-20 60 views
13

下面的链接显示了一个模式并运行了一个ajax请求来渲染基于对象id的模式中的部分。当页面被一个http请求完全加载时弹出模式,但是如果我使用ajax请求来呈现链接(例如一个不同的模式会弹出并呈现一些链接),那么js函数将不会运行。一个alert();只是为了检查,它没有运行时,它呈现与AJAX.on(“click”,function()在使用ajax渲染链接时不起作用

我使用JQuery 1.9.1,以前的JS与.li​​ve('点击'),但那已被删除。我也尝试过.click()

有什么想法?谢谢!

链接

<a href="/an-object-id" data-remote=true name="modal">  

JS是动态生成的事件delegation..since你的链接

$(document).ready(function() { 
$("a[name=modal]").on("click", function(e) { 
    $("#mask, #modal").show(); 
    e.preventDefault(); 
etc... 
+0

你从Chrome控制台中得到什么错误? – bsiddiqui 2013-02-20 06:40:00

回答

23

附加一个事件处理到父元素使用.on(),并将选择器作为参数传递。

例子:

$(document).on("click", "a[name=modal]", function(e) {...}); 

这对于动态生成的元素以及工程..

+0

完美运作!非常感谢! :D – Andy 2013-02-20 19:57:40

+0

非常感谢您的支持!我花了太长时间试图弄清楚为什么我的听众不开火! – DazBaldwin 2014-04-23 09:21:00

5
$(document).on("click", "a[name=modal]", function(e) { 
    $("#mask, #modal").show(); 
    e.preventDefault(); 
etc... 
4

使用...点击事件不会被解雇......使用文件代表事件..

$(document).on("click","a[name='modal']", function(e) { 
     .. 
}); 

哟ü可以经过link了解更多关于on委派事件..它会更好,如果你与委托最接近元素事件存在于文档比document中有更好的表现

3

基本上,你需要监听绑定的点击事件到DOM的东西,不得到改变。 on()有一个可选参数,可让您将事件触发器筛选为选定为侦听器的项目的子元素。最简单的方法是使用document,但我更喜欢使用我认为不会改变的最亲密的父母。因此,假设我有这个标记:

<div id="super-awesome-parent"> 
    <ul> 
     <li><a href="#">Some link text</a></li> 
     <li><a href="#">Some link text</a></li> 
     <li><a href="#">Some link text</a></li> 
     <li><a href="#">Some link text</a></li> 
     <li><a href="#">Some link text</a></li> 
    </ul> 
</div> 

我可以写一个on()委托像这样:

$('#super-awesome-parent').on('click', 'a', function(event){ 
    // ... code 
}); 

然后,是在ready()事件后加入#super-awesome-parent任何<a>元素仍然会受到处理代表。

相关问题