Сообщение от 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 сработает правильно.
Можете подсказать в чем проблема?