2015-04-05 67 views
0

我使用angularjs,最初因为.live在jQuery的贬值,我做了以下将元素添加到我的屏幕:从角动态创建的元素不会对事件作出响应

var CHECK_INTERVAL = 100; //100 = 1/10th second, choose appropriate 
    function checkForElement() { 
     $('input[type=checkbox]').each(function (index) { 
      $(this).bootstrapSwitch(); 
      $('input[id^="chk"]').on('switchChange.bootstrapSwitch', function (event, state) { 
       //alert('got here!'); 
      }); 
     }); 
     setTimeout(checkForElement, CHECK_INTERVAL); 
    } 
    setTimeout(checkForElement, CHECK_INTERVAL); 

一切都工作得很直到我不得不使用初始页面加载后显示的新元素。

我有下面的代码操纵的另一段代码:

 $('input[id^="chk"]').on('switchChange.bootstrapSwitch', function (event, state) {... 

但是,让页面加载后产生的新的元素没有看到这个代码。

我该怎么做才能让新创建的元素看到上面的代码,检查是否点击复选框?

+0

从文档:事件处理程序只能绑定到当前选择的元素;它们必须在您的代码调用.on()时存在 - 换句话说,使用现有的元素(如文档)并委托给您的输入字段。 – 2015-04-05 19:46:07

+0

养成使用指令来绑定这些事件的习惯 – charlietfl 2015-04-05 20:16:59

+0

@charlietfl你有一个很好的例子来说明如何做到这一点? – webdad3 2015-04-05 20:18:37

回答

1

你将不得不使用:

$(document).on(event, element, function() {}); 

在你的情况:

$(document).on('switchChange.bootstrapSwitch', 'input[id^="chk"]', function (event, state) { ... }