【问题标题】:jQuery .on Click second time not workingjQuery .on 点击​​第二次不起作用
【发布时间】:2013-04-21 18:23:10
【问题描述】:
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() 删除旧事件。

有什么想法或建议吗?

【问题讨论】:

  • 什么是 c.onclick?那是一个常量变量吗?我认为 .on() 函数的第一件事需要是一个映射到事件名称的字符串。就像“点击”一样。
  • 添加元素后是否刷新列表?
  • 是 list.trigger("create");绑定事件后...
  • $('.selector).listview('refresh') 未创建

标签: jquery jquery-mobile


【解决方案1】:

试试这个方法:- Fiddle

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

您可以使用delegated events 方法实现此目的。

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

【讨论】:

  • 这说明了原因,我会检查委托事件的方法!
  • 不,因为已经在使用 vclick,如果使用委托方法,则事件,追加和运行相同的绑定方法后没有事件触发。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 抱歉忘了说 c.onclick 是 JQM vclick 的一种常量。我编辑我的帖子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多