通过jQueryAjax拉入的内容与以前的函数没有关联
我正在使用jQuery通过jQueryAjax拉入的内容与以前的函数没有关联,jquery,ajax,Jquery,Ajax,我正在使用jQuery.load()函数拉入数据以填充div。我正在拉入的内容有CSS选择器,它们应该与我编写的jQuery单击函数相匹配。然而,当我加载数据时,尽管有正确的CSS选择器,但当我单击应该调用jQuery响应的区域时,什么也没有发生 我需要重新加载吗 以下是我为jQuery AJAX编写的代码: $(document).ready(function() { // AJAX functionality for drupal nodes $(".ajax_node").click(fu
.load()
函数拉入数据以填充div。我正在拉入的内容有CSS选择器,它们应该与我编写的jQuery单击函数相匹配。然而,当我加载数据时,尽管有正确的CSS选择器,但当我单击应该调用jQuery响应的区域时,什么也没有发生
我需要重新加载吗
以下是我为jQuery AJAX编写的代码:
$(document).ready(function() {
// AJAX functionality for drupal nodes
$(".ajax_node").click(function() {
var ajax_src = $(this).attr("href"); // we're gonna load the href
// empty target div and load in content
// the space in the string before the #id is necessary
$("#ajax_area").empty().load(ajax_src + " #ajax_wrapper");
return false; // stops the link from following through
});
// General AJAX functionality
$(".ajax").click(function() {
var ajax_src = $(this).attr("href");
$("#ajax_area").empty().load(ajax_src);
return false;
});
});
它不起作用,因为当您通过
load
将元素拉入时,实际上是在重新创建元素,并且需要重新绑定事件处理程序。我建议使用它不起作用,因为当您通过加载
将元素拉入时,实际上是在重新创建元素,需要重新绑定事件处理程序。我建议使用而不是此格式:
$(".ajax_node").click(function() {
用于当前和将来的元素,如下所示:
$(".ajax_node").live('click', function() {
function callback(data) { //your success callback, e.g. .load(url, callback)
$(".ajax_node", data).click(myFunction);
}
原因:.live()
侦听事件在DOM根目录或文档中冒泡。它是绑定在那里的单个事件处理程序…添加元素时不重要,当单击到达那里时,它们都会弹出单击
相同的气泡:它检查选择器,如果匹配,则运行处理程序
当前方法不起作用的原因:它正在查找当时与该选择器匹配的所有元素,并绑定处理程序……新元素不在那里,因此不要获取该处理程序。您有两个选项可以解决此问题,或者使用以不同方式工作的.live()
,如上所述,或者将处理程序重新绑定到请求内容中的选择器,如下所示:
$(".ajax_node").live('click', function() {
function callback(data) { //your success callback, e.g. .load(url, callback)
$(".ajax_node", data).click(myFunction);
}
在您的情况下,我认为.live()
要容易得多,第二种方式通常是使用小部件等,而不是严格意义上的事件处理程序……而是任何能让您的船漂浮的东西。而不是这种格式:
$(".ajax_node").click(function() {
用于当前和将来的元素,如下所示:
$(".ajax_node").live('click', function() {
function callback(data) { //your success callback, e.g. .load(url, callback)
$(".ajax_node", data).click(myFunction);
}
原因:.live()
侦听事件在DOM根目录或文档中冒泡。它是绑定在那里的单个事件处理程序…添加元素时不重要,当单击到达那里时,它们都会弹出单击
相同的气泡:它检查选择器,如果匹配,则运行处理程序
当前方法不起作用的原因:它正在查找当时与该选择器匹配的所有元素,并绑定处理程序……新元素不在那里,因此不要获取该处理程序。您有两个选项可以解决此问题,或者使用以不同方式工作的.live()
,如上所述,或者将处理程序重新绑定到请求内容中的选择器,如下所示:
$(".ajax_node").live('click', function() {
function callback(data) { //your success callback, e.g. .load(url, callback)
$(".ajax_node", data).click(myFunction);
}
在您的情况下,我认为.live()
要容易得多,您通常使用小部件等来执行第二个操作,而不是严格意义上的事件处理程序……但是任何可以让您的船漂浮的东西