脚本无法在 AJAX 页面加载时修改 jQuery Mobile 页面上的页脚?

Posted

技术标签:

【中文标题】脚本无法在 AJAX 页面加载时修改 jQuery Mobile 页面上的页脚?【英文标题】:Script failing to modify footer on jQuery Mobile page on AJAX page load? 【发布时间】:2013-05-12 22:52:49 【问题描述】:

我正在使用这里的 jQuery Countdown 插件:http://keith-wood.name/countdown.html

我正在尝试使用它在 jQuery Mobile 网站的页脚中放置倒计时。我通过 php Include 在每个页面上加载相同的页脚。该脚本在初始页面加载或任何刷新时都可以正常工作,但在页面之间导航时不会出现。

我不确定这是否是我专门调用 jQuery Countdown 的方式的问题,或者是由于 jQuery Mobile 的 AJAX 页面加载而导致脚本加载的更大问题的一部分。

这是现在的代码。注意:在这个例子中,我有脚本,但我已经在 Head 中尝试过,就在上面,在 div 上方,在 div 下方,在一个单独的文件中 - 我能想到的任何地方,它的工作原理都是一样的大大地。插件本身链接在网站头部,尽管我也尝试将该链接移动到页脚,但没有效果。

<!-- Footer -->
<div data-role="footer" data-position="fixed" data-theme="d">

<h2><div id="eventtimer"></div></h2>

<script>
$(document).on('pageinit', function(event) 

    $('#eventtimer').countdown(
        until: new Date(2013, 6-1, 4),
        compact: true,
        layout: 'Countdown: <em>dn dl hnnsepmnnsepsnn</em>',
    );

    $('#eventtimer').ready(function()
        console.log('Test');
    );
);
</script>
</div><!-- Close Footer -->

顺便说一句,console.log 测试确实工作得很好,让我相信我的整体调用是正确的。

【问题讨论】:

请注意$('#eventtimer').ready( 没有任何意义。 您有重复 ID 问题。当第 2 页加载并初始化时,第 1 页仍然处于活动状态,因此 $("#eventtimer") 将选择第 1 页上的而不是第 2 页,因为 ID 必须是唯一的。另外,任何将事件绑定到文档的代码都应该在头部,否则在多次导航到页面时会绑定多个事件。 @Kevin B - 我认为你是完全正确的,我只是自己想到了这个想法并尝试了它并且成功了! @Kevin B,也感谢 .ready 标注 - 显然我是 jquery 的新手。像我尝试那样执行测试的功能性方法是什么? 没有办法,但是不需要,因为您在页面初始化中。 【参考方案1】:

这次自己解决了!当我盯着我自己的问题时意识到,加载的 jQuery 模型可能意味着我有一个 ID 冲突,因为我在每个页面上使用相同的页脚。改为将它改为一个类,它正在工作!

更新代码:

<!-- Footer -->
<div data-role="footer" data-position="fixed" data-theme="d">

    <h2><div class="eventtimer"></div></h2>
    <script type="text/javascript" src="<?php echo $siteRoot; ?>/_scripts/vendor/jquery.countdown.js"></script>
    <script>
    $(document).on('pageinit', function(event) 

        $('.eventtimer').countdown(
            until: new Date(2013, 6-1, 4),
            compact: true,
            layout: 'Countdown: <em>dn dl hnnsepmnnsepsnn</em>',
        );

        $('#eventtimer').ready(function()
            console.log('Test');
        );
    );

</script>

</div><!-- Close Footer -->

我没有将此标记为已回答,因为我可能很幸运,但仍然做错了...请随时提供更好的见解。

【讨论】:

以上是关于脚本无法在 AJAX 页面加载时修改 jQuery Mobile 页面上的页脚?的主要内容,如果未能解决你的问题,请参考以下文章

在我无法控制的任何 AJAX 调用之后使用 JQuery 修改 DOM

通过ajax加载html页面时,会加载脚本标签吗?

在Ajax调用之后重新触发Jquery脚本

脚本完全加载并执行时,jquery .getscript()回调

使用微调器加载 jQuery 整个 HTML 页面

使用 jQuery AJAX 检索数据而不在 php 中重新加载页面