当html注入完成onclick时,Javascript调用函数

时间:2013-04-14 22:20:48

标签: javascript jquery ajax onclick

我遇到这种情况: 有一个日历脚本来选择日期。选择日期时,会调用一个名为onclick的功能,以便为时间选择提供一个选择框。现在它不像它的显示:none - > display:block,由JS生成的选择。我的目标是自定义此选择。为此我得到了一个jquery脚本“custom.select”,它只是将选择转换为跨度。问题是如果我在日历调用之后立即将该脚本的调用添加到onclick它不会。我很确定它是因为在那个阶段,选择的html还没有被注入。如果我在选择可见后从firebug控制台调用custom.select函数 - 它可以正常工作。 所以问题是:如何调用它以便它在选择框中发挥作用?

由于

3 个答案:

答案 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);
  });
});