【问题标题】:Javascript not executing after Ajax callAjax 调用后 Javascript 未执行
【发布时间】:2014-02-03 19:29:14
【问题描述】:

我知道这个问题已经被问了很多,但我已经浏览了几个小时的帖子,但没有任何效果。

我正在开发一个 Wordpress 博客,其中单个帖子页面上的上一个/下一个按钮必须加载 Ajax 的上一个/下一个帖子。我已经编写了代码(jQuery Ajax),一切都很好(我认为 - 如果你想改进它,请做我的客人!),但在每篇文章中都有一些需要工作的 jQuery。但是,在我单击任何一个上一个/下一个按钮在帖子之间移动后,jQuery 将无法工作(当页面首次加载时它绝对完美地工作)。我知道这是因为内容不再“连接”到 JS,但我不知道该怎么办。

这是我的代码:

$(".page-feed").on('click', '.post-nav>a', function() {
    event.preventDefault ? event.preventDefault() : event.returnValue = false;
    var link = $(this).attr('href'); // get the value of the href attribute on the links
    $(".post-content").html("Loading...");
    $.get(link, function(result) {
        $result = $(result);
        $content = $result.find(".post-content");
        $(".post-content").replaceWith($content);
    }, 'html');
});

我知道你可能会问我已经尝试过什么,但老实说,没有太多值得放在这里的东西。

上面的代码位于一个名为 script.js 的文件的顶部,所有其他 JS 在它下面(当前在 Ajax 调用之后不起作用)。该脚本由标准的$(document).ready(function() { 语句启动。

感谢您的帮助:)

【问题讨论】:

    标签: php jquery ajax wordpress


    【解决方案1】:

    首先,您需要接受事件对象作为参数。

    $(".page-feed").on('click', '.post-nav>a', function(event) {
    

    接下来,通过使用 jQuery 事件对象,您可以简化下一行,因为 event 已被 jQuery 规范化以跨浏览器工作。

    event.preventDefault();
    

    现在,就它在第一次点击而不是之后起作用而言,这可能是因为.page-feed 是一个动态元素。您需要选择一个作为.post-content 祖先的元素。 document 是一个不错的替代品,但如果你再选一个本地人会更好。

    $(document).on('click', '.post-nav>a', function(event) {
    

    【讨论】:

    • 感谢您对 event.PreventDefault() 的回复和建议 :) 我使用 document 作为替代品,但切换到 .page-feed 因为它更具体,我读到它可能会有所帮助(显然它没有)。 .page-feed 是 .page-content 的祖先,但不是直接的(首先要通过几个 div)。我还想我应该澄清我的问题是什么:当我加载页面时,JS 工作正常,我点击下一步按钮,它转到下一篇文章。这篇文章中的 JS 不起作用,但是,pref/next 按钮仍然有效。感谢您的进一步帮助:)
    • 所以你说的是你发布的代码继续工作,但由 ajax 加载的代码却没有。正确的?以这种方式加载额外的代码已经很危险了,因为它是在上下文之外执行的。可能在元素附加到页面之前执行了附加代码,导致 javascript 找不到正确的元素。 (或者,您可能根本没有执行 javascript,具体取决于它在 result 中的位置)
    • 在将内容解析为javascript对象之前,您可以尝试使用正则表达式将所有脚本标签替换为div,但这很容易出错。
    • 一个例子可以在这里找到:github.com/browserstate/ajaxify/blob/master/…
    • 好的,谢谢,我明天试试,谢谢凯文的帮助 :)
    猜你喜欢
    • 2012-05-23
    • 2012-05-08
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多