【问题标题】:Possible bug with GWT gwtquery .live() methodGWT gwtquery .live() 方法可能存在的错误
【发布时间】:2013-02-07 21:03:24
【问题描述】:

我正在尝试执行以下操作:

我想为某些链接添加一个特定的处理程序,由一个类表示。

$("a.link_list").live("click", new ListLinkHandler());

我需要.live() 而不是.bind(),因为会生成新的此类链接。 (我知道 jQuery 的 .live() 已被弃用,取而代之的是 .on(),但 gwt-query 还没有 .on()。)

我这样定义处理程序(就像the gwtquery example does):

public class ListLinkHandler extends Function {
    @Override
    public boolean f(Event e) { [...] }
}

但是,当我单击链接时,从不调用处理程序方法。 我可以在 Chrome 开发工具中看到事件监听器:http://screencloud.net/v/bV5V。我认为它在body 上,因为它是.live()

我尝试使用.bind(),效果很好。 body 事件侦听器在 a.link_list 中发生了变化,并且处理程序执行了它应该做的事情,但是(据记录,我没有测试)不是针对新创建的链接。

filed a bug.live() 方法,但也许我做错了什么。

另外,如果没有 gwtquery,我不知道该怎么做,GWT 似乎没有按类选择元素的方法,也没有不断将侦听器添加到新元素。

【问题讨论】:

    标签: gwt gwtquery


    【解决方案1】:

    您似乎做错了什么,但我需要更多代码才能确定。您能否发送完整的 onModuleLoad 代码来演示此错误行为?

    我使用live 编写了一个快速示例,它可以在 Chrome 和 FF 中使用 gquery 添加新的 gwt 小部件或 dom 元素时工作

    public void onModuleLoad() {
      $("a.link_list").live("click",  new ListLinkHandler());
    
      // Add a new link via gquery
      $("<a class='link_list' href=javascript:alert('href') onClick=alert('onClick')>Click </a>").appendTo(document);
    
      // Add a new link via gwt widgets
      Anchor a = new Anchor("click");
      a.setStyleName("link_list");
      a.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
          Window.alert("clickHandler");
        }
      });
      RootPanel.get().add(a);
    }
    
    public class ListLinkHandler extends Function {
      @Override
      public boolean f(Event e) {
        Window.alert("live");
        return true;
      }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多