代码之家  ›  专栏  ›  技术社区  ›  Pierre Gardin

如何在给定类的所有HTML元素上使用extjs触发事件

  •  2
  • Pierre Gardin  · 技术社区  · 16 年前

    我想用鼠标模拟单击给定类的所有元素(“x-grid3-col-value”)。我并没有用extjs来实现这一点,因为“fireevent”函数只适用于extjs组件。我该怎么办?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Swar    16 年前

    您将通过以下方式获得该类的所有项:

    var items = Ext.query('.x-grid3-col-value');
    

    它将为您提供所有项的数组。然后,您可以对每个项目进行排序,并在每个项目上放置一个处理程序:

        Ext.each(items, function (item) {
            item = Ext.get(item);
    
            item.on('click', function () {  
                //'click' or 'dblclick' or 'mouseover'
                //console.log(item);
                //Do whatever you want
            }, this);
        }, this);
    
        2
  •  1
  •   Pierre Gardin    16 年前

    我用过这段代码,很难看,但很有用。

    function getElementsByClassName(classname, node) {
        if (!node) {
            node = document.getElementsByTagName('body')[0];
        }
        var a = [], re = new RegExp('\\b' + classname + '\\b');
        els = node.getElementsByTagName('*');
        for ( var i = 0, j = els.length; i < j; i++) {
            if (re.test(els[i].className)) {
                a.push(els[i]);
            }
        }
        return a;
    }
    
    HTMLElement.prototype.click = function() {
        var evt = this.ownerDocument.createEvent('MouseEvents');
        evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1,
                0, 0, 0, 0, false, false, false, false, 0, null);
        this.dispatchEvent(evt);
    }
    
    var elts = getElementsByClassName("x-grid3-col-value", window.innerHTML);
    var i = 0;
    
    while (i < elts.length) {
        var elt = elts[i];
        elt.click();
        i++;
    }