如何使 event.srcElement 在 Firefox 中工作,这是啥意思?
Posted
技术标签:
【中文标题】如何使 event.srcElement 在 Firefox 中工作,这是啥意思?【英文标题】:How can I make event.srcElement work in Firefox and what does it mean?如何使 event.srcElement 在 Firefox 中工作,这是什么意思? 【发布时间】:2011-07-15 04:06:27 【问题描述】:我公司的网站上有一个 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();
【问题讨论】:
Google 快速搜索“event.srcElement”得到this explanation and solution。 【参考方案1】: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..
在做什么。
【讨论】:
感谢 felix,但是我仍然收到一个 javascript 错误“事件未定义 [Break On This Error] var target = window.event.target || event.srcElement;”知道为什么吗? @user521180:在所有其他浏览器中,事件不能通过window
获得,而是作为第一个参数传递给事件处理程序。所以你需要像function yourHandler(event) event = event || window.event; var target = event.target || event.srcElement; ...
这样的东西。如果您需要更多帮助,或者发布其中包含的代码。
我已经编辑了我的原始帖子以包含整个功能
@FelixKling 我认为现在不仅仅支持 FF Event.srcElement
这应该更新。你是对的,@FelixKling。 Event.srcElement 现在仅在 Firefox 中不受支持。 developer.mozilla.org/en-US/docs/Web/API/Event/srcElement【参考方案2】:
在 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 -->
;
【讨论】:
感谢编辑 iam just new here :)thanxs 再次 如果你已经向这个函数传递了另一个值怎么办?你只是添加“evt”作为第二个参数吗?那么Javascript如何知道哪个参数是事件对象?它必须是第一个参数吗?还是最后一个?【参考方案3】:尝试如下快速修复:
包含在代码中:
let target = event.target || event.srcElement;
改变
event.srcElement.XXXXX to target.XXXXX
这解决了 Firefox 的问题。
【讨论】:
以上是关于如何使 event.srcElement 在 Firefox 中工作,这是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Event.target、Event.toElement 和 Event.srcElement 有啥区别?
捕获当前事件作用的对象event.target和event.srcElement