我正在添加附加了datepicker的日期输入。
问题是:我在第一个输入中选择一个日期,然后尝试在第二个或第三个或..输入中选择另一个日期。好吧,这个最后选择的日期显示在第一个输入中,覆盖已经选择的日期,并将新输入留空。
为什么?我怎么解决这个问题?
这是html:
<div id="main">
<span>
<input type="text" id="mydate" name="mydate[]" class="datepicker">
</span>
</div>
<a href="#" id="addInput">Add input</a>
这是js:
var datePickerOptions = {
dateFormat: 'd/m/yy',
firstDay: 1,
changeMonth: true,
changeYear: true
}
$(document).ready(function()
{
$('.datepicker').datepicker(datePickerOptions);
});
$(function() {
var scntDivA = $('#main');
var ii = $('#main span').size() + 1;
$('#addInput').live('click', function() {
$('<input type="text" id="mydate" name="mydate[]" class="datepicker"').appendTo(scntDivA);
$('.datepicker').datepicker(datePickerOptions);
ii++;
return false;
});
});
谢谢!
答案 0 :(得分:1)
更改此代码:
$('<input type="text" id="mydate" name="mydate[]" class="datepicker"').appendTo(scntDivA);
$('.datepicker').datepicker(datePickerOptions);
到
var inp = $('<input type="text" id="mydate" name="mydate[]" class="datepicker"').appendTo(scntDivA);
inp.datepicker(datePickerOptions);
当您使用.appendTo
时,它会返回附加的项目,在这种情况下是新输入,因此您不需要重新找到&#34;它
使用$('.datepicker').
时,它会查找包含所有以前添加的项目的类.datepicker的所有内容,从而将新选项应用于旧的日期选择器。
答案 1 :(得分:1)
您可以查看以下代码。我们为每个新添加的文本字段设置唯一类,并仅在新添加的文本字段上初始化日期选择器。在您的代码中,您重新初始化现有的文本字段,因此先前选择的日期被覆盖。
var datePickerOptions = {
dateFormat: 'd/m/yy',
firstDay: 1,
changeMonth: true,
changeYear: true
}
$(document).ready(function() {
$('.datepicker').datepicker(datePickerOptions);
var scntDivA = $('#main');
var ii = $('#main span').size() + 1;
$('#addInput').on('click', function() {
//adding the unique class like datepicker_number
var newText = $("<input type=\"text\" id=\"mydate_"+ii+"\" name=\"mydate[]\" class=\"datepicker datepicker_"+ii+"\">");
$(newText).appendTo(scntDivA);
//initializing the datepicker only on newly added textfield with class like datepicker_number
$('.datepicker_'+ii).datepicker(datePickerOptions);
ii++;
return false;
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.css" />
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.js"></script>
<div id="main">
<span>
<input type="text" id="mydate" name="mydate[]" class="datepicker">
</span>
</div>
<a href="#" id="addInput">Add input</a>
注意:上面的代码段使用的是jQuery 1.11.0,但您可以使用.on
处理程序中的代码,因为它位于您的.live
代码中。
答案 2 :(得分:0)
这使用jquery 1.9.1
$(document).ready(function()
{
$('body').on('focus',".datepicker", function(){
$(this).datepicker(datePickerOptions);
});
});
答案 3 :(得分:0)
只需为所有初始输入调用datepicker插件,为每个新创建的输入调用一次。
http://codepen.io/kante/pen/ALRvqN
HTML:
<div id="main">
<span>
<input type="text" id="mydate" name="mydate[]" class="datepicker">
</span>
</div>
<a href="#" id="addInput">Add input</a>
JS:
var datePickerOptions = {
dateFormat: 'd/m/yy',
firstDay: 1,
changeMonth: true,
changeYear: true
}
$(document).ready(function() {
$('.datepicker').datepicker();
$('#addInput').live('click', function(){
$input = $('<input type="text" name="mydate[]" />').datepicker(datePickerOptions);
$('<div>').html($input).appendTo($('#main'));
});
});