Javascript 淘汰模板是';无法处理DOM事件

Javascript 淘汰模板是';无法处理DOM事件,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我正在使用敲除模板功能在我的页面中插入HTML模板。问题是,如果修改模板插入的DOM(例如添加span元素),则不会为新添加的元素触发先前配置的事件(例如单击) 考虑这个例子: 我的模板是: <script type="text/html" id="my-template"> <p>From template</p> <div id="container"> <span class="c" > clic

我正在使用敲除模板功能在我的页面中插入HTML模板。问题是,如果修改模板插入的DOM(例如添加span元素),则不会为新添加的元素触发先前配置的事件(例如单击)

考虑这个例子:

我的模板是:

<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>
点击我!(2)

由于我使用的是jquery的“on”,因此新的span还应该触发click事件。这没有发生,我必须重新定义点击事件(在6秒后完成)

我认为您使用KnockoutJS的方式是错误的。KnockoutJS可以处理事件。请检查更新的小提琴

修改了你的模板
点击我

你的视图模型呢

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

使用完整的功能修改了小提琴

当您在
上使用jQuery
时,您应该将事件添加到现有节点并使用适当的选择器,您需要的唯一更改是:

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

这是您的最新信息

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