2014-02-21 123 views
0

我正在使用淘汰賽模板功能在我的頁面中插入HTML模板。問題是,如果我修改由模板插入的DOM(用於添加span elem),則新添加的元素不會觸發先前配置的事件(如點擊)。淘汰賽模板無法處理DOM事件

考慮這個例子: http://jsfiddle.net/gp3Ef/

我的模板是:

<script type="text/html" id="my-template"> 
    <p>From template</p> 
    <div id="container"> 
     <span class="c" > click me! </span> 
    </div> 
</script> 

然後我設置一個事件來處理span元素上點擊。這工作正常。 後來2S後,一個新的跨度補充說:

<span class="c" > click me! (2)</span> 

由於我使用jQuery的「開啓」新跨越也應觸發click事件。這是沒有發生,我不得不重新定義點擊事件(這是6秒後完成)

回答

0

當你使用jQuery on你應該將事件添加到現有的節點,使用合適的選擇器,您需要的唯一更改就是更改此設置:

$('.c').on('click', function(){alert('clicked on span'); }); 

$(document.body).on('click', '.c', function(){alert('clicked on span'); }); 

這是你更新jsfiddle

1

我認爲你是用錯誤的方式使用KnockoutJS。 KnockoutJS可以處理事件。請檢查更新的小提琴。 http://jsfiddle.net/gp3Ef/5/

修改模板<span data-bind="click:onclick" class="c" > click me! </span>

和您的視圖模型

function MyViewModel() { 
    this.name = ko.observable("hello"); 
    this.onclick=function(){ 
     alert('clicked on me'); 
    } 
} 

修改了小提琴與完整功能