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.attachEventelem.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

上一篇: javascript cross browser scripting help

下一篇: Regex to replace multiple spaces with a single space