Срабатывает нажатие на button при нажатии Enter внутри input
Вложений: 1
<html><head>
</head>
<body>
<form>
<button value="OK" onclick="alert('Нажата кнопка');">ОК</button>
<input>
</form>
</body></html>
Не могу понять, почему, когда я жму на Enter после ввода текста в input срабатывает нажатие на кнопку ОК. Если кнопок много, срабатывает верхняя. Словил alert в Firefox 18.0.2 и Chrome 24.0.1312.57 m В IE 9.0.8112.16421 кнопка не жмётся. |
Точно объяснить не могу, но это связано с тем что тип кнопки, если не указать, равен submit (тоесть имеем <button type=submit>)
А по Enter происходит как раз таки отправка формы. Ну и видимо так задумано что при этом срабатывает событие click по сабмитящей кнопке. Кстати, если нажать Enter когда фокус находится на кнопке, также произойдет событие click, хотя мы даже мышку в руках в это время не держим. Оффтоп: пока писал, села батарейка в мышке, так что придется триггерить событие click нажатием Enter в ближайшее время )) |
<!DOCTYPE>
<html>
<head>
<script type="text/javascript">
function FFanaliz(a){
//if(Тут анализ на отправку формы/типо: Все поля заполнены?/ ) return true;
return false;
}
</script>
</head>
<body>
<form onsubmit="return FFanaliz(this)">
<button type="button" value="OK" onclick="alert('Нажата кнопка');">ОК</button>
<input>
</form>
</body>
</html>
|
Плохое решение для меня. Есть необязательные поля, состав полей в форме может менятся.
К тому же, если кнопка будет submit типа, она всё равно нажмётся |
Цитата:
Цитата:
Если нет - просто удалите строку //if(Тут анализ на отправку формы/типо: Все поля заполнены?/ ) return true; |
Цитата:
<!DOCTYPE>
<html>
<head>
<script type="text/javascript">
function FFanaliz(a){
return false;
}
</script>
</head>
<body>
<form onsubmit="return FFanaliz(this)">
<button value="OK" onclick="alert('Нажата кнопка');">ОК</button>
<input>
</form>
</body>
</html>
При нажатии на Ентер выводится alert. По крайней мере в мозиле.
<!DOCTYPE>
<html>
<head>
<script type="text/javascript">
function FFanaliz(a){
return true;
}
</script>
</head>
<body>
<form onsubmit="return FFanaliz(this)">
<button value="OK" onclick="alert('Нажата кнопка');">ОК</button>
<input>
</form>
</body>
</html>
Тоже самое Проект написан на JSF, сабмиты в явном виде не вызываются. Всё обробатывается на уровне компонент, для правильной работы которой нужна форма. Как правило все запросы к серверу ajax. Плюс используются facelets. Т.е. в одной форме может быть совершенно разное содержимое. Даже если бы оно работло, обработать все варианты по onsubmit не представляется реальным. |
Еще раз: по Enter происходит отправка формы. И это прекрасно.
Если у вас срабатывают кнопки, которые по идее не должны ничего сабмитить, так не делайте их сабмиттерами (type="button"). Если же это сабмиттеры, но вам нужно реагировать на клик по ним, думаю отличить клик мыши от программного несложно. |
Помоему это и есть схема отправки формы по Enter: вызывается событие click на сабмитящей кнопке )
|
;)
<!DOCTYPE>
<html>
<head>
</head>
<body>
<form onsubmit="return false">
<input type="button" value="OK" onclick="alert('Нажата кнопка')"/>
<input>
</form>
</body>
</html>
|
Да все проще можно сделать. Только не пойму зачем. Зачем может понадобиться обработка клика кнопки-сабмиттера, но при этом этот обработчик не подходит для программного клика. Какая разница то?
|
danik.js,
В хроме ксать глюк с <button - не отрабатывает события focus и т.д - кроме клика |
Deff, с сылками тоже самое. Не уверен что это глюк.
|
Цитата:
Выход понятен, разносить кнопки по разным формам или заменять кнопки на ссылки, но мне было бы удобнее, если бы этот эффект можно было б просто отключить. |
Цитата:
|
Цитата:
|
rebeled,
У Вас неправильный подход к проблеме, - если Вы программист - это Вы брали кривые плагины - Вы и выкручивайтесь, если руководитель - какое Вам дело до этих тонкостей ? Это безденежье ? Бестолковый топик, -ушёл! |
Я программист, но к сожалению не всегда программисты сами выбирают платформу, на которой им приходится писать. У всех подходов есть свои достоинства и недостатки, а менять инструментарий из-за мелкого бага нерентабельно.
|
rebeled, пройдись циклом по всем кнопкам и выставь им button.type = "button". Разве так не получится?
|
Цитата:
|
Ну тогда проверяй свойства x/y у объекта события, передаваемого в onclick. Если они нулевые - клик сделан не мышью. Еслиб не ИЕ7-8, был бы более простой и надежный способ - event.detail. При клике мышью он больше нуля (кол-во быстрых кликов), иначе - 0
|
| Часовой пояс GMT +3, время: 22:59. |