1

簡単な問題が発生し、動作しません。IE 7 でイベントをトリガーしようとしています。これを行うために、次のことを試しました。

if (typeof fireEvent != 'function') {
    function fireEvent(target, evt) {
        if (document.createEvent) {
            var clickEvent = document.createEvent("MouseEvents");
            clickEvent.initMouseEvent(evt, true, true, window,
                0, 0, 0, 0, 0, false, false, false, false, 0, null);
            return target.dispatchEvent(clickEvent);
        }
        else {
            return target.fireEvent("on" + evt);
        }
    }
}

ただし、これは機能しません。イベントは IE 7 ではトリガーされません。jquery トリガーは IE 7 で動作しますが、Java アプリケーションでメモリ リーク (約 400MB のメモリ リーク) が発生し、スクリプトが停止しているため、使用できません。これ。

私が試したのは、そのような Javascript を使用した単純なログインです ( http://accounts.google.com/ ):

document.getElementById('Email').value = "%s";
document.getElementById('Passwd').value = "%s";
var signIn = document.getElementsByName('signIn')[0];
fireEvent(signIn, "click");

両方のフィールド (「Email」と「Passwd」) は入力されていますが、フォームは送信されていません。別の方法として、「onsubmit」イベントを使用してみました。最後の 2 行は次のように変更できます。

var gaiaLoginForm = document.getElementById("gaia_loginform");
fireEvent(gaiaLoginForm, "submit");

繰り返しになりますが、jQuery やその他の大きなフレームワークは使用できません。

4

1 に答える 1

0

古い IE では、そのようなイベントを単に「起動」することはできません。タイプだけでなく、トリガーしようとしているものをブラウザーに伝える必要があります。ポイントは、オブジェクトを起動する前にオブジェクトのプロパティ値を変更できることです。これを試して:

var evtObj = document.createEventObject();
target.fireEvent("on" + evt, evtObj);

また、メモリリークの疑いの原因を調査することをお勧めします。

(ちなみに、Javascript != Java です。)

于 2012-08-11T09:21:15.080 に答える