将datepicker()放在动态创建的元素上 - JQuery/JQueryUI

ste*_*ped 111 javascript jquery jquery-ui datepicker

我已经动态创建了文本框,我希望每个文本框能够在点击时显示日历.我使用的代码是:

$(".datepicker_recurring_start" ).datepicker();
Run Code Online (Sandbox Code Playgroud)

哪个只能在第一个文本框上工作,即使我的所有文本框都有一个名为datepicker_recurring_start的类.

非常感谢您的帮助!

ily*_*oli 256

这是诀窍:

$('body').on('focus',".datepicker_recurring_start", function(){
    $(this).datepicker();
});?
Run Code Online (Sandbox Code Playgroud)

DEMO

$('...selector..').on('..event..', '...another-selector...', ...callback...);语法的意思是:
一个侦听器添加到...selector..(在body我们的例子)的事件..event..("焦点"在我们的例子).对于匹配选择器的匹配节点的所有后代...another-selector...(.datepicker_recurring_start在我们的示例中),应用事件处理程序...callback...(在我们的示例中为内联函数)

请参阅http://api.jquery.com/on/,特别是有关"委托事件"的部分

  • 您可能想要添加一个过滤器`:not(.hasDatepicker)` (7认同)
  • 虽然每次文本框获得焦点时你都想调用`.datapicker()`这对我来说似乎很奇怪 - 所以你要小心这种方法(假设我正在读这个).但是,我认为你可以使用`.datapicker()`因为它可能会在尝试重新创建之前检查是否创建了一个datepicker.使用其他代码,您可能没有这种优雅.此外,.on(仅在JQuery 1.7中引入 - 所以请确保您使用的是正确的版本. (5认同)
  • 这是一种适用于任何动态附加的解决方案.+1给你. (4认同)
  • datepicker很聪明,可以检查它是否已经创建(顺便说一下所有的jQueryUI组件)如果jQuery版本低于1.7你可以简单地使用**live** (3认同)

Tap*_*ash 42

对于我来说,jquery工作:

将"身体"改为文件

$(document).on('focus',".datepicker_recurring_start", function(){
    $(this).datepicker();
});
Run Code Online (Sandbox Code Playgroud)

感谢skafandri

注意:确保每个字段的ID不同


ple*_*shy 13

skafandri +1的优秀答案

这只是更新以检查hasDatepicker类.

$('body').on('focus',".datepicker", function(){

    if( $(this).hasClass('hasDatepicker') === false )  {
        $(this).datepicker();
    }

});
Run Code Online (Sandbox Code Playgroud)

  • 然后可以缩短为```$('body').on('focus',".datepicker:not(.hasDatepicker)", function(){$(this).datepicker();});` ``? (2认同)

win*_*ong 11

确保您的.date-picker类元素没有hasDatepicker类.如果是这样,即使尝试重新初始化$myDatepicker.datepicker();也会失败!相反,你需要做...

$myDatepicker.removeClass('hasDatepicker').datepicker();
Run Code Online (Sandbox Code Playgroud)


Tr1*_*tan 5

.datepicker();在动态创建其他文本框元素后,需要再次运行.

我建议在调用的回调方法中这样做,即将元素添加到DOM中.

因此,假设您正在使用JQuery Load方法从源中提取元素并将它们加载到DOM中,您可以执行以下操作:

$('#id_of_div_youre_dynamically_adding_to').load('ajax/get_textbox', function() {
  $(".datepicker_recurring_start" ).datepicker();
});
Run Code Online (Sandbox Code Playgroud)