JavaScript跨浏览器脚本帮助
我有一个小功能,我只用数字输入。 它在IE中很好用,但我无法在FireFox或Chrome中使用它。 我将这个js文件加载到我的HTML页面的脚本标记中。
var numberOnly = function(evt) {
var theEvent = evt || window.event;
var key = theEvent.keyCode || theEvent.which;
key = String.fromCharCode( key );
var regex = /[0-9]|./;
if( !regex.test(key) ) {
theEvent.returnValue = false;
}
};
var wireElemToEvent = function(elemId, event, func){
var elem = document.getElementById(elemId);
if (typeof window.event !== 'undefined') {
elem.attachEvent("on" + event, func);
} else {
elem.addEventListener(event, func, true);
}
};
var wireEvents = function(){
wireElemToEvent("tbxQuantity", "keypress", numberOnly);
wireElemToEvent("tbxPhone", "keypress", numberOnly);
wireElemToEvent("tbxZip", "keypress", numberOnly);
};
window.onload = wireEvents;
Chrome告诉我
file:/// C:/Documents%20and%20Settings/xxx/Desktop/numbersonly/res/js/numbersonly.js:17Uncaught TypeError:Object#没有方法'attachEvent'
任何想法我做错了什么?
感谢您的帮助,〜克
在wireElemToEvent
您可能想要在初始化后检查elem
是否为空。 此外,最好检查elem.attachEvent
和elem.addEventListener
的存在性,而不是定义是否定义window.event
。
这里是我用来附加跨浏览器事件的功能:
function eventListen( t, fn, o ) {
o = o || window;
var e = t+fn;
if ( o.attachEvent ) {
o['e'+e] = fn;
o[e] = function(){
o['e'+e]( window.event );
};
o.attachEvent( 'on'+t, o[e] );
}else{
o.addEventListener( t, fn, false );
}
}
并使用它:
eventListen('message', function(e){
var msg = JSON.parse(e.data);
...
});
我遇到了同样的问题,因为我是新手,所以一直在寻找解决方案。 显然(typeof window.event!=='undefined')不会阻止Safari / Chrome进入if语句。 所以它实际上初始化了attachEvent并且不知道该如何处理它。
解:
var wireElemToEvent = function(elemId, event, func){
var elem = document.getElementById(elemId);
if (elem.attachEvent) {
elem.attachEvent("on" + event, func);
}
else { // if (elem.addEventListener) interchangeably
elem.addEventListener(event, func, true);
}
};
链接地址: http://www.djcxy.com/p/74149.html