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


80

我公司网站上有一个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();
        }
    }

2
在Google上快速搜索“ event.srcElement”就产生了这种解释和解决方案
在轨道进行的轻度比赛

Answers:


172

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检查是否通过内联事件处理将click事件处理程序分配给了元素。

那很重要么?我们不能说,因为我们不知道...code..它在做什么。


谢谢你的费利克斯,但是我仍然收到一个JavaScript错误“事件未定义[此错误失败] var target = window.event.target || event.srcElement;“任何想法为何?
code511788465541441 2011年

1
@ user521180:在所有其他浏览器中,该事件无法通过使用,window而是作为第一个参数传递给事件处理程序。所以你需要类似的东西function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}。如果需要更多帮助,也可以发布包含该代码的代码。
Felix Kling

我已经编辑了原始帖子,以包含整个功能
代码511788465541441,2011年

1
@FelixKling我想现在仅FF Event.srcElement
Alex Char

1
这应该被更新。你是对的,@ FelixKling。现在仅在Firefox中不支持Event.srcElement。developer.mozilla.org/zh-CN/docs/Web/API/Event/srcElement
SlimPDX

5

在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 -->
};

1
再次感谢您的编辑iam :) thanxs
Marwan

如果您已经向该函数传递了另一个值怎么办?您是否仅将“ evt”添加为第二个参数?然后,Javascript如何知道事件对象是哪个参数?它必须是第一个参数吗?还是最后一个?
文森特

0

请尝试快速修复,如下所示:

包含在代码中:

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

并改变

event.srcElement.XXXXX to target.XXXXX

这解决了Firefox的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.