- 浏览: 89184 次
文章分类
最新评论
问题一:在IE中event作为window对象的一个属性可以直接使用,但是在Firefox中却使用了W3C的模型,它是通过传参的方法来传播事件的,也就是说你需要为你的函数提供一个事件响应的接口,也就是在执行引用了event这个属性的方法时候,这个方法要传一个参数进去。
解决方案:
第一种 显式传输event对象。
第二种 使用自定义的函数生成对象。
function getEvent() //同时兼容ie和ff的写法
{
if(document.all) return window.event;
func=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0)
{
if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
{
return arg0;
}
}
func=func.caller;
}
return null;
}
这样,使用var evt = getEvent(); 就可以生成一个evt对象,替代之前使用的event即可。
问题二:
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.
event.srcElement从字面上可以看出来有以下关键字:事件,源 他的意思就是:当前事件的源,
我们可以调用他的各种属性 就像:document.getElementById("")这样的功能,
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即:
firefox 下的 event.target = IE 下的 event.srcElement
解决方法:
第一种 使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.
第二种 elm = event.srcElement || event.target;
问题三 FF中没有event.offsetX
解决方案:判断offsetX属性是否为未定义("undefine"),调用自定义函数getoffset
function (evt)
{
var target = evt.target;
if (target.offsetLeft == undefined)
{
target = target.parentNode;
}
var pageCoord = (target);
var eventCoord =
{
x: window.pageXOffset + evt.clientX,
y: window.pageYOffset + evt.clientY
};
var offset =
{
offsetX: eventCoord.x - pageCoord.x,
offsetY: eventCoord.y - pageCoord.y
};
return offset;
}
function (element)
{
var coord = {x: 0, y: 0};
while (element)
{
coord.x += element.offsetLeft;
coord.y += element.offsetTop;
element = element.offsetParent;
}
return coord;
}
程序内加上判断:
if (evt.offsetX == undefined) //Firefox
{
var evtOffsets = getOffset(evt);
n_offsetX=evtOffsets.offsetX;
n_offsetY=evtOffsets.offsetY;
}
else
{
n_offsetX=evt.offsetX;
n_offsetY=evt.offsetY;
}
即可。
FF与IE还有很多不兼容的地方,最佳方案是使用第三方的JS库。
转自http://hi.baidu.com/%CB%AE%C9%BD%B7%E5/blog/item/1a0ed617fefeebf0f6039e85.html
这里也有第二种解决方式
一、在函数中传递event参数
在函数中传递event参数,这样我们就可以兼容IE和FF的event的获取了,如下面的函数:
function _test(evt)
{
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
alert(src.value); // 打印该对象的value属性
}
那么我们在使用的时候就应该这样:
<input type='button' value='click me' onclick='_test(event)' />
二、在函数调用中不传递event对象
虽然在函数中没有传递参数,这个在IE下没有任何影响,因为window.event是全局对象,在什么地方都可以直接调用的,而在FF下就不行了。所以我们这里要使用另外一种方式来获取了,如下:
function _test2()
{
var evt = window.event || arguments.callee.caller.arguments[0]; // 获取event对象
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
alert(src.value); // 打印该对象的value属性
}
那么,我们在使用的时候就可以想普通的函数调用一样,直接输入函数名称即可,如下:
<input type='button' value='click me2' onclick='_test2()' />
可见,相比两种方法,第二种方法更具有普遍和通用性,因为可以不用传递参数了,这样在使用的时候也更加的方便;第一种方式就更加直接明了,呵呵,至于具体怎么用,还得看个人的了~~
解决方案:
第一种 显式传输event对象。
第二种 使用自定义的函数生成对象。
function getEvent() //同时兼容ie和ff的写法
{
if(document.all) return window.event;
func=getEvent.caller;
while(func!=null){
var arg0=func.arguments[0];
if(arg0)
{
if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
{
return arg0;
}
}
func=func.caller;
}
return null;
}
这样,使用var evt = getEvent(); 就可以生成一个evt对象,替代之前使用的event即可。
问题二:
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.
event.srcElement从字面上可以看出来有以下关键字:事件,源 他的意思就是:当前事件的源,
我们可以调用他的各种属性 就像:document.getElementById("")这样的功能,
IE下,event对象有srcElement属性,但是没有target属性;Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的,即:
firefox 下的 event.target = IE 下的 event.srcElement
解决方法:
第一种 使用obj(obj = event.srcElement ? event.srcElement : event.target;)来代替IE下的event.srcElement或者Firefox下的event.target.
第二种 elm = event.srcElement || event.target;
问题三 FF中没有event.offsetX
解决方案:判断offsetX属性是否为未定义("undefine"),调用自定义函数getoffset
function (evt)
{
var target = evt.target;
if (target.offsetLeft == undefined)
{
target = target.parentNode;
}
var pageCoord = (target);
var eventCoord =
{
x: window.pageXOffset + evt.clientX,
y: window.pageYOffset + evt.clientY
};
var offset =
{
offsetX: eventCoord.x - pageCoord.x,
offsetY: eventCoord.y - pageCoord.y
};
return offset;
}
function (element)
{
var coord = {x: 0, y: 0};
while (element)
{
coord.x += element.offsetLeft;
coord.y += element.offsetTop;
element = element.offsetParent;
}
return coord;
}
程序内加上判断:
if (evt.offsetX == undefined) //Firefox
{
var evtOffsets = getOffset(evt);
n_offsetX=evtOffsets.offsetX;
n_offsetY=evtOffsets.offsetY;
}
else
{
n_offsetX=evt.offsetX;
n_offsetY=evt.offsetY;
}
即可。
FF与IE还有很多不兼容的地方,最佳方案是使用第三方的JS库。
转自http://hi.baidu.com/%CB%AE%C9%BD%B7%E5/blog/item/1a0ed617fefeebf0f6039e85.html
这里也有第二种解决方式
一、在函数中传递event参数
在函数中传递event参数,这样我们就可以兼容IE和FF的event的获取了,如下面的函数:
function _test(evt)
{
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
alert(src.value); // 打印该对象的value属性
}
那么我们在使用的时候就应该这样:
<input type='button' value='click me' onclick='_test(event)' />
二、在函数调用中不传递event对象
虽然在函数中没有传递参数,这个在IE下没有任何影响,因为window.event是全局对象,在什么地方都可以直接调用的,而在FF下就不行了。所以我们这里要使用另外一种方式来获取了,如下:
function _test2()
{
var evt = window.event || arguments.callee.caller.arguments[0]; // 获取event对象
var src = evt.srcElement || evt.target; // 获取触发事件的源对象
alert(src.value); // 打印该对象的value属性
}
那么,我们在使用的时候就可以想普通的函数调用一样,直接输入函数名称即可,如下:
<input type='button' value='click me2' onclick='_test2()' />
可见,相比两种方法,第二种方法更具有普遍和通用性,因为可以不用传递参数了,这样在使用的时候也更加的方便;第一种方式就更加直接明了,呵呵,至于具体怎么用,还得看个人的了~~
发表评论
-
JavaScript高效图形编程学习笔记
2013-04-05 15:25 837第一章代码重用和优化 一、有关继承的一些笔记 1.在JS中,类 ... -
理解JS call apply
2012-11-06 14:35 895call([thisObj[,arg1[, arg2[, [, ... -
浅析JS全局变量与局部变量 执行环境 作用域链 JS解释器执行过程
2012-11-05 16:04 1459参考http://hi.baidu.com/cjry_ ... -
javascript encodeURI和encodeURIComponent的比较
2012-10-30 16:38 888encodeURI 和 encodeURIComponent都 ... -
JS跨域的理解
2012-10-30 15:08 922首先我们要理解什么是JS跨域的由来! 我是这样理解的,因为HT ... -
js事件捕获和事件冒泡
2012-10-28 10:48 974] Netscape 定义了事件捕获,先是最顶级的元素(doc ... -
jQuery对象包含的内容及两种扩展方式
2012-10-24 18:50 771jQuery对象包含的内容及 ... -
早绑定和晚绑定
2012-10-17 11:13 1036引用早绑定(early binding)是指在实例化对象之前定 ... -
AJAX和JSON的一些理解
2012-09-22 20:09 758正在学习JSON和AJAX,记录下自己的理解 AJAX 什么是 ... -
关于火狐浏览器页面无法获得焦点的学习笔记
2012-07-17 19:13 1072发现类似:window.setTimeout(function ... -
JS应用对于IE和Firefox的区别
2012-07-17 18:51 01.FireFox没有window.event而且没有srcE ... -
javascript中arguments、callee、caller用法学习笔记
2012-07-16 10:22 1028首先是caller和callee的区别。注意caller和ca ...
相关推荐
例如,在IE中,可以使用`event.clientX`和`event.clientY`,而在Firefox中,则需要使用`event.pageX`和`event.pageY`。为了统一处理,可以采用以下方法: ```javascript function test(event) { var event = event...
Firefox则需要通过函数参数传递event对象,例如`onmousemove=doMouseMove(event)`。 - 示例:`var event = event || window.event;` 2. **鼠标当前坐标**: - **鼠标位置(不考虑滚动条)**:IE使用event.x和...
- **removeNode** 和 **swapNode** 方法主要用于DOM操作,在IE中可用,但在Firefox和其他基于Webkit或Gecko引擎的浏览器中并不支持。 - 为了解决这一问题,可以通过自定义原型的方式,使Firefox等浏览器也能支持这些...
这就意味着在编写跨浏览器的事件处理代码时,需要考虑这种差异,确保在Firefox中正确获取事件对象。 在事件触发源方面,IE 使用 `srcElement` 属性来获取触发事件的元素,而Firefox使用 `target`。为了实现兼容性,...
在处理浏览器兼容性问题时,尤其是在处理事件监听器(如`onmousemove`)时,IE 和 Firefox 在事件对象的获取上存在明显差异。 - **IE**: 使用 `window.event` 获取当前触发事件的对象。 - **Firefox**: 通过传递给...
在网页开发过程中,HTML元素的渲染和交互在不同的浏览器间可能存在差异,尤其是Internet Explorer (IE)和Firefox (FF)之间。这些差异主要源于浏览器对HTML、CSS和JavaScript标准的实现不同。以下是一些常见的问题及...
值得注意的是,在Firefox中,target属性和srcElement的用法存在差异。 button属性描述了被按下的鼠标键。通常,1代表左键,2代表中键,4代表右键。如果同时按下多个键,则需要将相应的值相加。例如,3表示左键和...
IE(Internet Explorer)和Mozilla(包括Firefox)对JavaScript事件处理和事件对象的处理方式存在差异,这给开发者带来了额外的工作量。以下是一些关于IE和Mozilla中脚本兼容性的关键点: 1. **事件对象的访问**: ...
本文将深入探讨IE(Internet Explorer)和Mozilla(主要指Firefox)在处理`event`对象时的兼容性问题,这对于编写跨浏览器的JavaScript代码至关重要。 1. **event对象的使用** IE浏览器允许直接在事件处理函数中...
在本例中,代码的目标是使Firefox支持`insertAdjacentElement`这个IE特有的方法,以及一些与事件相关的属性,如`returnValue`、`cancelBubble`、`srcElement`、`fromElement`、`toElement`、`offsetX`和`offsetY`。...
- 解决方案:在处理函数中,使用`event.offsetX || event.layerX`和`event.offsetY || event.layerY`获取坐标。 4. **事件源元素** - IE使用`event.srcElement`,FF使用`event.target`。 - 解决方案:使用`obj =...
- **Firefox中的事件对象**:Firefox不支持全局的事件对象,而是仅在事件触发时生成一个局部的`event`对象。这意味着开发者必须在事件处理函数内部通过参数传递的方式来接收这个事件对象。 ##### 2. 事件对象的属性...
例如,`event.offsetX/Y`、`event.layerX/Y`、`event.x/y` 和 `event.pageX/pageY` 在某些情况下可能提供相同的信息,但它们在不同浏览器中的行为并不一致。在编写兼容性良好的 JavaScript 代码时,开发者通常需要...
通过兼容性处理,可以在IE4.01+、Firefox0.9+和Opera7.23+等多个版本的浏览器中正常工作。 ### 总结 本文档介绍了如何使用JavaScript来捕获鼠标的按键事件以及如何在不同浏览器环境下进行兼容性处理。通过这些基本...
- 在Firefox中,事件对象仅在事件发生时创建。 2. **事件对象的属性**: - `clientX`, `clientY`:相对于浏览器窗口的坐标。 - `screenX`, `screenY`:相对于屏幕的坐标。 - `offsetX`, `offsetY`:相对于触发...