【问题标题】:Can I trigger an event on a GWT widget using jQuery?我可以使用 jQuery 在 GWT 小部件上触发事件吗?
【发布时间】:2016-03-20 13:33:51
【问题描述】:

我正在尝试自动化使用 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;
}

【问题讨论】:

    标签: javascript jquery events gwt


    【解决方案1】:

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

    我猜事件处理程序的代码正在积极确定触发事件的确切元素,但没想到父 div 是那个触发源。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2014-02-20
      • 2011-08-17
      • 2011-05-03
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      相关资源
      最近更新 更多