Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Правильно назначить функцию-обработчик. (https://javascript.ru/forum/events/55510-pravilno-naznachit-funkciyu-obrabotchik.html)

Ramundo 01.05.2015 12:56

Правильно назначить функцию-обработчик.
 
Как назначить для этого INPUT:
<INPUT type="text" id = "up"  >

вот эту функцию?
function filter_input(e, regexp) {
	alert (e);
  	 e= e || window.event;

	 var target=e.target || e.srcElement;
    
    var code =  e.charCode || e.keyCode;
    if (code<32 ||  e.ctrlKey || e.altKey) return;

    var text=String.fromCharCode(code);
    if (!regexp.test(text))
	{
		if (e.preventDefault) e.preventDefault();
		if (e.returnValue) e.returnValue = false;
		return false; 
	};
  
 return true;
}


Пробовал в FF так:
if (document.getElementById("up").addEventListener)
	document.getElementById("up").addEventListener("keypress", filter_input(event, /\d/), false);

Так:
window.onload = function() {
document.getElementById("up").onkeypress = function( ){filter_input(event, /\d/);};
}

но в обои случаях передача event первым аргументом вызывает ошибку.
Зато вот так все работает отлично:
<INPUT type="text" id = "up"   onkeypress="return filter_input(event,/\d/)" >

С чем это связано?

рони 01.05.2015 13:36

Ramundo,
<INPUT type="text" id = "up"  >
<script>
 function filter_input(e, regexp) {
   //	alert (e);
  	 e= e || window.event;

	 var target=e.target || e.srcElement;

    var code =  e.charCode || e.keyCode;
    if (code<32 ||  e.ctrlKey || e.altKey) return;

    var text=String.fromCharCode(code);
    if (!regexp.test(text))
	{
		if (e.preventDefault) e.preventDefault();
		if (e.returnValue) e.returnValue = false;
		return false;
	};

 return true;
}
document.getElementById("up").addEventListener("keypress", function(event){return filter_input(event, /\d/)}, false);
</script>

Ramundo 01.05.2015 14:07

Спасибо! ########
 
Только блин "Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его рони."(


Часовой пояс GMT +3, время: 03:18.