2011-03-14 72 views
71

有关于我公司的网站的if语句,使一个网页不亲与Firefox如何让event.srcElement在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

快速谷歌搜索“event.srcElement”分离得到[这样的解释和解决方案(http://forums.mozillazine.org/ viewtopic.php?F = 25&T = 821675)。 – 2011-03-14 16:50:00

回答

151

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..在做什么。

+0

感谢您的费利克斯,但我仍然得到一个JavaScript错误“事件是不明确的 [打破这个错误] var target = window.event.target || event.srcElement;”任何想法为什么? – code511788465541441 2011-03-14 17:05:04

+1

@ user521180:在所有其他浏览器中,事件不能通过'window'获得,而是作为事件处理函数的第一个参数传递。所以你需要像'function yourHandler(event){event = event || window.event; var target = event.target || event.srcElement; ...}'。或者在需要更多帮助的地方发布代码。 – 2011-03-14 17:08:43

+0

我已经编辑了我的原始文章,包括整个功能 – code511788465541441 2011-03-14 17:17:04

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 --> 
}; 
+1

感谢编辑iam只是在这里新:)再次thanxs – Marwan 2011-03-15 13:43:07

+0

如果你已经传递了另一个值到这个函数呢?你只是添加“EVT”作为第二个参数?那么Javascript如何知道哪个参数是事件对象?它是否必须是第一个参数?或最后? – Vincent 2014-06-10 20:13:33