2015-04-05 71 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) { ... } 
相關問題