使Kendo Datepicker只读,但也可以选择

gar*_*lur 5 asp.net-mvc telerik asp.net-mvc-4 kendo-ui kendo-asp.net-mvc

我一直在努力使我的Kendo Datepicker没有用户文本输入,我提出的唯一解决方案就是将标签设为"readonly".但是我希望能够使用鼠标从选择器中选择日期,而无法直接将文本输入到选择器,因此使得日期选择器只能读取但可选择.

有什么想法?

                <div>
                    @(Html.Kendo().DatePicker()
                          .Start(CalendarView.Year)
                          .Name("DatePicker")
                          .Value(DateTime.Now.AddDays(-365))
                          .Max(DateTime.Now)
                          .HtmlAttributes(new { style = "width: 125px;"  })
                          .Events(e => e.Change("onDateChange")))
                </div>
Run Code Online (Sandbox Code Playgroud)

gar*_*lur 7

过了一会儿,我发现了一个使用javascript的简单解决方案.我只是声明了一个脚本,它可以阻止任何用户输入,而不会禁用或只读输入.像这样的东西:

$("#inputId").keypress(function (evt) {
    var keycode = evt.charCode || evt.keyCode;
    if (keycode == 9) { //allow Tab through
        return true;
    } else {
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

这比我想象的容易:)

########### EDITED ####################

正如评论中所建议的那样,抑制所有击键可能不是好习惯所以我会粘贴几乎相同的代码,但建议我打开datePicker(但仍然有点抑制用户文本输入).

$("#inputId").keypress(function (evt) {
    var keycode = evt.charCode || evt.keyCode;
    if (keycode == 9) { //allow Tab through
        return true;
    } else {
        // Allow the datepicker to open instead
        var datePicker = $("#inputId").data("kendoDatePicker");
        datePicker.open();
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)