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

时间:2011-01-21 16:18:27

标签: php javascript ajax jquery

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

<button class="search_button">Search</button>

我在下面有一个脚本,它将从jQuery函数

更新文档哈希
<script type="text/javascript">
  $(".search_button").click(function() {
    var searchTerm = $('#search_box').val();         
    document.location.hash="searchTerm";
    return false;
  });
</script>

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

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

3 个答案:

答案 0 :(得分:7)

您可以使用直播活动在全球范围内加入:

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

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

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

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

答案 1 :(得分: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+

绑定点击事件的.on()示例用法

$(document).on("click", "#post a", function(){
    alert("1");
})

答案 2 :(得分:1)

尝试在函数

中添加脚本  

function name(){
  $(".search_button").click(function() {
    var searchTerm = $('#search_box').val();         
    document.location.hash="searchTerm";
    return false;
  });
}
 

并在ajax调用结束后立即调用此函数。


$(document).ready(function() {
 name();
});