我有通过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检索)它是以这种方式构造的,所以我无法使用对这个问题感到困惑。
答案 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();
});