【问题标题】:Disable form field based on datepicker selection根据日期选择器选择禁用表单字段
【发布时间】:2013-12-14 20:25:35
【问题描述】:

我有一个带有日期选择器的表格,人们可以在其中预订旅行。如果他们选择 12 月的日期,我希望自动禁用表单上的额外是/否下拉菜单。我的日期选择器也有禁用日期。日期选择器似乎正在工作,但我似乎无法从任何地方返回的日期选择器中获取所选月份(我尝试将其打印到屏幕上,在警报中使用它等)显然我的代码有问题,但我'我不是 JS/jQuery 专家,所以我无法自己解决!

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

// INITIALIZE DATEPICKER
jQuery(function() {
        jQuery("#myDatepicker").datepicker({
            beforeShowDay: unavailableDates,
            changeMonth: true,
            minDate: 1
    });

});

// DISABLE DATES WITHIN DATEPICKER & GET MONTH  
function unavailableDates(date) {
        dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
                    if (jQuery.inArray(dmy, theUnavailableDates) == -1) {
            return [true, ""];
        } else {
            return [false, "", "Unavailable"];
        }

        var selectedMonth = date.getMonth();
        if (selectedMonth == 11) {
            jQuery("#tourExtras").hide();
            alert("this means its working");
        }
        else {
            jQuery("tourExtras").show();
            alert("this means its not working");
        }
}   

// DISABLED DATES 
var theUnavailableDates = ["1-1-2014", "2-1-2014", "3-1-2014"];

现在我什至无法让警报正常工作,所以我假设这与我在 var selectedMonth = date.getMonth(); 等方面的工作方式有关。

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript jquery date datepicker


    【解决方案1】:

    您的函数“unavailableDates(date)”似乎是正确的,但我认为 datepicker 的属性“beforeShowDay”不是您想要的。

    根据jQueryUI's Datepicker API:

    所以,我认为你想要的功能是:onSelect

    你的代码应该是这样的:

    $( "#datepicker" ).datepicker({
        onSelect: function(dateText, inst) { 
            unavailableDates(dateText);
        },
        changeMonth: true,
        minDate: 1
    });
    
    // DISABLE DATES WITHIN DATEPICKER & GET MONTH  
    function unavailableDates(dateText) {
        var date = new Date(dateText); //convert text to date
    
            dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
            if (jQuery.inArray(dmy, theUnavailableDates) == -1) {
                alert("this date is NOT on theUnavailableDates array");
                //do something
            } else {
                alert("this date is on theUnavailableDates array!")
                //do something
            }
    
        var selectedMonth = date.getMonth() + 1; //the month is based on jan=0,feb=1,...
        if (selectedMonth == 11) {
            jQuery("#tourExtras").hide();
            alert("this is november");        
        }
        else {
            jQuery("tourExtras").show();
            alert("this is not november");
        }
    }   
    
    // DISABLED DATES 
    var theUnavailableDates = ["1-1-2014", "2-1-2014", "3-1-2014"];
    

    您可以在jsfiddle 上查看。

    【讨论】:

    • 嘿,谢谢!现在我的问题是如何通过警报传递 dateText?或者更好的是,我如何读取 dateText 并说出它是否等于 12 月,然后显示警报?
    • 知道 dateText 是一个字符串,你必须在你的函数开始时将它转换为 Date ,其余的继续等于。您可以使用以下方法将字符串转换为日期:new Date("date in string format")。因此,您的函数的开头将是这样的: function availableDates(dateText) { var date = new Date(dateText); ...(您的其余功能)希望它有所帮助。
    • 嘿,非常感谢!它适用于注释掉的“禁用日期”行,但如果我尝试保持该活动状态(禁用日期工作很重要 - 是否有可能让这两个东西一起工作?) - 是因为现在有 2 个变量称为“日期”?
    • 我不明白那部分。你想要什么 return [true, ""]; ?如果用户选择了一个不可用的日期,那必须是什么行为?
    • 我刚刚从其他人的代码中复制了“禁用日期”部分,并且能够使其对我有用。有一个if...else 语句,但没有返回任何内容(至少用户可以看到)。基本上这部分所做的就是检查数组生成的日期是否与列出的禁用日期匹配,然后使其无法在日期选择器中选择。这有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 2018-07-12
    • 2020-03-17
    • 1970-01-01
    • 2019-04-20
    • 2014-11-10
    相关资源
    最近更新 更多