【问题标题】:Undefined is not a function: jQuery and WordPress未定义不是函数:jQuery 和 WordPress
【发布时间】:2015-02-25 02:08:48
【问题描述】:

我被困住了。我在 WordPress 之外成功使用了以下 sn-p,确保 jQuery 正在加载,但仍然得到 'unexpected token ='。我尝试从“$form”中删除“$”,但后来我得到 'undefined is not a function'。有人可以解释一下我缺少什么吗?

<head>
  //added via wp_enqueue
  <script type='text/javascript' src='/wp-includes/js/jquery/jquery.js?ver=1.11.1'></script>
</head>
<body>
...
<form id="testForm" action="process-page.php" method="post">
  <input type="submit" id="formSubmit" value="&nbsp;" />
</form>

<script>
// jQuery plugin to prevent double submission of forms
jQuery.fn.preventDoubleSubmission = function($) {
    $(this).on('submit',function(e) {
        var $form = $(this);
        if ($form.data('submitted') === true) {
          // Previously submitted - don't submit again
          e.preventDefault();
        } else {
          // Mark it so that the next submit can be ignored
          $form.data('submitted', true);
        }
    });
    // Keep chainability
    return this;
};

jQuery(document).ready(function($) {
    $('form').preventDoubleSubmission();
});
</script>
</body>

【问题讨论】:

  • 你能包含你的标记吗?
  • 你如何在你的页面中包含这个脚本?
  • 你用的是什么版本的jQuery?
  • 你在哪一行得到错误?
  • 我正在使用 v1.11.1 并且在线上遇到错误: var $form = $(this);它实际上是在剥离 $form - 只显示 var = $(this)

标签: jquery wordpress


【解决方案1】:

只需将您的自定义 jQuery 函数放在 document ready 块中,这样它就可以使用 $。像这样:

jQuery(document).ready(function($) {

    $.fn.preventDoubleSubmission = function() {
        $(this).on('submit',function(e) {
            var $form = $(this);
            if ($form.data('submitted') === true) {
              // Previously submitted - don't submit again
              e.preventDefault();
            } else {
              // Mark it so that the next submit can be ignored
              $form.data('submitted', true);
            }
        });
        // Keep chainability
        return this;
    };

    $('form').preventDoubleSubmission();

});

【讨论】:

  • 是的应该可以。打败我吧,因为它适用于我目前正在开发的网站。
  • 这是有道理的,但它仍然从var $form = $(this) 中删除了$form... 只剩下unexpected token = 它只显示var = $(this)
  • 我会说你的问题出在你的代码的其他地方,而不是列出的代码,我已经测试过它并且它有效。这使得尝试猜测可能出了什么问题变得很困难,但听起来确实像我之前提到的 php 正在将 jscript 回显到文档中。
  • 是的,@Gavin Simpson,我要测试一些东西,然后报告。
  • @Gavin Simpson:我发现了意外的令牌,这实际上与使用thickbox的WP插件有关,但我仍然无法在单击后禁用表单按钮。我已经能够在 WP 之外创建页面并按照 Kaloyan 所说的那样工作,所以我正在继续解决问题。
【解决方案2】:

jQuery.fn.preventDoubleSubmission = function() {

应该是

jQuery.fn.preventDoubleSubmission = function($) {"

我想。

你也不应该像这样包含 jquery.js,而应该使用 enqeue。 (&lt;?php wp_enqueue_script('jquery');?&gt;)。

【讨论】:

  • 是的,我已更改为您建议的...function($) {,并且我正在使用 wp_enqueue,只是添加了以便可以看到标记
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2012-07-16
相关资源
最近更新 更多