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 Dev Tools でイベント リスナーを確認できます: http://screencloud.net/v/bV5Vbodyですのでオンになっていると思います.live()

使ってみたところ.bind()、うまくいきました。bodyイベント リスナーが変更され、a.link_listハンドラーが本来の機能を実行しますが、(文書化されているように、私はテストしませんでした) 新しく作成されたリンクに対してではありません。

メソッドのバグを報告しました.live()が、何か間違っている可能性があります。

また、gwtquery なしでそれを行う方法がわかりません。GWT には、クラスごとに要素を選択する方法も、新しい要素にリスナーを継続的に追加する方法もないようです。

4

1 に答える 1

0

何か間違ったことをしているようですが、確認するにはさらにコードが必要です。onModuleLoadこの間違った動作を示す完全なコードを送っていただけますか?

Chrome と FF の両方で、gquery を使用liveして新しい 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 に答える