Javascript GWT和JQuery之间的兼容性

Javascript GWT和JQuery之间的兼容性,javascript,jquery,gwt,Javascript,Jquery,Gwt,我创建了一个使用jquery.tools.min.js库的简单javascript 我的javascript如下所示: function testFunction() { $("img").click(function() { alert("Handler for .click() called."); }); console.log("what's up?"); } $(testFunction); 因此,当我在一个简单的HTML页面上尝试它时,当

我创建了一个使用
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()."); 
});

直接在Firebug的控制台中,事件被正确地附加到我的图像上


我还尝试在窗口的onload事件中调用
testFunction()
,但运气不好。

我假设您包括jQuery库本身,它是1.7或更高版本

如果在定义testFunction时DOM中不存在图像,请使用“on()


不用在Jquery上编写JSNI,您可以轻松地从gwtquery开始

实际上,您将从Jquery方法和GWT性能优化中获益

GwtQuery优于Jquery-

此外,如果这只是一个很好的滚动你试图实现你可以看看- 及
在JSNI代码中使用jQuery时,必须使用$wnd.jQuery或$wnd.$而不是$。另请参见谷歌群组。

您是否在相关图像中添加任何其他事件侦听器(gwt)

只能有一个点击处理程序,如果您在两个环境中都设置它们,您将遇到伤害

正如另一条评论中提到的,Gwt查询非常友好,可以委托回Gwt内部事件(因为它知道事件处理程序的语法)

您可能希望在图像上使用firebug对象检查。
尝试console.log($(“img”))并查看您得到了什么

在图像上查找_侦听器变量;这就是gwt的监听器。查看第200行,了解在gwt中接收事件时会发生什么

我不确定jquery是如何附加事件的,但我确实在mozilla规范中看到了这一点: 如果使用相同参数在同一EventTarget上注册了多个相同的EventListener,则会丢弃重复的实例。它们不会导致调用EventListener两次


严格来说,新添加的内容不会发生。确切原因。同意+1.:@kwicher:不幸的是,它没有改变任何事情。但奇怪的是,当我从firebug调用函数时,我让我的处理程序工作@如果有人出于任何原因提出另一种方法,我认为这不是正确的回报方式。@LPD我不会重复新的方法。接受新的方法…在我开始新的方法之前…我将尝试知道我在旧方法中犯了哪些错误…这样他们就不会再重复。”“为什么?是因为testFunction()?“。这些是我们想要知道的事实…@AbhijithNagaraja我想知道问题的确切原因…请阅读我之前的评论…”我没有重复使用新方法..接受新方法..在我开始使用新方法之前。。“…我想让SSR的一些KT知道确切的原因…你在这方面有什么问题???@SSR我在搜索解决方案时遇到了GWTQUERY,但它似乎没有jquery.tools的插件,(我需要jquery.tools中的
scrollable()
函数…)我的
testFunction
不在GWT中,这是一个单独的js文件。在我的JSNI代码(参见编辑部分)中,我确实使用了$wnd。很难说。您的场景对我来说很好(使用jquery-1.7.2.min.js)。也许你的图像的z索引是问题所在?您可以尝试使用$(“img”).mouseover代替。谢谢您的回答。这也不是一个z索引问题,我的img得到gwt的点击事件,所以它不会隐藏在另一个元素后面。将jquery与gwt混合在一起是一个痛苦的世界。感谢@manolo提供了很棒的Jquery端口,即GwtQuery,以缓解其中的一些问题。是的,我们也不要忘记Julian Dramix在GwtQuery方面的工作。另外,我相信最初的图书馆实际上是由现任GWT团队负责人Ray Cromwell建造的。自2010年以来,马诺洛和朱利安一直是恢复该项目并保持其更新和增长的关键。:)我还没能解决这个问题。见我的编辑2。使用jQuery的其他替代方法并不能回答我的问题(这只是一种变通方法)
testFunction();
function testFunction() {
$("img").on('click',function() {
    alert("Handler for .click() called.");
});

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