Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   textarea и alert (https://javascript.ru/forum/dom-window/41462-textarea-i-alert.html)

DmitriSpartak 15.09.2013 11:30

textarea и alert
 
<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="UTF-8"/>
		<title>
			JavaScript
		</title>
		<script type="text/javascript">
		var text;
			function addText()
			{
				var myText = document.getElementById("myText");
				if(myText)
					alert(myText.innerHTML);
			}
			addText();
		</script>
	</head>
	<body>
		<form name="myForm">
			<textarea id="myText" rows="20" cols="50"></textarea>
		</form>
	</body>
</html>

Как сделать чтобы, при вводе в текстовую область alert выводил её содержание при появлении в ней каждого символа (ввели сначало а, alert выводит а, вводим б, alert выводит аб и т.д.)

ruslan_mart 15.09.2013 12:12

<textarea id="myText" rows="20" cols="50" onkeypress="alert(this.value)"></textarea>

danik.js 15.09.2013 12:37

Цитата:

Сообщение от DmitriSpartak
выводил её содержание при появлении в ней каждого символа

А если текст вставят через copy/paste, алерт не нужен?

DmitriSpartak 15.09.2013 13:05

Мне интересен не столько вывод алертом, а как получать вносимые данные в текстовое поле динамически?

danik.js 15.09.2013 13:21

Что значит "динамически"? Свойство "value", тебе уже показали выше.

ruslan_mart 15.09.2013 13:54

document.getElementById('myText').onkeypress = function() {
   alert(this.value);
}


Можно ещё каждые 100ms проверять текстовое поле на наличие новых символов.

var txt = document.getElementById('myText'), val = '';

setInterval(function() {
   if(txt.value != val) {

      val = txt.value;
      alert(val);
      //....

   }
}, 100);

danik.js 15.09.2013 14:51

Цитата:

Сообщение от Ruslan_xDD
Можно ещё каждые 100ms проверять текстовое поле на наличие новых символов.

А это зачем? Есть же события!

DmitriSpartak 15.09.2013 14:57

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="UTF-8"/>
		<title>
			JavaScript
		</title>
		<script type="text/javascript">
			var text;
			window.onload = pageInt;
			var formText;
			function addText()
			{
				pageInt();
				text = prompt("Введите элемент","");
				if(formText)
				{
					formText = formText + text;
					alert(formText);
					myText.nodeValue += formText;
				}
				else
				{
					var t = document.createTextNode(text);
					myText.appendChild(t);
				}
			}
			function pageInt()
			{
			document.getElementById('myText').onkeypress = changeText;
			}
			function changeText()
			{
				formText = this.value;
			}
		</script>
	</head>
	<body>
		<form name="myForm">
			<textarea id="myText" rows="20" cols="50"></textarea>
		</form>
		<a href="javascript:addText()">Добавить текст</a>
	</body>
</html>

Проблема в 20 строчке, когда условие выше выполняется, слияние того что уже было в текстовом поле и того что ввели в промт вроде происходит (выводится алертом), однако содержание текстового поля при этом остается прежним, почему?

ruslan_mart 15.09.2013 15:04

danik.js, разве что oninput, но оно вроде как есть только в IE. Автору же нужно, чтобы скрипт срабатывал при любом изменении поля, например при вставке текста, при вставке текста с помощью JS и т.д. А так, конечно можно обойтись keypress'ом и click'ом.

danik.js 15.09.2013 15:55

Цитата:

Сообщение от Ruslan_xDD
danik.js, разве что oninput, но оно вроде как есть только в IE

Наоборот. Событие input во всех браузерах + propertychange в IE8: это покроет все случаи изменеия значения.
Например в IE есть кнопка очистки поля. Она генерирует только input событие. Удаление через контекстное меню тоже генерит только input.
Таким образом input+propertychange - единственный событийный способ отловить все изменения.
Еще есть IME (мобилки + иероглифичные языки)


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