把datepicker()放在dynamic创build的元素上–JQuery / JQueryUI
我有dynamic创build的文本框,我希望他们每个人都能够单击显示日历。 我使用的代码是:
$(".datepicker_recurring_start" ).datepicker();
哪些只能在第一个文本框上工作,即使我的所有文本框都有一个名为datepicker_recurring_start的类。
非常感谢您的帮助!
这是一个窍门:
$('body').on('focus',".datepicker_recurring_start", function(){ $(this).datepicker(); });
DEMO
$('...selector..').on('..event..', '...another-selector...', ...callback...);
语法意思是:
添加一个监听...selector..
(在我们的例子中的body
)的事件..event..
事件..event..
(在我们的例子中的“焦点”)。 对于与select器匹配的所有匹配节点的后代...another-selector...
(在我们的例子中是.datepicker_recurring_start
),应用事件处理程序...callback...
(在我们的例子中是内联函数)
请参阅http://api.jquery.com/on/ ,尤其是关于“委派事件”的部分
对于我下面的jQuery工作:
改变“身体”的文件
$(document).on('focus',".datepicker_recurring_start", function(){ $(this).datepicker(); });
感谢skafandri
注意:确保你的ID是不同的每个领域
由skafandri +1优秀的回答
这只是更新来检查hasDatepicker类。
$('body').on('focus',".datepicker", function(){ if( $(this).hasClass('hasDatepicker') === false ) { $(this).datepicker(); } });
确保.date-picker
hasDatepicker
类的元素没有hasDatepicker
类。 如果是这样,甚至尝试用$myDatepicker.datepicker();
重新初始化$myDatepicker.datepicker();
会失败! 相反,你需要做…
$myDatepicker.removeClass('hasDatepicker').datepicker();
您需要运行.datepicker();
再次dynamic创build其他文本框元素后。
我build议在调用的callback方法中添加元素到DOM。
所以,假设您使用JQuery Load方法从源代码中提取元素并将其加载到DOM中,您可以执行如下操作:
$('#id_of_div_youre_dynamically_adding_to').load('ajax/get_textbox', function() { $(".datepicker_recurring_start" ).datepicker(); });
dynamic元素的新方法是MutationsObserver ..以下示例使用underscore.js来使用(_.each)函数。
MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; var observerjQueryPlugins = new MutationObserver(function (repeaterWrapper) { _.each(repeaterWrapper, function (repeaterItem, index) { var jq_nodes = $(repeaterItem.addedNodes); jq_nodes.each(function () { // Date Picker $(this).parents('.current-repeateritem-container').find('.element-datepicker').datepicker({ dateFormat: "dd MM, yy", showAnim: "slideDown", changeMonth: true, numberOfMonths: 1 }); }); }); }); observerjQueryPlugins.observe(document, { childList: true, subtree: true, attributes: false, characterData: false });
没有其他解决scheme为我工作。 在我的应用程序中,我使用jquery将date范围元素添加到文档,然后将datepicker应用于它们。 所以没有一个事件解决scheme出于某种原因。
这是最后的工作:
$(document).on('changeDate',"#elementid", function(){ alert('event fired'); });
希望这可以帮助一个人,因为这使我稍微回头。
您可以在JavaScript函数中添加类.datepicker,以便能够dynamic更改inputtypes
$("#ddlDefault").addClass("datepicker"); $(".datepicker").datetimepicker({ timepicker: false, format: 'd/m/Y', });
我已经修改@skafandri答案,以避免重新应用.datepicker_recurring_start
构造函数与.datepicker_recurring_start
类的所有input。
这是HTML:
<div id="content"></div> <button id="cmd">add a datepicker</button>
这是JS:
$('#cmd').click(function() { var new_datepicker = $('<input type="text">').datepicker(); $('#content').append('<br>a datepicker ').append(new_datepicker); });
这是一个工作演示