2012-02-20 65 views
0

我有登录一个jquery,虽然页面的其余部分变淡打开中间一个新的div调用。它的工作原理,如果我用一个锚标记与类=“登录窗口”和jQuery的使用选择它:登录DIV从一个锚标记

$('a.login-window').click(function() { 
}); 

但是当我移动锚标记成一个div那我填用ajax在运行时:

<div id="nav"> 
    <ul class="dropdown dropdown-horizontal"> 
    <li><a href="#login-box" class="login-window">Log In</a></li> 
    </ul> 
</div> 

我该如何从列表中工作?

回答

2

在页面加载将无法正常工作之后添加的任何DOM元素,你需要使用.on()这将检查之后使用JavaScript和应用任何的jQuery给他们添加的元素。

$("body").on("click", "p", function(){ 
    // 
}); 

编辑:或者delegate(),如果你有使用旧的jQuery。

+2

使用'.on()'而不是'.live()'。 – MacMac 2012-02-20 15:13:46

+0

他是正确的'活()'是折旧,请参阅http://api.jquery.com/live/ – ntziolis 2012-02-20 15:15:37

+0

谢谢,编辑。不知道live()是否被弃用。 – 472084 2012-02-20 15:16:09

0

就在昨天,详细回答了这个同样的问题:jQuery selector doesn't update after dynamically adding new elements

答案是使用.on().delegate()(取决于您拥有哪个jQuery版本),因此您可以使用委托事件处理而不是直接元素事件处理。

在你的情况下,如果#nav对象是所有这些环节的父母,那么你可以使用这个:

$('#nav').on('click', 'a.login-window', function() { 
    // your code here 
}); 

如果#nav是不是所有的链接的父母,那么你需要找到在jQuery对象中使用一些常见的父项。来自所有动态创建的对象的事件将冒泡到共同的父对象,并在那里被过滤和处理。