【问题标题】:jQuery datepicker w/ script to disable dates, works in fiddle. not on sitejQuery datepicker w/ script 禁用日期,在小提琴中工作。不在现场
【发布时间】:2013-08-23 00:25:43
【问题描述】:

这是我在网站 HEAD 中的代码 (header.php):

<script type="text/javascript">
var unavailableDates = ["1-9-2013", "2-9-2013", "3-9-2013", "4-9-2013", "5-9-2013"];

function unavailable(date) {
        dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
        if ($.inArray(dmy, unavailableDates) == -1) {
            return [true, ""];
        } else {
            return [false, "", "Unavailable"];
    }
}

    $(function() {
        $("#dpick").datepicker({
            dateFormat: 'dd MM yy',
            beforeShowDay: unavailable
    });

});

当我将它加载到小提琴中并使用第二个函数 (#dpick) 中引用的特定 ID 调用一个简单的输入时,它可以正常工作并在 datepicker 中禁用 2013 年 9 月 1 日至 5 日的日期 - 所以脚本本身似乎是好的。

但是当我在我的网站上使用它时(我的网站在 WordPress 中,并且 datepicker 字段在 ContactForm7 表单内 - 如果这有什么不同 - 它仍然允许我设置 datepicker 字段的 ID,所以应该没问题) 没有一个日期被禁用。

datepicker 字段称为“Tour Date”(在左列,从底部算起的第 2 行)——即使我查看页面的源代码,我也可以看到我的 JS 在头部声明,如果我向下滚动到表单字段所在的位置,我可以看到我的游览日期(datepicker)字段 ID 设置为 id="dpick",这应该基于我的脚本中的第二个函数,对吧?

谁能帮我弄清楚为什么这不起作用?我多年来一直试图弄清楚这一点,但没有任何运气。我觉得我在正确的轨道上,但也许我错过了一些简单的东西......

编辑:

不确定这是否有任何区别......但在第二个函数中显示“dateFormat:'dd MM yy'” - 还有一个选项可以在我的 CF7 表单中设置日期格式,但我已经尝试匹配它们,即使那样它似乎仍然不起作用......:/

【问题讨论】:

    标签: javascript jquery wordpress datepicker disabled-input


    【解决方案1】:

    执行此操作的标准方法是将您的 JavaScript 放入一个文件中:/wp-content/themes/your-theme/js/your-script.js 并将其排入 functions.php 中,添加 jQuery 作为依赖项。这样,其他插件可以与您的脚本交互,例如:缓存插件。

    add_action( 'wp_enqueue_scripts', 'enqueue_so_18343752' );
    
    function enqueue_so_18343752() 
    {
        wp_register_script( 
            'my-datepicker', 
            get_stylesheet_directory_uri() .'/js/your-script.js', 
            array( 'jquery' ) // Dependencies
        );
        wp_enqueue_script( 'my-datepicker' );
    }
    

    我用这个测试过:

    jQuery(document).ready(function($) 
    {   
        alert('enqueued successfully');
    }
    

    但您的文件 your-scripts.js 应该如下所示:

    jQuery(document).ready(function($) 
    {   
        var unavailableDates = ["1-9-2013", "2-9-2013", "3-9-2013", "4-9-2013", "5-9-2013"];
    
        function unavailable(date) {
            dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
            if ($.inArray(dmy, unavailableDates) == -1) {
                return [true, ""];
            } else {
                return [false, "", "Unavailable"];
            }
        }
    
        $(function() {
            $("#dpick").datepicker({
                dateFormat: 'dd MM yy',
                beforeShowDay: unavailable
            });
        });
    });   
    

    【讨论】:

    • 您好 brasofilo,我试过了,但没有成功 - 事实上,它产生了“服务器错误”消息,我什至无法加载我的网站。这与将第一部分代码添加到 functions.php 文件有关,因为该错误仅在我上传该文件时发生。我将我的 JS 文件(包含第二部分代码)上传到我的主题文件夹,在 /library/js/ 目录中......这是正确的地方吗?另外,我正在使用儿童主题,如果这有什么不同的话。有什么想法吗?
    • 我已经尝试再次添加它,它正在做同样的事情 - “服务器错误”消息。我将第二部分复制并粘贴到名为“disableddates.js”的新文件中并上传到wp-content/themes/magazino/library/js/(此代码存在语法错误......我必须在末尾添加});才能编译)然后我将第一部分添加到最底部的functions.php 文件中,将文件名更新为“disableddates.js”并删除了最后一个?&gt;,但它仍然给我服务器错误消息
    • 当然,这是functions.php 文件:pastebin.com/q32Q7e53(我从您上面的答案中复制和粘贴的函数位于最底部,我替换了最后一个?&gt;,因为它没有它)。然后这是我的disableddates.js 文件的样子:pastebin.com/F0xrSi5E 所以我的functions.php 文件位于/wp-content/themes/magazino_child/ 而disableddates.js 文件位于/wp-content/themes/magazino/library/js/
    • 我尝试将functions.php放在父主题文件夹而不是子主题文件夹中,但它似乎没有改变任何东西。我唯一能想到的另外两件事(基于我对这些错误所做的研究)是我应该用jQuery 替换$,因为它可能与在其他地方使用jQuery 的WordPress 冲突......但是当我这样做时,我在控制台中得到一个 JS 错误,上面写着“$("#dpick").datepicker() 不是函数
    • 论坛上有人还说要确保在页面上的 datepicker 之后调用 datepicker 函数。但我不确定这是怎么可能的,因为我的 datepicker 输入在我的 WordPress 网站的 CF7 表单内......而且我不必从头调用 jQuery/JS 吗?
    【解决方案2】:

    您将在您的脚本中包含 jQuery ,该脚本使用 jQuery。代码:

    <script type="text/javascript">
        var unavailableDates = ["1-9-2013", "2-9-2013", "3-9-2013", "4-9-2013", "5-9-2013"];
    
        function unavailable(date) {
                dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
    
        // snip... more code...
    
        // you're using jQuery! but it's not loaded yet!
        $(function() {
            $("#dpick").datepicker({
                dateFormat: 'mm dd yy',
                beforeShowDay: unavailable
        });
    </script>
    
    <!-- more HTML stuff... -->
    
    <script type='text/javascript' src='http://experience.nipissingu.ca/wp-includes/js/jquery/jquery.js?ver=1.10.2'></script>
    <script type='text/javascript' src='http://experience.nipissingu.ca/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.2.1'></script>
    <script type='text/javascript' src='http://experience.nipissingu.ca/wp-content/plugins/gallery-plugin-pro/fancybox/jquery.mousewheel-3.0.4.pack.js?ver=3.6'></script>
    <script type='text/javascript' src='http://experience.nipissingu.ca/wp-content/plugins/gallery-plugin-pro/fancybox/jquery.fancybox-1.3.4.pack.js?ver=3.6'></script>
    <!-- etc. more jQuery including -->
    

    只需在 jQuery 包含的 之后移动你的脚本标签,它就可以工作了。

    您可以在 JavaScript 控制台中看到错误:

    【讨论】:

    • 嗨 Doorknob,我将脚本移到了 jQuery 包含的下方,并确保它在源代码中被调用,但它仍然没有禁用日期......有什么想法吗? ://
    • @Iconoclast 查看您的错误控制台。我在那里看到一个错误。
    • 我也看到了错误...但我不知道如何解决!我已经将脚本移到了我调用 jQuery 的下面……它与第一个函数有关,但我不明白
    • @Iconoclast 提示:包含 datepicker 库的方式有问题 - 错误告诉您找不到它。
    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多