【问题标题】:Why does Jquery UI erase my input box?为什么 Jquery UI 会擦除我的输入框?
【发布时间】:2015-03-04 10:15:09
【问题描述】:

我正在制作一个 .net MVC 应用程序,并在 fiddle 中重现了该问题。

当我尝试更改日期时,日历只是停留在那里,当我单击屏幕上的其他位置时,日历会消失,但另一个日期会被删除。

我只想让日历在我选择日期时消失,而不是删除其他日期。

    $('#from').datepicker({
        inline: true,
        showOtherMonths: true,
        dateFormat: 'dd.mm.yy.',
        firstDay: 1,
        changeMonth: true,
        changeYear: true,
        yearRange: "-50:+50",
        onClose: function (selectedDate) {
            $("#to").datepicker("option", "minDate", selectedDate);
        }
    });

    $('#to').datepicker({
        inline: true,
        showOtherMonths: true,
        dateFormat: 'dd.mm.yy.',
        firstDay: 1,
        changeMonth: true,
        changeYear: true,
        yearRange: "-50:+50",
        onClose: function (selectedDate) {
            $("#from").datepicker("option", "maxDate", selectedDate);
        }
    });

$(".dates").change(function () {
        var dateFrom = $("#from").val();
        //check that there is data before saving into sessionStorage
        if (dateFrom.value.length >= 8)
            sessionStorage.setItem("fromDate", this.value)

        var dateTo = $("#to").val();
        //check that there is data before saving into sessionStorage
        if (dateTo.value.length >= 8)
            sessionStorage.setItem("toDate", dateTo)

        if (dateTo != null && dateFrom !=null) {
            $.ajax({
                url: '/MainPage/DateSessionCreate',
                type: 'POST',
                data: { "dateTo": dateTo, "dateFrom": dateFrom },
                dataType: 'json'
            });
        }
        else {
            alert("one of the dates is null");
        }
    });

var today = new Date();
    var curr_date = today.getDate();
    var curr_month = today.getMonth();
    curr_month++;
    var curr_year = today.getFullYear();
    var toDate = "";
    //check if there's a to Date in sessionStorage 
    if (sessionStorage.getItem("toDate")) {
        toDate = sessionStorage.getItem("toDate");
        sessionStorage.setItem("toDate", toDate);
    } else {
        toDate = curr_date + "." + curr_month + "." + curr_year;
        sessionStorage.setItem("toDate", toDate);
        if (toDate != null) {
            $.ajax({
                url: '/MainPage/DateSessionCreate',
                type: 'POST',
                data: { "dateTo": toDate},
                dataType: 'json'
            });
        }
    }
    document.getElementById("to").value = toDate;


    today.setDate(today.getDate() - 7);
    var new_date = today.getDate();
    var new_month = today.getMonth();
    new_month++;
    var new_year = today.getFullYear();
    var fromDate = "";
    //check if there's a from Date in sessionStorage 
    if (sessionStorage.getItem("fromDate")) {
        console.log("if");
        fromDate = sessionStorage.getItem("fromDate");
        sessionStorage.setItem("fromDate", fromDate);
    } else {
        console.log("else");
        fromDate = new_date + "." + new_month + "." + new_year;
        sessionStorage.setItem("fromDate", fromDate);
        if (fromDate != null) {
            $.ajax({
                url: '/MainPage/DateSessionCreate',
                type: 'POST',
                data: { "dateFrom": fromDate },
                dataType: 'json'
            });
        }

    }
    document.getElementById("from").value = fromDate;

我承认,我还是个新手,如果我知道如何让日期选择器在输入框中写入日期(但是当我使用 'defaultDate: -7' 时,它只突出显示日历中的日期)。 这就是我创建日期格式并将其手动写入输入框中的原因。 附加代码是为了确保页面重新加载后日期保持不变,其中一些用于向控制器发送信息

EDIT1 有人指出onClose 函数混淆了。虽然它确实解决了擦除问题,但它产生了另一个问题——我故意放了那些来限制日期范围。这样,“到”日期不能早于“开始”日期。也许还有另一种方法来限制这一点?

【问题讨论】:

    标签: javascript jquery jquery-ui date calendar


    【解决方案1】:

    您可以将日期的格式更改为最后不带.

    dateFormat: 'dd.mm.yy',
    

    $("#from").val() 的返回值也是字符串,所以它没有 value 属性。您可以改为检查字符串的长度:

    if (dateFrom.length >= 8)
    

    查看this fiddle

    要设置日期选择器的日期,可以使用setDate 方法:

    var today = new Date();
    $('#to').datepicker("setDate", today);
    $('#from').datepicker("setDate", new Date(today.setDate(today.getDate() - 7)));
    

    【讨论】:

    • 非常感谢,你帮了我很多!你能告诉我有没有办法缩短我的代码,即在初始化日期选择器时在输入框中输入日期?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多