1
var elms = $('.selector', list);
elms.off();
elms.on('vclick', function(event, ui) {
        event.preventDefault();
        var elm = $(this);
        customEventHandler(elm, elm.attr("id"));
});

如果我将点击事件绑定$('.selector', list).on('click',...)到列表中的元素,它工作正常。

如果我在列表中添加元素.append()并再次调用,$('.selector', list).on('click',...)则不会触发点击。即使我使用.off()before 删除旧事件。

有什么想法或建议吗?

4

3 回答 3

5

试试这种方式: -Fiddle

$('.container').on('click', '.selector', function(event, ui) {
        event.preventDefault();
        var elm = $(this);
        alert(elm.index());
});

您可以使用方法来实现这一点delegated events

委托事件的优点是它们可以处理来自以后添加到文档的后代元素的事件。通过选择在附加委托事件处理程序时保证存在的元素,您可以使用委托事件来避免频繁附加和删除事件处理程序的需要。例如,该元素可以是模型-视图-控制器设计中视图的容器元素,或者如果事件处理程序想要监视文档中的所有冒泡事件,则可以是文档。在加载任何其他 HTML 之前,文档元素在文档的头部是可用的,因此在此处附加事件是安全的,而无需等待文档准备好。

于 2013-04-21T18:33:50.280 回答
1

终于找到问题了,只好在调用list.trigger("create");后绑定事件 而不是以前,也许这对任何人都有帮助......

于 2013-04-21T19:30:20.653 回答
0

替换c.onclick为“点击”。使用正确的格式。

$('.container').on('click', '.selector', function(event, ui) {
    event.preventDefault();
    var elm = $(this);
    alert(elm.index());
});
于 2013-04-21T18:34:42.750 回答