jquery委托如何触发内容加载?

时间:2011-12-16 01:39:52

标签: jquery ajax delegates

我需要在页面渲染时通过jQuery设置一些HTML。例如,我可能有这个:

<ol>
    <li>
        <div class="theDiv"></div>
        <a class="theLink"...>...</a>
    <li>
<ol>

有时我需要隐藏div。有时我需要将click事件应用于锚标记。所以我可能有这个:

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

工作正常。

但是,我们现在正在将额外的LI加载到此列表中。不幸的是,我们不是用jQuery做的。我可以将上面的内容包装在ajax加载后可以调用的函数中,以重新渲染所有内容。但是有更好的方法吗?

我在想live()是解决方案,但我发现delegate()现在是首选的文档。

无论哪种方式,两者似乎都只允许绑定事件(单击,悬停等),而不是在将新HTML添加到DOM后简单地重新渲染。

有没有办法通过delegate()做什么?有没有更合适的方法来处理它?<​​/ p>

更新:

也许这是一个更简单的问题:在AJAX更新之后让JS对DOM进行操作,是否必须通过AJAX调用本身(通常通过回调函数)触发它,或者是否有jQuery方式“观察”DOM更新并相应关闭?

3 个答案:

答案 0 :(得分:0)

我认为最新的jquery API调用是jQuery.on文档页面上的第二个示例似乎完全适合您的情况。

答案 1 :(得分:0)

将要执行的代码放在AJAX调用的success回调中。确保只在新元素上运行代码,除非代码不会在同一元素上多次运行时破坏任何内容。

答案 2 :(得分:0)

解决方案是创建一个利用jQuery的javascript函数,并从内部调用 无论你有执行ajax的javascript。

注意:阅读后看起来直播()仅适用于点击和悬停等事件。

function updateMyStuff() {
    $('li').hide();
    $('a').click(function(){...});
}

...

function myCrazyNonJqueryAjaxWhy?() {
    updateMyStuff();
}