栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过AJAX加载内容后jQuery不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过AJAX加载内容后jQuery不起作用

jQuery选择器选择执行代码时DOM中存在的匹配元素,并且不会动态更新。当您调用一个函数(例如

.hover()
添加事件处理程序)时,它只会将它们添加到那些元素中。进行AJAX调用并替换页面的一部分时,您将使用绑定到它们的事件处理程序删除这些元素,并用新元素替换它们。即使这些元素现在与该选择器匹配,它们也不会绑定事件处理程序,因为执行该操作的代码已经执行。

事件处理程序

专门针对事件处理程序(即

.click()
),您可以使用事件委托来解决此问题。基本原理是将事件处理程序绑定到静态元素(页面加载时存在,永远不会被替换)中,该元素将包含所有动态内容(加载AJAX)。您可以在jQuery文档中阅读有关事件委托的更多信息。

对于您的

click
事件处理程序,更新后的代码如下所示:

$(document).on('click', "#click", function () {    $('#click').css({        "background-color": "#f00",        "color": "#fff",        "cursor": "inherit"    }).text("Open this window again and this message will still be here.");    return false;});

这样会将事件处理程序绑定到整个文档(因此在页面卸载之前永远不会删除它),它将对

click
具有
id
属性的元素上的事件做出反应
click
。理想情况下,您将使用更接近DOM中动态元素的内容(也许
<div>
页面上始终存在一个动态元素,并包含所有页面内容),因为这样可以提高效率。

不过,问题出在您需要处理

.hover()
时。
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        }, 200, function () { $(this).removeClass('image-popout-shadow');        }); //END FUNCTION    }}, '.image-popout img');

jQuery插件

这涵盖了事件处理程序绑定。但是,这还不是您要做的全部。您还初始化了一个jQuery插件(colorbox),无法将它们委托给元素。加载AJAX内容后,您只需再次调用这些行即可。最简单的方法是将它们移到一个单独的命名函数中,然后可以在两个地方(在页面加载和AJAX请求

success
回调中)调用它们:

function initialiseColorbox() {    $(".iframe").colorbox({        iframe: true,        width: "1000px",        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');        }    });}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427304.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号