我想删除JQuery Datepicker中的默认日期。
我尝试以下代码:
$(this).datepicker({defaultDate: ''});
但它似乎不起作用。今天的日期仍被选为默认日期。
答案 0 :(得分:9)
我使用隐藏的altField来解决问题:
<div id="DatePicker"></div>
<input type="hidden" value="" name="Date" id="Date" />
以及以下脚本:
<script>
$(function () {
$('#DatePicker').datepicker({
altField: '#Date', // ID of the hidden field
altFormat: 'dd/mm/yy'
});
// Remove the style for the default selected day (today)
$('.ui-datepicker-current-day').removeClass('ui-datepicker-current-day');
// Reset the current selected day
$('#Date').val('');
});
</script>
然后,我在验证例程中使用了隐藏的#Date字段。
答案 1 :(得分:8)
撰写本文时,没有一个答案真的对我有用,所以我的解决方案是从几个答案中拼凑出来的(对于内联日期选择器)。
$('.calendar').datepicker("setDate", null); // this unsets the datepicker's internal selected date; it still shows a highlight on today's date that looks like a selected date though
$('.calendar').find(".ui-datepicker-current-day").removeClass("ui-datepicker-current-day"); // this actually removes the highlight
答案 2 :(得分:6)
这实际上是 jQuery UI Datepicker 的一个开放性问题。这是问题的门票:
此问题的核心是 Datepicker 错误地处理 null 的 defaultDate 值。在这里提供的解决方案中,我最喜欢j-polfer的解决方案,并因此推崇它。但是,此解决方案的工作原因是因为 setDate 方法中内置了一个补丁,用于在 null 传递给date参数时清除选择。但是我想找出为什么 Datepicker没有正确响应选项中的 defaultDate:null ,所以我看了一下源代码。
我发现我需要对 Datepicker 源代码进行三次更改才能解决此问题。以下是我所做的更改:
我改变了这个方法...
_getDefaultDate: function(inst) {
return this._restrictMinMax(inst,this._determineDate(inst,this._get(inst, "defaultDate"), new Date()));
}
到此......
_getDefaultDate: function(inst) {
var def = this._get(inst, "defaultDate");
return def !== null ? this._restrictMinMax(inst, this._determineDate(inst, def , new Date())): null;
},
我改变了这一行......
inst.selectedDay = inst.currentDay = newDate.getDate();
为...
inst.selectedDay = date == null? 0: inst.currentDay = newDate.getDate();
和这一行...
this._adjustInstDate(inst);
为...
if (date != null) {
this._adjustInstDate(inst);
}
所以我改变了这一行......
(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
为...
(defaultDate != null && (defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime())) ?
就是这样。现在, Datepicker defaultDate 选项可以更直观地响应传入的 null 值,或者忽略此选项。
$('#test').datepicker({ altField: '#alt'}); // No date selected
$('#test').datepicker({ altField: '#alt', defaultDate: null}); // No date selected
$('#test').datepicker({ altField: '#alt', defaultDate: 0}); // Today selected
$('#test').datepicker({ altField: '#alt', defaultDate: +1}); // Tomorrow selected
$('#test').datepicker({ altField: '#alt', defaultDate: -1}); // Yesterday selected
以下是 JSFIDDLE 中的演示:Datepicker demo with defaultDate null
请注意:这些更改尚未经过详尽的测试,因此_getDefaultDate方法现在可能会返回null,因此可能会出现其他问题。所以先做自己的测试吧! ;)
希望这有助于某人! :)
答案 3 :(得分:5)
根据此处发布的答案,我设法制作出有效的方法。为了我的目的,我有一个始终可见的日历。如果您需要弹出日历,则应该能够使用现有的onSelect
处理程序在第一次打开时执行类似的操作。
$("selector").datepicker(/* options */).find(".ui-state-active").removeClass("ui-state-active");
值得庆幸的是,使用最新版本的jQuery UI(撰写本文时为1.10.2)非常简单。它似乎不会干扰小部件的正确运行。唯一需要注意的是,使用getDate
getter会产生通常默认的选定日期。
出于我的代码的目的,这是可以接受的,因为我的用户无法继续(他们甚至没有继续按钮),直到他们从选择器点击了有效日期。如果您不是这种情况,Florian Peschka's answer之类的内容可以满足您的需求。
答案 4 :(得分:3)
要打开日期选择器对话框,必须在某年的某个月打开它。我的意思是,你想显示这个对话框并且是空白的吗?...
我认为如果您不想传递任何默认日期,您可以做的最好的事情是获取当前日期:
$(document).ready(function() {
$('#datepicker').datepicker();
});
传递此方法将失败,因为给定的defaultDate,不是null但是空白
$(this).datepicker({defaultDate: ''});
这可以完成前面代码中的预期工作
$(this).datepicker({defaultDate: null});
但它的行为与此答案中的第一个代码块相同。
答案 5 :(得分:2)
我使用内联 datepicker也有同样的问题。 插件在今天的cell / td上添加了类.ui-datepicker-current-day和.ui-state-active。我的解决方案是使用自定义类,如.ui-datepicker-selected-day,并实现beforeShowDay来处理您自己所选日期的显示。这样的事情:
$("datepicker").datepicker({
beforeShowDay: function(date) {
var dateIso = $.datepicker.formatDate("yy-mm-dd", date);
var dateSelected = $("input").val();
var classDate = "";
if(dateSelected === dateIso){
return [false,"ui-datepicker-selected-day"];
}else{
return [true];
}
}
放入“突出显示”单元格的css示例:
.ui-widget-content .ui-datepicker-selected-day .ui-state-active{
background-color: red;
}
+ disable some css from the plugin
答案 6 :(得分:1)
我使用$('.datefield').val('')
显示空白而不显示默认日期。
答案 7 :(得分:1)
我知道这是一个老问题,我发现它是因为我有同样的要求;不要在输入(文本框)中显示日期,让用户从日期选择器中选择一个日期。
标记(MVC)
<div class="leftContent">
@Html.TextBox("DateShipOn", Nothing, New With {.class = "DateShipOn", .readonly = "readonly"})
</div>
HTML输出:
<div class="leftContent">
<input id="DateShipOn" class="DateShipOn hasDatepicker" type="text" value="" readonly="readonly" name="DateShipOn">
</div>
脚本(文档就绪):
$('.DateShipOn').datepicker({
constrainInput: true,
display: true,
border: true,
background: true,
maxDate: "+1m",
minDate: new Date('@minDate')
});
$('.DateShipOn').datepicker("setDate", new Date());
上面代码的效果是输入框中显示了'minDate'变量的值,当点击输入时,datepicker下拉,默认选择'minDate'。
注意:我们不允许手动输入,这就是'readonly'属性的原因。
解决:强>
在我的情况下,我所要做的就是评论/删除这一行:
$('.DateShipOn').datepicker("setDate", new Date());
结果:
效果就是显示;
注意:根据我的要求,maxDate的'+ 1m'将日期选择限制为minDate值的30天。
希望这可以帮助别人。
答案 8 :(得分:0)
我有类似的问题,但有特定的行为。
(作为旁注,我认为预期的行为应该是从日历中的当前日期开始,但不选择它。)
我的实施包括一个隐藏输入altField
的内联日历。我所做的是删除altField
选项,并添加一个更新它的onSelect
函数。这样,今天的日期仍然看起来被选中,但代表真实值的隐藏字段保持为空。
答案 9 :(得分:0)
我的解决方案涉及覆盖jQuery的追加,以便我们可以在每次重新生成HTML并将其附加到div时删除元素。这样可以在切换月份时修复默认日期的闪烁,并且还可以清除悬停。
(function($) {
var origAppend = $.fn.append;
$.fn.append = function () {
return origAppend.apply(this, arguments).trigger("append");
};
})(jQuery);
var datePickerDiv = $("#date-picker");
datePickerDiv.bind("append", function() {
$(this).find(".ui-datepicker-days-cell-over").removeClass("ui-datepicker-days-cell-over");
$(this).find(".ui-datepicker-today a ").removeClass("ui-state-highlight ui-state-active ui-state-hover");
});
datePickerDiv.datepicker();
答案 10 :(得分:0)
适合我:
$(document).ready(function() {
$("#datepicker .ui-state-active").removeClass("ui-state-active");
$("#datepicker .ui-state-highlight").removeClass("ui-state-highlight");
$("#datepicker .ui-datepicker-today").removeClass("ui-datepicker-today");
});
答案 11 :(得分:0)
您也可以像这样放置空值:
$(this).datepicker({defaultDate: null});
答案 12 :(得分:-2)
想要“删除”默认日期是什么意思?
你认为当没有月份开始时,日期选择器会打开吗?!您 拥有默认日期。
修改您的评论
根据需要设置默认日期,如果用户已更改,请检查。如果是这样,他选择了一个自定义日期。
另一种方法是在用户点击datepicker字段时创建一个设置为true
的变量。
如果用户提交表单,则检查该变量。如果是true
,则用户选择了日期。如果没有,他没有触及datepicker字段。