0

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

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

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

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

我像这样定义了处理程序(就像gwtquery 示例一样):

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

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

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

我为该方法提交了一个错误.live(),但也许我做错了什么。

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

4

1 回答 1

0

看来你做错了什么,但我需要更多的代码来确定。您能否发送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;
  }
}
于 2013-02-07T13:03:24.517 回答