Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Вёрстка веб-сайтов > input type="text'


Автор: armivl 7.9.2010, 09:34
Ситуация. На Web форме asp.net 2.0 имеем несколько текствых полей и несколько кнопок для выполнения действий вообще не связанных с текстовыми полями. При установке фокуса на текстовом поле и нажатии клавиши enter происходит потеря текстовым полем фокуса, активируется начальная кнопка на форме и происходит отправка страницы на сервер. При этом не обязательно, что начальная кнопка имеет тип submit. Т.е автоматически происходит тоже, если бы я с помощью клавишы tab перешел на активирующуюся автоматически кнопку и нажал клавишу enter.


Вопрос. Что можно сделать для того, чтобы при нажатии клавиши еnter из текстового поля фокус оставался бы на текстовом поле и активации кнопки не происходило.
Возможно ли это решить с помощью свойств DOM, либо CSS.

P.S Пробовал  со скриптами. вариант типа onkeydown="if(event.keyCode==13)return false;" работает в основых браузерах, кроме Mozilla. Вот в этом и проблема. В Mozilla вообще не работает отмена события нажатия клавиши кроме onkeydown="return false;".

Пока решил проблему путем добавления в начало формы кнопки type="submit" с onclick="return false;".  Но при нажатии все-равно происходит потеря текстовым полем фокуса. 

 

Автор: CruorVult 7.9.2010, 09:43
Я так понял нужно чтобы форма сабмитилась только при нажатии кнопки. тогда:
Код

<form...>
....
<input type="button" onclick="this.form.submit()">
</form>


Автор: armivl 7.9.2010, 10:55


<html>
<head>

</head>

<body>

<p>Testing input1.<br>
    <input type="text" name="txtEnterValue"> </p>
<p>Testing input2.<br>
    <input type="text" name="txtOutput"> </p>

<input type="image" id="im" onclick="alert('opps i am is clicked');">

</body>
</html>

открой этот html в браузере выдели любое текстовое поле и нажми enter. 
поле теряет фокус и выполняется событие input-а "image". Я хочу этого избежать. 

Автор: CruorVult 7.9.2010, 11:59
Код

<html>
<head>

</head>

<body>

<p>Testing input1.<br>
    <input id="inp1" type="text" name="txtEnterValue" onfocus="remember(this.id)"> </p>
<p>Testing input2.<br>
    <input id="inp2" type="text" name="txtOutput" onfocus="remember(this.id)"> </p>

<input type="image" id="im" onclick="alert('opps i am is clicked'); focusAgain()">
<div id="t"></div>
<script>
var focus;
function remember(id) {
    focus = id;    
}
function focusAgain() {
    document.getElementById(focus).focus();
}
</script>
</body>
</html>

Автор: ksnk 7.9.2010, 12:51
CruorVult, 
Цитата(armivl @  7.9.2010,  09:34 Найти цитируемый пост)
Что можно сделать для того, чтобы при нажатии клавиши еnter из текстового поля фокус оставался бы на текстовом поле и активации кнопки не происходило.


Код

if(event.keyCode==13){
  if(event.preventDefault) 
    event.preventDefault();
  return false;
}
 
что-то вроде такого должно помочь.

еще можно поковырять - посмотреть в гугле такие варианты
Код

            evt.cancelBubble = true; // просачивание события
            if (evt.stopPropagation) evt.stopPropagation();  // просачивание события
            if(evt.preventDefault) evt.preventDefault(); // дефолтное значение 

            evt.returnValue = false;  // отмена действия

            return false; // отмена действия


или посмотреть здешнюю статейку "http://forum.vingrad.ru/forum/topic-32350.html"

Автор: CruorVult 7.9.2010, 13:18
Цитата(ksnk @  7.9.2010,  12:51 Найти цитируемый пост)
Что можно сделать для того, чтобы при нажатии клавиши еnter из текстового поля фокус оставался бы на текстовом поле и активации кнопки не происходило.

так фокус никуда и не денется если поставить вместо type="submit" type="button"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)