3

ExtJs のアプリ ビルドでクリック、マウスオーバーなどのマウス イベントをシミュレートしようとしています。以下のコードを使用してクリックをシミュレートしています。

function triggerEvent(element, eventName)
{
    if (document.createEvent)
    {
        var evt = document.createEvent('MouseEvents');
        evt.initEvent(eventName, true, true);

        return element.dispatchEvent(evt);
    }
}

var btn = document.getElementById("loginButton");

triggerEvent(btn, "click");

これは chrome と Firefox では正常に動作しますが、IE9 と IE10 では動作しません。btn.fireEvent('onlclick') を使用すると、IE9 で正常に動作します (IE10 ではチェックされません)。document.createEvent は IE9 と IE10 でサポートされていますが、コードが機能しない理由がわかりません。

4

2 に答える 2

9

少し前にカスタムイベントで同じ問題が発生し、この別の質問にあるコードを使用して解決しました: ライブラリを使用しないIEのカスタムイベント

実際には、すべてのコードを使用する必要はありません。これらは、ブラウザーの互換性のためにラッパーとして使用する 3 つの関数です。

ただし、問題をより簡単に解決できる .click メソッドを使用することもお勧めします (少なくとも通常のクリックの場合) http://www.w3schools.com/jsref/met_html_click.asp

だからただする

document.getElementById("loginButton").click();

他の質問のsergey gospodaretsによるコードをここに貼り付けます。これは役立つ可能性があります。

    function triggerEvent(el,eventName){
        var event;
        if(document.createEvent){
            event = document.createEvent('HTMLEvents');
            event.initEvent(eventName,true,true);
        }else if(document.createEventObject){// IE < 9
            event = document.createEventObject();
            event.eventType = eventName;
        }
        event.eventName = eventName;
        if(el.dispatchEvent){
            el.dispatchEvent(event);
        }else if(el.fireEvent && htmlEvents['on'+eventName]){// IE < 9
            el.fireEvent('on'+event.eventType,event);// can trigger only real event (e.g. 'click')
        }else if(el[eventName]){
            el[eventName]();
        }else if(el['on'+eventName]){
            el['on'+eventName]();
        }
    }
    function addEvent(el,type,handler){
        if(el.addEventListener){
            el.addEventListener(type,handler,false);
        }else if(el.attachEvent && htmlEvents['on'+type]){// IE < 9
            el.attachEvent('on'+type,handler);
        }else{
            el['on'+type]=handler;
        }
    }
    function removeEvent(el,type,handler){
        if(el.removeventListener){
            el.removeEventListener(type,handler,false);
        }else if(el.detachEvent && htmlEvents['on'+type]){// IE < 9
            el.detachEvent('on'+type,handler);
        }else{
            el['on'+type]=null;
        }
    }

    var _body = document.body;
    var customEventFunction = function(){
        alert('triggered custom event');
    }
    // Subscribe
    addEvent(_body,'customEvent',customEventFunction);
    // Trigger
    triggerEvent(_body,'customEvent');
于 2013-08-21T17:57:24.167 に答える