2016-09-26 105 views
0

我添加日期输入附加日期选择器。Jquery 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

你可以告诉我如何在创建文本框时生成Textbox_id – ash060

+0

你可以在'jsfiddle?中显示一个例子吗?' – KiRa

回答

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,但你可以,因为它是你的.live代码中.on处理程序中使用的代码。

0

这用了jQuery 1.9.1

$(document).ready(function() 
{ 
    $('body').on('focus',".datepicker", function(){ 
      $(this).datepicker(datePickerOptions); 
    });​ 
}); 

工作小提琴:https://jsfiddle.net/khairulhasanmd/bLb047rL/2/

+0

我在1.9以下使用jquery,所以on()将无法工作。更改为live()并且不起作用。对不起,但无法更新jquery的版本 –

+0

您正在使用哪个版本? 'on()'是从1.7 –

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它返回附加的项目,在本例中为新输入,因此您不需要“重新找到”它。

当您使用$('.datepicker').时,它会找到包含所有以前添加的项目的.datepicker类的所有内容,从而将新选项应用于旧的日期选择器。

+0

抱歉,无法正常工作。在第一个输入中显示日期选择器,但不是在动态创建的日期选择器中 –

+0

如果使用正确格式化的HTML作为''部件,你会怎样? –

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')); 
    }); 
});