如何让 event.srcElement 在 Firefox 中工作,它是什么意思?

IT技术 javascript firefox cross-browser
2021-02-01 19:25:09

我公司网站上有一个 if 语句,使一个网页与 firefox 不兼容

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

我已经注释掉了 if 语句条件,现在它可以与 forefox 一起使用。我的问题是,什么是 event.srcElement.getAttribute("onclick"),它是否重要,是否会在将来引起问题。另外,有没有类似的东西我可以用它来替换条件,以便它在 Firefox 上工作?

编辑:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }
3个回答

srcElement是最初来自 IE 的专有财产。标准化的属性是target

var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}

还可以查看quirksmode.org - 事件属性以获取更多跨浏览器信息。


关于它在做什么的问题:

event.target/event.srcElement包含对event引发的元素的引用getAttribute('onclick') == null检查是否通过内联事件处理将单击事件处理程序分配给元素

这非常重要吗?我们不能说,因为我们不知道...code..它在做什么。

我已经编辑了我的原始帖子以包含整个功能
2021-03-19 19:25:09
感谢 felix,但是我仍然收到一个 javascript 错误“事件未定义 [中断此错误] var target = window.event.target || event.srcElement;”知道为什么吗?
2021-03-20 19:25:09
@FelixKling 我认为现在不仅仅支持 FF Event.srcElement
2021-03-20 19:25:09
这应该更新。你是对的,@FelixKling。Event.srcElement 现在仅在 Firefox 中不受支持。developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
2021-03-30 19:25:09
@user521180:在所有其他浏览器中,该事件不可用,window但作为第一个参数传递给事件处理程序。所以你需要像function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. 或者如果您需要更多帮助,请发布包含此内容的代码。
2021-04-12 19:25:09

在 IE 中,事件对象已经在 window 对象中可用;在 Firefox 中,它在事件处理程序中作为参数传递。

例子

JavaScript:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

正如您注意到的,当我们在 html 中调用该函数时,我们添加了一个参数event,以防浏览器是 Firefox。

我在一篇文章中读到 IE 中的事件对象被调用,window.event而在 Firefox 中我们必须将其作为参数。

如果您需要将其附加到代码中:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};
如果您已经将另一个值传递给该函数怎么办?你只是添加“evt”作为第二个参数吗?Javascript 如何知道哪个参数是事件对象?它必须是第一个参数吗?还是最后一个?
2021-03-19 19:25:09
感谢您的编辑,我只是​​新来的 :) 再次感谢
2021-04-13 19:25:09

尝试快速修复如下:

包含在代码中:

let target = event.target || event.srcElement;

和改变

event.srcElement.XXXXX to target.XXXXX

这解决了 Firefox 的问题。