我遇到这种情况: 有一个日历脚本来选择日期。选择日期时,会调用一个名为onclick的功能,以便为时间选择提供一个选择框。现在它不像它的显示:none - > display:block,由JS生成的选择。我的目标是自定义此选择。为此我得到了一个jquery脚本“custom.select”,它只是将选择转换为跨度。问题是如果我在日历调用之后立即将该脚本的调用添加到onclick它不会。我很确定它是因为在那个阶段,选择的html还没有被注入。如果我在选择可见后从firebug控制台调用custom.select函数 - 它可以正常工作。 所以问题是:如何调用它以便它在选择框中发挥作用?
由于
答案 0 :(得分:0)
将委托与.on():
一起使用$(function(){
$(document).on('click','.classdynamic',function(){
//do stuff here
});
});
您应该将事件委托给目标元素的最近的静态容器。这意味着更改$(document).on('click','.classdynamic',function(){...});
通过类似的方式:$('#staticContainer').on('click','.classdynamic',function(){...});
答案 1 :(得分:0)
确定何时添加元素并非易事。 I answered a similar question here
最好的方法是对创建select的脚本进行一些控制,然后将代码附加到它。实现这一目标的一种方法是使用面向方面编程(AOP) - 也不容易。
对于当前的浏览器,最直接的方法是在循环中使用setTimeout并轮询页面直到元素存在。
答案 2 :(得分:0)
好的,我感谢Christophe!我从这里使用了Selector Listeners脚本:http://www.backalleycoder.com/2012/08/06/css-selector-listeners/ 它更加复杂,因为父母也不存在。))。所以我做的是在日历调用lol之后我将监听器附加到onclick。我需要创建另一个函数,以使其与脚本一起使用,这里是代码:
var doSelect = function(){
jQuery('#timeslots').customSelect();
};
jQuery(document).ready(function(){
jQuery('.td_calendar').on('click','#anchor1',function(){
cal.select(document.forms['frmRequest'].startdate,'anchor1','yyyy-MM-dd');
document.getElementById('slots').addSelectorListener('#timeslots', doSelect);
});
});