Показать сообщение отдельно
  #3 (permalink)  
Старый 28.01.2015, 19:54
Интересующийся
Отправить личное сообщение для klk.pma Посмотреть профиль Найти все сообщения от klk.pma
 
Регистрация: 30.06.2014
Сообщений: 23

Сообщение от danik.js Посмотреть сообщение
Примерчик запускаемый сделай.
Вот пример. Проблема в нем такая:
1 ВАРИАНТ: вводится любой символ, нажимается стрелка вниз, нажимаем enter и получаем пустое поле (а должно быть значение Петров);
2 ВАРИАНТ: если ввести символ, нажать 2 раза стрелку вниз и нажать enter в поле появится правильное значение (это правильная работа скрипта).

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="windows-1251">
  <style>
    .cla {width:450px}
  </style>
</head>
<body>
<form method="post" action="" name="addedit" class="cla">
  <div>
    Фамилия
    <div>
      <input id="addfam" type="text" name="fam" maxlength="50" value="" onkeyup="strlist(this.value);">
      <select id="listfam" name="listfam" size="5" style="width:450px; display:none;" onclick="inpstr(this.value);" onkeyup="inpstr13(this.value);"></select>
    </div>
  </div>
</form>

<script>
function strlist(famn) {
	if(event.keyCode==40) {
		var vsel=document.getElementById("listfam");
		vsel.focus();	//передача фокуса select
		if(vsel.selectedIndex==-1) vsel.selectedIndex=0;	//отметить первый в списке option
	} else {
		var result=['Петров', 'Сидоров', 'Петренко', 'Петрущенко', 'Иванов']; 	//сюда поставляется массив данных - заполнен для примера
		if(result && result!='') {
			document.getElementById("listfam").style.display='';
	    		var list=document.getElementById("listfam");
			list.length=0;
			for(var i=0;i<result.length;i++) list[i]=new Option(result[i]);
		} else document.getElementById("listfam").style.display='none';
	}
}
function inpstr(famn) {
	document.getElementById("addfam").value=famn;
	document.getElementById("listfam").style.display='none';
}
function inpstr13(famn) {
	window.captureEvents(Event.KEYPRESS);	//перехват события нажатия клавиши (для некоторых браузеров)
	window.onkeypress=pressed;		//событие при нажатии клавиш
	function pressed(e) {
		if(e.which==13) {		//если нажат enter
			e.preventDefault(); 	//отмена действия браузера по умолчанию (отправка формы)
		}
	}
	if(event.keyCode==13) {
		document.getElementById("addfam").value=famn;
		document.getElementById("listfam").style.display='none';
	}
}
</script>
</body>
</html>


Кстати, есть один нюанс: если сначала применить 2 ВАРИАНТ, а затем 1 ВАРИАНТ, то enter сработает правильно.

Можете подсказать в чем проблема?

Последний раз редактировалось klk.pma, 28.01.2015 в 20:17.
Ответить с цитированием