Справка по кросс-браузерному JavaScript - PullRequest
0 голосов
/ 02 февраля 2010

У меня есть крошечная функция, которую я использую, чтобы разрешить только числовой ввод.Он отлично работает в 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% 20 и% 20Settings / xxx / Desktop/numbersonly/res/js/numbersonly.js:17Uncaught TypeError: Object # не имеет метода 'attachEvent'

Есть идеи, что я делаю неправильно?

Спасибо за любую помощь, ~ ck

Ответы [ 4 ]

2 голосов
/ 02 февраля 2010

In wireElemToEvent Вы можете проверить, что elem не равно нулю после его инициализации. Кроме того, было бы лучше проверить наличие elem.attachEvent и elem.addEventListener, а не определено ли window.event.

1 голос
/ 14 июня 2011

У меня была такая же проблема, и, поскольку я новичок, целый день искал решение. Очевидно (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);
}
};
1 голос
/ 02 февраля 2010

Вот функция, которую я использую для прикрепления событий в браузере:

 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);
    ...
});
0 голосов
/ 02 февраля 2010

Хороший способ облегчить кросс-браузерный сценарий - использовать jQuery .Кроме того, нет причин изобретать велосипед.Почему бы не попробовать этот плагин jQuery: jQuery »числовой

...