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

时间:2015-12-14 22:23:22

标签: javascript jquery events gwt

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

然而,预期的行动并未发生。用鼠标单击该元素会弹出一个对话框,但使用jQuery不会执行任何操作。如果我使用jQuery添加一个新的单击处理程序,我会看到在两种情况下都执行了新处理程序,但原始处理程序只在" real"点击案例。

进入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;
}

1 个答案:

答案 0 :(得分:0)

本例中的解决方案是触发div中其中一个子元素的click事件。事件处理程序附加到围绕按钮的所有组件(标签,图标,边框等)的特定div。触发该父元素上的事件什么也没做。但是,如果我改为选择该子树中的一个叶节点(例如,标签本身),则触发click事件会根据需要调出对话框。

我想事件处理程序的代码是主动确定触发事件的确切元素,但不期望父div成为触发源。

model.GetDiagnotics

上面选择了触发事件的叶节点,即使父节点'div.GH1CUEEFLB.GH1CUEEMLB'持有事件处理程序。