javascript - 我可以使用 jQuery 在 GWT 小部件上触发事件吗?

标签 javascript jquery events gwt

我正在尝试自动化使用 GWT 构建的网站。我的自动化使用 jQuery 选择适当的元素,然后调用 jQuery click() 函数来触发单击事件。

但是,预期的操作并未发生。用鼠标单击该元素会弹出一个对话框,但使用 jQuery 不会执行任何操作。如果我使用 jQuery 添加新的单击处理程序,我会看到新的处理程序在两种情况下都执行,但原始处理程序仅在“真实”单击情况下执行。

进入 Javascript 代码,我看到处理堆栈深度的非常复杂的代码,这让我认为执行此自动化可能无法直接实现。

有人知道如何以编程方式在 GWT 生成的元素上触发事件吗?或者这应该正常工作,并且该网站使用独特的复杂代码?

编辑:我使用的代码非常简单:

var searchButton = jQuery('div.GH1CUEEFLB.GH1CUEEMLB:first');
if (searchButton && searchButton.length > 0) {
    searchButton.click();
}

单步执行代码表明它选择了正确的元素,并继续调用 click()。根据 Chrome 的调试器,该小部件的现有事件处理程序很复杂。单步执行这个过程会导致一个很难遵循的兔子洞:

function(){
    var stackIndex, returnTemp;
    $stack_0[stackIndex = ++$stackDepth_0] = null;
    try {
        returnTemp = entry0(($location_0[stackIndex] = '57' , jsFunction), this, arguments);
        $stackDepth_0 = stackIndex - 1;
        return returnTemp;
    }
    catch (e) {
        throw $location_0[stackIndex] = '63' , e;
    }
    $stackDepth_0 = stackIndex - 1;
}

最佳答案

本例中的解决方案是触发 div 内的子元素之一上的单击事件。事件处理程序附加到围绕按钮所有组件(标签、图标、边框等)的特定 div。触发该父元素上的事件没有执行任何操作。但是,如果我选择该子树中的叶节点之一(例如标签本身),则触发单击事件会根据需要弹出对话框。

我猜测事件处理程序的代码正在主动确定触发事件的确切元素,但并不期望父 div 成为该触发源。

var searchButton = jQuery('div.GH1CUEEJT:first');

上面选择了触发事件的叶节点,即使父节点“div.GH1CEEEFLB.GH1CEEEMLB”保存了事件处理程序。

关于javascript - 我可以使用 jQuery 在 GWT 小部件上触发事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277730/

相关文章:

javascript - 捕获滚轮事件以将向上/向下更改为向下/向上

html - 为什么 Chrome 的 img 元素的 onerror 事件只触发一次?

javascript - Chrome /IE : 'mousemove' event triggered every couple of seconds with no movement/scroll/etc

c# - 从基类调用事件

javascript - 对状态中的数组值进行计数时超出最大更新深度

jquery - 如果两个 div 相同,则删除其中之一

javascript - 获取包含 php 变量的 js 函数的按钮名称或值

javascript - 为什么我的窗口调整大小事件监听器不起作用?使用 Three.js 和 Vuetify.js

javascript - $scope.$apply() 创建新作用域的多个实例

javascript - 在 catch 子句 nightmarejs javascript 中截屏