【发布时间】:2016-02-14 02:22:30
【问题描述】:
我正在尝试根据其 CSS ID 选择一个 div 节点,并更改 div 的文本,全部使用jQuery (2.2.0)。我的问题是 jQuery 选择似乎永远不会正常发生?
- jQuery 选择代码(下面,我使用 'jquery' fucntion 的 '$' 简写)在标准的 'document ready' 回调函数中,因此具有 CSS ID 的 div 被“假定”确保为在调用回调时在 DOM 中。该 js 代码及其标准 JSNI $wnd 语法类似于来自JSNI GWT jquery 的答案。
- 所有这些 jQuery js 都在 GWT JSNI 本机方法 (GWT 2.7.0) 中。
- 我的项目是GWTP (1.5.1) 项目。
- 所有观察结果都在不同的浏览器以及生产和开发模式下重现。
我将从这段代码中解释我是如何确认调用了 JSNI 原生方法 renderTree(),触发了“文档就绪”事件,并且带有 CSS ID 的 div 位于 DOM 中强>...
public native void renderTree()/*-{
$wnd.alert("renderTree");
$wnd.$($doc).ready(function() {
$wnd.alert("DOM ready!");
$wnd.$('#gramTree').text("text changed from JSNI jQuery");
});
}-*/;
- 我从 GWT 视图类的构造函数中调用该 renderTree()(更具体地说,它是 GWTP 扩展的 ViewWithUiHandlers)
- 当视图的页面加载时,“renderTree”会在警报窗口中弹出:这证明 renderTree() JSNI 方法在我打算调用时被调用,因为 renderTree 的第一行是 $wnd.alert。
- 紧接着,“DOM 准备就绪!”在警报窗口中弹出:这证明 'document ready' 事件已触发并且它的回调被调用。那是因为回调也是在 renderTree() JSNI 中注册到事件的,回调的第一行是 $wnd.alert
-
到目前为止,1.-3。一切都按预期发生... 但 '#gramTree' 的 jQuery $ 选择似乎从未发生过,因为具有该 ID 的 div 的文本从未更改为“从 JSNI jQuery 更改的文本”(其最初从 UiBinder 加载的文本为“从 UiBinder 初始化的文本”,并保持这种状态)。
- 我希望选择应该发生,因为它是“文档就绪”回调中的第二行,并且 3. 证明回调已被调用。
- ID 为 #gramTree 的 div 肯定在 DOM 中,因为我可以在浏览器检查器中看到它,并且我可以看到它的初始文本(“从 UiBinder 初始化的文本”)呈现。该初始文本应该从“文档就绪”回调中更改为“从 JSNI jQuery 更改的文本”。 div、它的 CSS ID 和它的初始文本在我的视图的 GWT UiBinder 中声明。
此时我可以通过在浏览器控制台上手动输入似乎无法通过回调 (
$('#gramTree').text("text changed from JSNI jQuery");) 工作的 jQuery 代码行来手动获取要更改的文本。同样,我也可以通过编码 renderTree() 以从页面上的按钮的单击事件中调用,并在此时手动单击该按钮,从而使其手动工作。
有什么想法吗?
根据有根据的猜测,给定 4.-5.,“文档准备就绪”事件或我如何处理它?
有什么想法可以进一步检查吗?
谢谢!
【问题讨论】:
-
正如在此接受的那样,@hahn 的答案中的 cmets 指出 GWTP 延迟加载意味着 DOM 可以在所有视图/演示者加载之前准备好。
标签: javascript jquery gwt jsni gwtp