简体   繁体   English

触发事件 Javascript IE

[英]Trigger Event Javascript IE

I got a simple problem and can't get it working: I'm trying to trigger an event in IE 7. To do this, I tried following:我遇到了一个简单的问题,无法正常工作:我试图在 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);
        }
    }
}

However, this doesn't work.但是,这不起作用。 The event isn't triggered in IE 7. Jquery trigger will work in IE 7, however, I can't use it, because it's creating a memory leak in my Java application (approx 400MB memory leak) and the script is dying because of this.该事件不会在 IE 7 中触发。Jquery 触发器将在 IE 7 中工作,但是,我不能使用它,因为它在我的 Java 应用程序中创建了内存泄漏(大约 400MB 内存泄漏)并且脚本因为这个。

What I've tried is a simple login with Javascript like that ( http://accounts.google.com/ ):我尝试过的是使用 Javascript 进行简单的登录( http://accounts.google.com/ ):

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

Both fields ("Email" and "Passwd") are getting filled, but the form isn't submitted.两个字段(“电子邮件”和“密码”)都已填写完毕,但未提交表单。 As an alternative I tried using the "onsubmit" event.作为替代,我尝试使用“onsubmit”事件。 The last 2 lines can be changed to:最后两行可以改为:

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

Once more: jQuery and any other big framework aren't useable!再说一遍:jQuery 和任何其他大型框架都无法使用!

You can't just "fire" an event like that in older IE.您不能在旧版 IE 中“触发”这样的事件。 You have to tell the browser what you're trying to trigger, not only the type.您必须告诉浏览器您要触发什么,而不仅仅是类型。 The point is that you can change the property values of the object before firing it.关键是您可以在触发之前更改对象的属性值。 Try this:尝试这个:

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

Also, I'd suggest to investigate on the causes of your alleged memory leak.另外,我建议调查您所谓的内存泄漏的原因。

(By the way, Javascript != Java.) (顺便说一下,Javascript != Java。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM