使用加载了Ajax内容的jQuery"click"函数?

Moz*_*Moz 3 javascript php ajax jquery

我有通过Ajax加载的php文件的内容,其中包含HTML和JavaScript.我有一个按钮:

<button class="search_button">Search</button>
Run Code Online (Sandbox Code Playgroud)

我在下面有一个脚本,它将从jQuery函数更新文档哈希

<script type="text/javascript">
  $(".search_button").click(function() {
    var searchTerm = $('#search_box').val();         
    document.location.hash="searchTerm";
    return false;
  });
</script>
Run Code Online (Sandbox Code Playgroud)

当我单独运行php文件时,此代码有效,但是当从Ajax调用加载此页面时,该函数不再运行.在firebug中,脚本不存在所以我假设我无法在使用此方法时加载脚本.我还尝试将JavaScript代码段改为整个网站的标题,但这也失败了.

我也在考虑当有一个search_button类已经存在时,可能必须声明该函数,但是当我以前将它们放在一个文件中时(通过Ajax检索)它是以这种方式构造的,所以我很困惑至于问题.

Jos*_*ell 7

您可以通过直播活动在全球范围内添加它:

  $(".search_button").live('click', function() {
    var searchTerm = $('#search_box').val();         
    document.location.hash="searchTerm";
    return false;
  });
Run Code Online (Sandbox Code Playgroud)

jQuery会自动评估脚本块,你无法在HTML中看到该功能,因为它已被剥离.但它应该已经运行了.问题很可能是时机问题.你可以做点什么

setTimeout(function(){  
    $(".search_button").click(function() {
        var searchTerm = $('#search_box').val();         
        document.location.hash="searchTerm";
        return false;
    });
}, 500);
Run Code Online (Sandbox Code Playgroud)

因此,当脚本加载时,它等待执行(希望给jquery时间用新元素更新DOM).


Tah*_*sin 7

从jQuery 1.7开始,不推荐使用.live()方法.使用.on()附加事件处理程序.旧版jQuery的用户应该使用.delegate()而不是.live().

此方法提供了将委托事件处理程序附加到页面的文档元素的方法,这简化了在将内容动态添加到页面时使用事件处理程序的方法.有关详细信息,请参阅.on()方法中有关直接事件与委派事件的讨论.

根据其后继者重写.live()方法很简单; 这些是用于所有三种事件附件方法的等效调用的模板:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(document).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(document).on(events, selector, data, handler);        // jQuery 1.7+
Run Code Online (Sandbox Code Playgroud)

使用.on()绑定click事件的示例

$(document).on("click", "#post a", function(){
    alert("1");
})
Run Code Online (Sandbox Code Playgroud)