1

有人可以看看这段代码,其中每个功能都能完美运行,但只有点击事件(最后是代码)

 $('ul#showUsernames li').on('click', function () {
    selectedUsername = $(this).text();
    if (selectedUsername != chatUsername) {
        chatTitleName.text("Chat between " + chatUsername + " and " + selectedUsername);
    }
 });

我在这里使用过.clickbind('click',function它们也没有工作。

我在on这里使用是因为我通过 jQuery动态li生成元素。

我不确定我在我的项目中使用 SignalR 是否重要。

请帮忙。

4

4 回答 4

5

使用事件委托on()

$('#showUsernames').on('click', 'li', function () {
   ...

这也适用于动态插入的列表项,并且性能更高(因为您在元素上附加了一个事件处理程序ul而不是n 个处理程序。li

作为旁注,只需使用$('#showUsernames')而不是$('ul#showUsernames')因为它更快(它就像一个直getElementById

于 2013-01-04T12:57:36.917 回答
2

使用on()

$('ul#showUsernames').on('click', 'li', function () {
于 2013-01-04T12:58:44.430 回答
0

你可以使用Jquery Live

$('li ul#showUsernames').live('click',function () {

也可以在 live 上使用(感谢@Mr_Green)

$('ul#showUsernames').on('click', 'li', function () {
于 2013-01-04T13:01:46.573 回答
0

采用live()

例子:

$(".button").live("click", function() {
});

确保也调用die(),如下所示:

$(".button").die();

die() 将阻止您的事件多次触发。如果您的内容被多次异步加载而没有同步重新加载整个页面,则会发生这种情况。这是因为旧的处理程序保留在浏览器内存中,并且它们也会被触发(简单解释)。

希望能帮助到你。

于 2013-01-04T13:01:55.563 回答