当我将datepicker设为只读时,我发现用户无法在文本框中输入任何内容。
$("#datepicker").attr('readonly', 'readonly');
但是,他们仍然可以使用日历更改值。如何隐藏日历以便用户无法更改日期值?
我不想禁用datepicker,因为我需要在表单提交时将值发布到服务器。
<击> ("#datepicker").datepicker('disable');
击>
答案 0 :(得分:71)
我设置了以下beforeShow事件处理程序(在options参数中)来实现此功能。
beforeShow: function(i) { if ($(i).attr('readonly')) { return false; } }
答案 1 :(得分:26)
您可以将允许的范围设置为某个无效范围,以便用户无法选择任何日期:
$("#datepicker").datepicker({minDate:-1,maxDate:-2}).attr('readonly','readonly');
答案 2 :(得分:6)
我的最终解决方案:
当我的应用加载时,我会初始化datepicker:
$('.selector').datepicker({ dateFormat: "mm/dd/yy" });
然后我有一个全局切换按钮,用于启用/禁用日期选择器。要禁用,请执行以下操作:
$('.selector').datepicker("option", "minDate", -1);
$('.selector').datepicker("option", "maxDate", -2);
要启用,请执行以下操作:
$('.selector').datepicker("option", "minDate", null);
$('.selector').datepicker("option", "maxDate", null);
谢谢大家!
答案 3 :(得分:5)
如果您希望重新启用日期选择器及其设置,所有列出的解决方案都会提供平庸的用户体验或导致问题。我使用了类似于select select-only的方法,即禁用它但添加一个具有相同名称的隐藏字段。检查一下:
用法:
$("#datepicker").readonlyDatepicker(true); //makes the datepicker readonly
$("#datepicker").readonlyDatepicker(false); //makes the datepicker editable again
jQuery功能:
$.fn.readonlyDatepicker = function (makeReadonly) {
$(this).each(function(){
//find corresponding hidden field
var name = $(this).attr('name');
var $hidden = $('input[name="' + name + '"][type="hidden"]');
//if it doesn't exist, create it
if ($hidden.length === 0){
$hidden = $('<input type="hidden" name="' + name + '"/>');
$hidden.insertAfter($(this));
}
if (makeReadonly){
$hidden.val($(this).val());
$(this).unbind('change.readonly');
$(this).attr('disabled', true);
}
else{
$(this).bind('change.readonly', function(){
$hidden.val($(this).val());
});
$(this).attr('disabled', false);
}
});
};
答案 4 :(得分:4)
如果您尝试停用该字段(但实际上没有禁用该字段),请尝试将onfocus
事件设置为this.blur();
。这样,只要字段获得焦点,就会自动丢失它。
答案 5 :(得分:2)
很抱歉,但Eduardos解决方案对我不起作用。 最后,我意识到禁用的datepicker只是一个只读的文本框。 因此,您应该将其设为只读并销毁datepicker。 字段将在提交后发送到服务器。
这是一个通用的代码,它接受多个文本框并使它们只读。 它也将剥离日期选择器。
fields.attr("readonly", "readonly");
fields.each(function(idx, fld) {
if($(fld).hasClass('hasDatepicker'))
{
$(fld).datepicker("destroy");
}
});
答案 6 :(得分:1)
onkeypress =&gt;防止默认...
答案 7 :(得分:0)
我提出了另一种与提议的解决方案不同的解决方案。使用日期选择器时,它会创建一个div,类似于在单击输入字段时定位的弹出窗口。要删除它,我只需设置CSS的visibility属性,使其不显示。
if ($('.yourDatepickerSelector').prop('readonly')) {
$('#ui-datepicker-div').css({ 'visibility': 'hidden' })
} else { $('#ui-datepicker-div').css({ 'visibility': 'visible' }) }
这似乎也正确地发布到服务器上,并且不应影响与之关联的任何设置。
答案 8 :(得分:0)
<sj:datepicker id="datepickerid" name="datepickername" displayFormat="%{formatDateJsp}" readonly="true"/>
适合我。
答案 9 :(得分:0)
beforeShow: function(el) {
if ( el.getAttribute("readonly") !== null ) {
if ( (el.value == null) || (el.value == '') ) {
$(el).datepicker( "option", "minDate", +1 );
$(el).datepicker( "option", "maxDate", -1 );
} else {
$(el).datepicker( "option", "minDate", el.value );
$(el).datepicker( "option", "maxDate", el.value );
}
}
},
答案 10 :(得分:0)
Readonly datepicker with example (jquery) -
In following example you can not open calendar popup.
Check following code see normal and readonly datepicker.
Html Code-
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Datepicker functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<script src = "https://code.jquery.com/jquery-1.10.2.js"></script>
<script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
<!-- Javascript -->
<script>
$(function() {
var currentDate=new Date();
$( "#datepicker-12" ).datepicker({
setDate:currentDate,
beforeShow: function(i) {
if ($(i).attr('readonly')) { return false; }
}
});
$( "#datepicker-12" ).datepicker("setDate", currentDate);
$("#datepicker-13").datepicker();
$( "#datepicker-13" ).datepicker("setDate", currentDate);
});
</script>
</head>
<body>
<!-- HTML -->
<p>Readonly DatePicker: <input type = "text" id = "datepicker-12" readonly="readonly"></p>
<p>Normal DatePicker: <input type = "text" id = "datepicker-13"></p>
</body>
</html>
答案 11 :(得分:0)
我用选择器解决了这个问题。我没有在只读输入上初始化datetime选择器。
$('[type=datetime]:not([readonly])').datetimepicker();
答案 12 :(得分:0)
通过禁用日期选择器输入来实现此目的,但是如果您要提交表单数据,那么这是一个问题。
所以在经过很多杂耍之后,这对我来说似乎是一个完美的解决方案
1。在某些情况下,将HTML输入设置为只读。
<input class="form-control date-picker" size="16" data-date-format="dd/mm/yyyy"
th:autocomplete="off"
th:name="birthDate" th:id="birthDate"
type="text" placeholder="dd/mm/jjjj"
th:value="*{#dates.format(birthDate,'dd/MM/yyyy')}"
th:readonly="${client?.isDisableForAoicStatus()}"/>
2。在您的js中的ready函数中,检查readonly属性。
$(document).ready(function (e) {
if( $(".date-picker").attr('readonly') == 'readonly') {
$("#birthDate").removeClass('date-picker');
}
});
这将停止在单击只读字段时调用日历弹出窗口。这也不会对提交数据造成任何问题。但是,如果您禁用该字段,则将不允许您提交值。
答案 13 :(得分:-1)
您可以使用 enableOnReadonly 选项。
$('#datepicker').datepicker({
enableOnReadonly: false
});
请参见https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#enableonreadonly