2

jquery.tools.min.jsライブラリを使用する簡単な JavaScript を作成しました。

私のJavaScriptは次のようになります:

function testFunction() {
    $("img").click(function() {
        alert("Handler for .click() called.");
    });

    console.log("what's up?");
}

$(testFunction);

そのため、単純な HTML ページで試してみると、画像をクリックすると警告メッセージが表示されます。

GWT アプリケーションにまったく同じ JavaScript を追加しました。

アプリケーションが読み込まれるとconsole.logメッセージが表示されますが、アプリの画像をクリックしても何も起こりません。

どうしてこんなことに ?testFunction()動的に作成された画像に適用されないためですか?それとも、イベントが GWT によってオーバーライドされたためですか?

ありがとうございました。

編集

コンテンツを作成した後、関数を思い出してみました:

public native final void recallFunction() /*-{
    $wnd.console.log('again1');
    $wnd.testFunction();
    $wnd.console.log('again2');
}-*/;

ログ メッセージは表示されますが、クリック イベントが発生しません。

編集2:

私が実行すると:

$("img").click(function() { 
    alert("Handler for .click()."); 
});

また

testFunction();

Firebug のコンソールで直接、イベントが画像に正しく添付されます!!

testFunction()ウィンドウの onload イベントも呼び出してみましたが、うまくいきませんでした。

4

4 に答える 4

2

JSNI コードで jQuery を使用する場合、$ の代わりに $wnd.jQuery または $wnd.$ を使用する必要があります。Google グループのこの質問も参照してください。

于 2013-01-04T10:19:42.120 に答える
2

jQueryライブラリ自体が含まれていると仮定し、それは1.7以降です。

testFunction が定義された時点で画像が DOM に存在しない場合は、「on()」を使用します。

function testFunction() {
$("img").on('click',function() {
    alert("Handler for .click() called.");
});

console.log("what's up?");
}
于 2013-01-04T02:08:24.790 に答える
2

Jquery で JSNI を記述する代わりに、gwtquery http://code.google.com/p/gwtquery/で簡単に開始できます。

実際には、Jquery アプローチと GWT パフォーマンスの最適化の両方の恩恵を受けることができます。

Jquery に対する GwtQuery の利点 -

http://manolocarrasco.blogspot.in/2011/01/gwtquery-css-selectors-performance.html jQuery と GQuery のベンチマーク

また、達成しようとしているのが素敵なスクロールだけの場合は、 GWT CustomScrollPanelの例GWTのカスタムスクロールバーをご覧ください。

于 2013-01-04T03:35:14.577 に答える
1

問題の画像に (gwt で) 他のイベント リスナーを追加していますか?

オンクリック ハンドラーは 1 つしか存在できず、両方の環境でそれらを設定すると、問題が発生します。

別のコメントで述べたように、Gwt-Query は、gwt 内部イベントに委任するのに十分親切です (イベント ハンドラーの構文を知っているため)。

画像で firebug オブジェクト検査を使用することをお勧めします。
console.log($("img")) を試して、何が得られるかを確認してください。

画像で __listener 変数を探します。それが gwt リスナーです。DOMImplStandard ~line 200 を調べて、gwt でイベントをシンクするとどうなるかを確認してください。

jquery がどのようにイベントをアタッチするかはわかりませんが、mozilla の仕様で次のことを確認しました。 2回呼ばれる」

https://developer.mozilla.org/en/docs/DOM/element.addEventListener

于 2013-01-04T12:17:06.673 に答える