Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с onkeypress (https://javascript.ru/forum/misc/29764-problema-s-onkeypress.html)

Alamogoro 10.07.2012 15:11

Проблема с onkeypress
 
Привет всем.

Столкнулся в сайте с такой проблемой. Есть текстовое input поле, в которое вводится название материала. Вручную его отредактировать возможности нет, но нужно сделать так, чтобы при вводе каждой буквы (onkeypress) срабатывала функция loadCheck();

Как это осуществить с помощью скрипта, если известно id поля = "nwF1"
:help: :(

Deff 10.07.2012 15:36

на jQuery можно реализовать так
<script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script>

<input id="nwF1" type=text />


<script>
 var TxtLength=0;

$("#nwF1").bind('mouseout mousemove keydown keypress keyup',function(e){

    var ThisLength=$(this).val().length;
    var Delta=ThisLength-TxtLength;
    var DeltaQadr = Delta*Delta;
    if(DeltaQadr){
         TxtLength=ThisLength;alert("Строка изменилась")
         //loadCheck(); //Вызов чего-то
    }
})
</script>

Alamogoro 10.07.2012 15:42

Спасибо большое! Реализовал! )

Drimogemon 10.07.2012 16:11

<input type="text" id="nwF1">

<script>
document.querySelector('#nwF1').addEventListener( 'input', function(){
  alert( this.value )
});
</script>

bes 10.07.2012 17:54

<div id="div"></div>
<input id="inp">

<script>
window.onload = function () {
var div = document.getElementById('div');
var inp = document.getElementById('inp');

 inp.onkeyup = function () {
    div.innerHTML = inp.value;
  }
}
</script>

Deff 10.07.2012 18:07

bes,
вставка - удаление символов может быть и по правой кнопке мыши - что и в итоге приводит либо к длиннокоду на jQuery либо к EventListener

Drimogemon 10.07.2012 18:15

Deff,
вот правильный вариант)))))))
http://javascript.ru/forum/187769-post4.html

bes 10.07.2012 18:16

Deff, не совсем понял, о чём идёт речь в данной ситуации, но обработчик onkeyup позволяет сразу использовать всё введённое в input содержимое в отличие от обработчика onkeypress, который не может задействовать последний введённый символ.

Drimogemon 10.07.2012 18:17

bes,
если я вставлю правой кнопкой мышки текст из буфера событие не сработает.

Deff 10.07.2012 18:23

bes,
Вставь или удали часть слова по правой кнопки мыши в своём примере (или блокируй её у пользователя (мну без наезда, - просто приходицо собак есть из-за начальства

Deff 10.07.2012 18:26

Drimogemon,
В приципе в Варианте от bes - достаточно добавить onfocus
Cоврал - onfocus - недостаточно

Drimogemon 10.07.2012 18:51

ребят, вы что поехавшие? я же показал вам как делать о чем речь вообще?
какие фокусы какие кейпрессы!! че вы несете вообще? или "нубы советуют нубам"?

Deff 10.07.2012 18:59

Drimogemon,
Ну дык твой Вариант уже оценили - есть интерес свой Вариант довести... чо как будто сам себя не заешь, свой говнокод завсегда ближе к телу, не смотря на рубашки от Версаче

bes 10.07.2012 18:59

можно onchange или onblur, сработает при потере фокуса

Цитата:

Сообщение от Drimogemon
ребят, вы что поехавшие? я же показал вам как делать о чем речь вообще?
какие фокусы какие кейпрессы!! че вы несете вообще? или "нубы советуют нубам"?

В своём репертуаре:), ничего, что пока ещё есть IE<9

devote 10.07.2012 19:09

для этих целей и было введено событие oninput которое срабатывает при любом изменении поля ввода, будь то хоть мышь, будь то хоть клава.
A для старых браузеров таких как ИЕ можно юзать так:
<!DOCTYPE html>
<html>
	<head>
		<script>
			function onInput( elem, callback ) {
			    if ( elem.addEventListener ) {
					if ( "oninput" in elem ) {
				        // для HTML5 браузеров
				        elem.addEventListener( 'input', callback, false );
					} else {
				        // для HTML4 браузеров
				        elem.addEventListener( 'keyup', callback, false );
					}
			    } else if ( elem.attachEvent ) {
			        // для ИЕ < 9
			        elem.attachEvent( 'onkeyup', function() {
						callback.call( elem, window.event );
					});
			        elem.attachEvent( 'onpaste', function() {
						setTimeout( function() {
							callback.call( elem, window.event );
						}, 1);
					});
			    }
			}

			window.onload = function() {
				onInput( document.getElementById('nwF1'), function() {
					alert( this.value );
				});
			}
		</script>
	</head>
	<body>
		<input type="text" id="nwF1">
	</body>
</html>

bes 10.07.2012 19:23

devote, о том и речь, что проще: сделать кроссбраузерный addEventListener или навесить лишний обработчик, например, onchange или onblur (элемент фокус всё равно рано или поздно потеряет)

Deff 10.07.2012 19:39

:cray: У devote, зачетный код походу, своё так и не найду -
- нашел - при фокусе тупо setInterval

Drimogemon 10.07.2012 20:03

Цитата:

Сообщение от devote
для этих целей и было введено событие oninput которое срабатывает при любом изменении поля ввода, будь то хоть мышь, будь то хоть клава.

воот, бро пришел))


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