如何让event.srcElement在Firefox中运行,这是什么意思?

时间:2011-03-14 16:47:31

标签: javascript firefox cross-browser

在我公司的网站上有一个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 个答案:

答案 0 :(得分:171)

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

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

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

另请查看quirksmode.org - Event properties以获取更多跨浏览器信息。


关于它正在做什么的问题:

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

重要吗?我们不能说因为我们不知道...code..正在做什么。

答案 1 :(得分:5)

在IE中,事件对象已在窗口对象中可用;在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 -->
};

答案 2 :(得分:0)

尝试如下快速修复:

包含在代码中:

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

并更改

event.srcElement.XXXXX to target.XXXXX

这解决了Firefox的问题。