[英]jQuery - click (with using “.on()”) on a dynamically created element doesn't work, only double-click. Why?
我有一个按钮,单击它后会生成一个新的输入(或多个输入)。 当我单击新生成的输入时,我想弹出一个日历小部件。
我这样做是这样的:
$('#datetime_inputs').on('click', '.new_datetime_input', function() {
$(this).datetimepicker({
format: 'Y/m/d H:i'
});
});
当我单击此新输入时,没有任何反应。 当我第二次单击时,将加载小部件(良好)。 如果我第三次单击那里,则加载小部件(良好),第四次-加载小部件(良好),依此类推。
为什么当我第一次单击该窗口小部件时未加载它?
谢谢。
编辑:我使用link的插件。
将您的代码更改为:
$('.new_datetime_input').datetimepicker({
format: 'Y/m/d H:i'
});
当前,您是在第一次点击时对其进行初始化,这就是为什么似乎什么都没有发生的原因。
您无需设置和处理click事件即可显示它,该事件将在调用上述方法后由插件完成。
编辑
要初始化并打开动态添加的元素上的日期选择器,可以执行以下操作:
$('#datetime_inputs').on('click', '.new_datetime_input', function() {
// Do not initialize twice on same element
if($(this).hasClass('init')) return;
else $(this).addClass('init');
// Initialize
$(this).datetimepicker({
format: 'Y/m/d H:i'
})
$(this).click(); // Open datetimepicker
});
1.问题:窗口小部件没有预先绑定到元素。
3解决方案:创建点击事件之前,需要初始化/映射/绑定元素。 对于说在页面加载。
例如。
function bindDatePicker(i){
$("#datepick"+i).datepicker({
changeMonth: true,
changeYear: true,
dateFormat : 'dd/mm/yy',
numberOfMonths:1,
maxDate: "+0M +0D",yearRange:"1960:2099"
});
};
如果我有此功能将日期选择器与ID为'datepickX'的元素绑定,
<input type="text" maxlength="12" onclick="bindDatePicker($index);" id="datepick4" >
我将在页面加载时调用此函数,它将把小部件与element绑定。 因此,下次您将单击带有一些魔术的elemtn! 它将仅在第一次打开。
发生这种情况是因为在“单击”时,您正在初始化datetimepicker。 因此,下次您单击它时,它将已经初始化并向您显示日历。 只需遵循Jai的建议并在创建过程中对其进行初始化。 它将具有单击事件,因此您无需手动设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.