【问题标题】:JQuery in second document ready not working第二个文档中的 JQuery 准备好不工作
【发布时间】:2016-12-23 05:11:52
【问题描述】:

我有两个文档就绪事件。

首先,在页面上(工作帖子请求插入 html 表单),由我的 WP 短代码插入:

<script type="text/javascript" >
    jQuery(document).ready(function($) {
        jQuery.post(
            ajaxUrl,
            {
                action: 'action',
                nonce: 'nonce'
            },
            function(response) {
                $('#place').removeClass('preloader');
                $('#place').html(response);
            }
        );
    });
</script>

第二个(在我将第一个代码添加到页面之前一直有效),在页脚中加载的 js 文件中:

jQuery(document).ready(function($) {
    $('#myform').submit(function(e) {
        e.preventDefault();
/* some ajax call with form data*/
    });
});

第二个就绪事件被触发,但$('#myform').submit 不起作用。 你能帮帮我吗?

【问题讨论】:

  • 如果你调试第二个,我想你会看到$('#myform') 没有返回任何元素。
  • 可能是。 id myform 的表单在第一个事件中通过邮寄方式插入。那么,当加载第二个 js 时,myform 不在文档中...如何解决这个问题?
  • $('#myform').submit() 放在$('#place').html(response); 之后会有意义,因为存在依赖关系。
  • 当然,这是显而易见的解决方案,但它会破坏一般的方法。
  • 有几种解决方案,1)您可以将$('#myform').submit()放在html表单中,这样它就会在$('#place').html(response);时自动执行。叫做。 2)通过解析响应使方法更智能,并检查是否有带有提交按钮的表单元素 3)在两段代码之间使用基于事件的通信。

标签: javascript php jquery wordpress


【解决方案1】:

使用 document.ready 函数不是最佳做法。如果您在所有必需的 dom 元素之后在页脚级别包含脚本,它们将在文档的其余部分和元素加载后运行 - 因此,不需要文档就绪函数。

目前尚不清楚您对这些功能做了什么以及它们如何交互,但如果其中一个正在更改另一个,请确保您获得了所需的元素。一个很好的测试方法是在浏览器中打开开发者控制台并复制/粘贴您的 javascript 代码以查看哪些有效,哪些无效。您可以在控制台中输入 javascript 并在浏览器中加载的 dom 上实时运行。

【讨论】:

  • 是的,因此在加载 dom 后将脚本包含在页面底部很重要。此外,如果第二个函数依赖于第一个函数,请在第一个函数完成后调用它。无需准备好文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多