本来event.target用得好好的,结果IE不支持,只有一个event.srcElement.
但是这两者只有区别的,target的话可以准确定位到事件触发的元素,顾名思义是目标嘛。
而srcElement有时却不尽人意,比方说有些情况是TABLE注册了事件,然后当事件触发时再用event对象来获取触发事件的Element,获取Element后再做逻辑判断来调用其他业务操作。
在这种比较复杂的情况之下往往很容易出现Element混淆的情况(指srcElement),拿到的不是目标事件的对象,而是注册事件的TABLE。如果是自己写的JavaScript还好,但如果不是的话,往往比较麻烦了,因为改动越多,就越有可能产生BUG。
无奈之下只好看看有没有办法解决IE下的这个问题。
想到的解决办法有两个。
1、用坐标解决,即判断目标元素的坐标范围和事件的鼠标坐标进行匹配。
2、在目标元素上添加onclick事件。
首先试了下第二种方法,结果也是为未能解决,原因是原来代码的业务问题,事件太多被其他事件覆盖或者混淆之类。所以只好跑回直接直观的第一种方法之上,虽然个人不太喜欢,因为比较土,但也没办法了。谁叫IE也是那么土。
具体代码如下:
var isClickEL = function(el){
if(!isIE()||!el)return false;
var coords = getCoords(el);
var elTop = coords.top;
var elBottom = 0;
var elLeft = coords.left;
var elRight = 0;
var elHeight = el.offsetHeight;
var elWidth = el.offsetWidth;
elBottom = elTop + elHeight;
elRight = elLeft + elWidth;
var ev = window.event;
if(!ev)return false;
var mouseX = ev.clientX;
var mouseY = ev.clientY;
var isInTheWidth = (mouseX>=elLeft && mouseX<=elRight);
var isInTheHeight = (mouseY>=elTop && mouseY<=elBottom);
return (isInTheWidth && isInTheHeight);
}
var getCoords = function(el){
var box = el.getBoundingClientRect(),
isQuirk = (document.documentMode) ? (document.documentMode==5) ? true : false : ((document.compatMode=="CSS1Compat") ? false : true),
doc = el.ownerDocument,
body = doc.body,
html = doc.documentElement,
clientTop = html.clientTop || body.clientTop || 0,
clientLeft = html.clientLeft || body.clientLeft || 0,
top = box.top + (self.pageYOffset || !isQuirk && html.scrollTop || body.scrollTop ) - clientTop,
left = box.left + (self.pageXOffset || !isQuirk && html.scrollLeft || body.scrollLeft) - clientLeft;
return { top: top, left: left };
};
getCoords方法是网上看到的,觉得还不错。而在坐标方面没有太精确,例如边框大小像素之类的,因为也不需要太精确。
分享到:
相关推荐
这种情况下,我们就需要用到判断事件是否发生在某组件中的JS函数。以下将详细介绍如何实现这一功能。 首先,我们需要获取浏览器信息,因为不同的浏览器处理事件的方式可能有所不同。在提供的代码中,创建了一个名为...
这种方法利用了浏览器的`event.clientX`和`event.clientY`属性来获取鼠标当前的屏幕坐标,然后遍历页面上的所有子元素,判断鼠标坐标是否在每个元素的边界范围内。以下是一个实现示例: ```javascript function ...
通过这个过程,用户可以点击并拖动页面上的某个元素,并在释放鼠标时显示关于该元素的一些属性信息。这种交互方式常见于桌面应用程序(如WinForms),但在网页环境中同样具有实用价值,尤其是在提高用户体验方面。 ...
可以使用`event.srcElement.firstChild`或`event.srcElement.lastChild`来获取触发事件元素的第一个或最后一个子元素。此外,还可以使用`event.srcElement.children[i]`或`event.srcElement.childNodes[i]`来访问...
我们可以在一个父元素上设置事件监听器,根据事件的目标元素(event.target)来判断是哪个子元素触发了事件,从而减少事件监听器的数量并提高性能。 总的来说,JavaScript中的事件处理是前端开发的一个基础知识点,...
在本文中,我们将探讨如何在MFC(Microsoft Foundation Classes)框架下使用VC++实现WebBrowser控件,以及如何处理鼠标点击事件和获取超链接。 首先,创建一个基于对话框的MFC应用程序,然后将WebBrowser控件添加到...
例如,当你想要页面中所有输入框对点击事件做出响应时,不需要为每个输入框单独绑定事件,而是可以直接在body上绑定,然后在事件处理函数中通过event.srcElement.tagName来判断用户点击的是否是你想要的元素。...
在Vue中处理点击事件时,我们常常需要获取被点击的DOM元素或者事件对象,以进行进一步的操作或数据处理。 在上述提供的内容中,我们可以了解到如何在v-on:click事件处理器中获取当前的DOM元素。关键点在于传递$...
4. 事件委托的应用:在表格元素上直接绑定事件监听器,并利用事件冒泡原理处理其子元素的事件。这种方法可以减少事件监听器的数量,提高程序的性能和可维护性。 5. 兼容性问题:文档中特别提到所给代码“仅IE有效”...
这种方式利用了事件冒泡机制,当子元素上的事件发生时,会冒泡到父元素,因此可以在父元素上处理这些事件。 #### 六、高级Event对象 除了基本的`Event`对象外,还有几个扩展的Event对象,如`UIEvent`、`MouseEvent`...
event对象中包含多个属性,其中event.srcElement和event.target是两个用来获取触发事件元素的属性。在不同的浏览器中,这两个属性的支持情况是有所差异的。例如,在IE浏览器中,事件对象包含srcElement属性,而在...
只要在外层上写一个 然后检查event.srcElement.tagName或其他属性是不是你想要的来决定是否响应事件就可以了.不过好像event.srcElement在ff里不起作用 比如 span div event对象指当前触发的事件对象, window.event...
在JavaScript中,事件是用户或浏览器对网页进行操作时触发的特定动作,比如点击按钮、鼠标移动等。本文将详细介绍JavaScript事件,包括异步事件处理、事件阶段以及事件对象。 1. 异步事件处理 JavaScript不支持多...
在Web开发中,鼠标事件是非常常见且重要的交互方式之一。合理地使用鼠标事件能够极大地提升用户体验,并为用户提供更丰富的交互功能。本文将详细介绍如何在JavaScript中实现鼠标事件的抓取,并提供一段示例代码进行...
【事件(event)】在Web开发中,事件是用户与网页交互的关键部分,它允许JavaScript响应用户的操作,如点击按钮、滚动页面或者填写表单。HTML DOM Event对象是JavaScript处理事件的核心,它代表了事件的状态,包括事件...
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event....
此外,`event.srcElement`还可以用于获取触发事件元素的各种属性,如ID、标签名、类型、值、名称和类名等。下面的示例展示了如何获取这些属性: ```javascript function Get_srcElement() { var srcElement = ""; ...
在本文中,我们将探讨如何使用 JavaScript 获取鼠标在页面上的位置以及触发事件的对象。 首先,让我们关注如何获取鼠标的位置。JavaScript 提供了 `event` 对象来处理各种用户事件,包括鼠标移动。在以下的代码片段...