avr*_*vrx 2 javascript internet-explorer
我的代码在FF/Chrome/Everything中工作正常,除了IE(7/8都失败了,没有打算继续下去).由于限制,我不能使用jQuery并且硬编码Javascript.问题出在IE上,我得到"preventDefault为null或者不是对象".希望你们中的一个有答案,这里有相关的代码:
AddEvent方法:
function addEvent( obj, type, fn ) {
if ( obj.attachEvent ) {
obj['e'+type+fn] = fn;
obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
obj.attachEvent( 'on'+type, obj[type+fn] );
} else
obj.addEventListener( type, fn, false );
};
Run Code Online (Sandbox Code Playgroud)
事件处理程序抛出错误
function mousedown(e){
if(e.preventDefault){
e.preventDefault();
} else {
e.returnValue = false;
e.cancelBubble=true;
}
//Processing
};
Run Code Online (Sandbox Code Playgroud)
DOCTYPE和charset也都在调用HTML页面上设置.任何想法,将不胜感激.mousedown方法的if语句中抛出错误.
编辑:
由于抓取window.event确实"修复"了主要问题,我发现问题是代码的不同部分.基本上我在预先放置的元素的ontop上添加一个元素,然后将mousedown/mousemove事件注册到该div.在事件上触发事件时<div>,抛出错误的地方.
这可能是因为我将事件注册到2
rect = document.createElement('div');
rect.className='square';
rect.id='chooser_rectangle';
rect.style.left=initx+'px';
rect.style.top=inity+'px';
addEvent(rect,"mousemove",mousemove);
addEvent(rect,"mousedown",mousedown);
Run Code Online (Sandbox Code Playgroud)
在IE中,事件对象不作为事件处理程序的第一个参数传递.相反,它是一个全局变量:
function mousedown(e){
var evt = e || window.event; // IE compatibility
if(evt.preventDefault){
evt.preventDefault();
}else{
evt.returnValue = false;
evt.cancelBubble=true;
}
//Processing
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10295 次 |
| 最近记录: |