动态输入字段上的jquery datepicker

时间:2013-03-01 10:14:04

标签: php javascript jquery

我需要在动态创建的输入字段上使用datepicker帮助...

我有这样的表格:

    <table id="reminder">
                 <tr>
                 <th>Payment Reminders</th> 
                 <th></th>
                 <th></th>
                 <th></th>
                 </tr>
                 <tr>
                    <td><label>Reminder</label></td>                              
                    <td><input type="text" name="payreminder[]" id="payreminder" class="input1" size="20" ><script>$('#payreminder').datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear: true, yearRange: '2011:2020'}); </script></td> 
                    <td><label>Description</label></td>
                    <td><input type="text" class="input1" name="paydescription[]" id="paydescription"></td>
                    <td> <a href="#" onClick="addReminder('dynamicInputReminder');" title="Add another">Add another</a></td>
                 </tr>
                  <tr>
                   <td colspan="6"><div id="dynamicInputReminder"></div> </td> 

                </tr>


        </table>

用于添加更多提醒的javascript是:

<script type="text/javascript" >

 var counterReminder = 1;
 var limit = 20;              
  function addReminder(divName){ 
     if (counterReminder == limit)  {
      alert("You have reached the limit of adding " + counterReminder+ " inputs");
      }
      else {
      var newdiv = document.createElement('div');
      newdiv.innerHTML = "<td><label>Reminder</label></td><td><input type=\"text\"  id=\"payreminder["+counterReminder+"]\" name=\"payreminder["+counterReminder+"]\" class=\"input1\" ></td><td><label>Description</label></td><td><input type=\"text\" id=\"paydescription["+counterReminder+"]\" name=\"paydescription["+counterReminder+"]\" class=\"input1\"></td>";
      document.getElementById(divName).appendChild(newdiv);
      counterReminder++;
 } 
}
</script>

问题是:我如何以及在何处调用日期选择器的脚本,以便它适用于动态创建的字段?

<script>$('#payreminder').datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear: true, yearRange: '2011:2020'}); </script>

非常感谢!

6 个答案:

答案 0 :(得分:6)

为输入字段使用类而不是id,例如

<input type=\"text\"  id=\"payreminder["+counterReminder+"]\" name=\"payreminder["+counterReminder+"]\" class=\"payreminder\" >

<script>
    $(document).on('focusin', '.payreminder', function(){
      $(this).datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear: true, yearRange: '2011:2020'});
    });
</script>

答案 1 :(得分:1)

试试这个

删除您的脚本并将其放在代码的末尾。

注意:ID应该始终是唯一的,所以我在这里使用了类。

将您的ID更改为“payreminder”类。

$(document).find('.payreminder').datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear: true, yearRange: '2011:2020'});

答案 2 :(得分:0)

试试这个:

<script type="text/javascript" >

 var counterReminder = 1;
 var limit = 20;              
 function addReminder(divName) { 
     if (counterReminder == limit)  {
         alert("You have reached the limit of adding " + counterReminder+ " inputs");
     } else {
         var newdiv = document.createElement('div');
         newdiv.innerHTML = "<td><label>Reminder</label></td><td><input type=\"text\"  id=\"payreminder["+counterReminder+"]\" name=\"payreminder["+counterReminder+"]\" class=\"input1\" ></td><td><label>Description</label></td><td><input type=\"text\" id=\"paydescription["+counterReminder+"]\" name=\"paydescription["+counterReminder+"]\" class=\"input1\"></td>";
         document.getElementById(divName).appendChild(newdiv);
         $(newDiv).find('input').datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear:  true, yearRange: '2011:2020'});
         counterReminder++;
     } 
}
</script>

答案 3 :(得分:0)

$(document).on('focusin', 'input[id^=payreminder]', function(){
  $(this).datepicker({dateFormat: $.datepicker.W3C, changeMonth: true, changeYear: true, yearRange: '2011:2020'});
});

答案 4 :(得分:0)

在要添加datepicker的每个输入字段上添加一个名为date的类, 现在每次添加新字段时,请调用以下函数

$(".date").datepicker();

答案 5 :(得分:0)

或者,您可以为每个输入使用data-属性,而不是类。以下内容会在页面加载后立即初始化所有datepicker <input type="text" data-datepicker ...>标签,然后在添加新提醒后可以再次调用。

function initDatePicker () {
    $("input[data-datepicker]").datepicker();
};
$(document).ready(initDatePicker());

此外,我发现每次重新初始化日期选择器<input>时,都对所有日期选择器function addReminder(divName){ ... $("input[data-datepicker]").datepicker('destroy'); initDatePicker(); ... }; 调用destroy()方法很有用;否则,它们似乎会断裂。我使用了以下内容:

datepicker('destroy')

很明显,请确保先致电initDatePicker(),然后再致电DB_CONNECTION=sqlite DB_DATABASE="C:/wamp64/www/myapplication/test.sqlite" ,或者每次添加新提醒时,都会清除所有日期选择器。

jQueryUI datepicker destroy method