jquery只加载ajax,jQuery不通过AJAX加载内容后工作

jQuery选择器在代码执行时选择存在于DOM中的匹配元素,并且不动态更新。当你调用一个函数,例如.hover()来添加事件处理程序时,它只会将它们添加到这些元素。当您执行AJAX调用,并替换您的页面的一部分,您要删除这些元素与事件处理程序绑定到他们,并用新元素替换它们。即使这些元素现在匹配那个选择器,它们也不会得到事件处理程序的绑定,因为要执行的代码已经执行。

事件处理程序

特别是对于事件处理程序(即.click()),你可以使用事件委托来解决这个问题。基本原理是,你绑定一个事件处理程序到静态(当页面加载时,存在,不会被替换)元素,将包含所有的动态(AJAX加载)内容。您可以在jQuery documentation了解更多关于事件委托的信息。

对于您的点击事件处理程序,更新的代码如下所示:

$(document).on('click',"#click",function () {

$('#click').css({

"background-color": "#f00","cursor": "inherit"

}).text("Open this window again and this message will still be here.");

return false;

});

这将绑定一个事件处理程序到整个文档(所以永远不会被删除,直到页面卸载),这将反应与点击的id属性的元素的点击事件。理想情况下,您应该使用更靠近DOM中动态元素的元素(可能是网页中的< div>),并且包含您的所有网页内容,因为这样会提高效率。

问题出现时,你需要处理.hover(),虽然。 JavaScript中没有实际的悬停事件,jQuery仅仅提供了一个方便的速记方法,用于将事件处理程序绑定到mouseenter和mouseleave事件。但是,您可以使用事件委托:

$(document).on({

mouseenter: function () {

$(this).stop().animate({

width: xwidth * 3,height: xheight * 3,margin: -(xwidth / 3)

},200); //END FUNCTION

$(this).addClass('image-popout-shadow');

},mouseleave: function () {

$(this).stop().animate({

width: xwidth,height: xheight,margin: 0

},function () {

$(this).removeClass('image-popout-shadow');

}); //END FUNCTION

}

},'.image-popout img');

jQuery插件

这涵盖了事件处理程序绑定。然而,这不是你所做的一切。你还初始化了一个jQuery插件(colorBox),没有办法将它们委托给元素。当你加载你的AJAX内容时,你将不得不再次调用这些行;最简单的方法是将它们移动到一个单独的命名函数,然后你可以在两个地方(在页面加载和你的AJAX请求成功回调)调用:

function initialiseColorBox() {

$(".iframe").colorBox({

iframe: true,height: "500px"

});

$(".inline").colorBox({

inline: true,width: "50%"

});

$(".callbacks").colorBox({

onOpen: function () {

alert('onOpen: colorBox is about to open');

},onLoad: function () {

alert('onLoad: colorBox has started to load the targeted content');

},onComplete: function () {

alert('onComplete: colorBox has displayed the loaded content');

},onCleanup: function () {

alert('onCleanup: colorBox has begun the close process');

},onClosed: function () {

alert('onClosed: colorBox has completely closed');

}

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值