Кнопка Enter не отправляет форму (т. е. только) ASP.NET
у меня есть форма с текстовым полем и кнопкой. IE-единственный браузер, который не будет отправлять форму при нажатии Enter (работает в FF, Opera, Safari, Chrome и т. д.). Я нашел эту функцию javascript, чтобы попытаться уговорить IE вести себя; но безрезультатно:
function checkEnter(e){
var characterCode
if (e && e.which) {
e = e
characterCode = e.which
} else {
e = event
characterCode = e.keyCode
}
if (characterCode == 13) {
document.forms[0].submit()
return false
} else {
return true
}
}
реализация:
searchbox.Attributes("OnKeyUp") = "checkEnter(event)"
какие-либо советы?
EDIT: на этой странице on CodeProject описывает то, что говорил Дилли, и это работает отлично.
9 ответов
другая вещь, которую я сделал в прошлом, - это обернуть область формы на панели и установить атрибут DefaultButton на кнопку отправки. Это эффективно сопоставляет ключ ввода с представлением, если у вас есть элемент формы в фокусе в области панели.
просто создайте текстовый ввод в скрытом div на странице. Это позволит обойти ошибку IE.
пример div:
<!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") -->
<div style="display:none">
<input type="text" name="hiddenText"/>
</div>
здесь есть хорошая запись этой проблемы и хорошее решение на основе jquery:
http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter
// Use the following Javascript in your HTML view
// put it somewhere between <head> and </head>
<script language="JavaScript" type="text/javascript"><!--
function KeyDownHandler(btn)
{
if (event.keyCode == 13)
{
event.returnValue=false;
event.cancel = true;
btn.click();
}
}
// -->
</script>
// Put this in your TextBox(es) aka inside <asp:textbox ... >
onkeydown="KeyDownHandler(ButtonID)"
при использовании display:none
, IE не увидит кнопку и поэтому не сможет использовать ее для отправки формы. Вместо этого вы можете использовать z-index
и абсолютное позиционирование, чтобы скрыть его под другим элементом, например, со стилем:
position:absolute; bottom: -20px; left: -20px; z-index: -1;
Теперь он все еще будет там, используемый IE, но скрытый под другим элементом.
скрыть кнопку-не используя display:none, но со следующими стилями:
position: absolute; /* no longer takes up layout space */
visibility: hidden; /* no longer clickable / visible */
Если вы это сделаете, вам не нужно будет добавлять какие-либо другие элементы или скрытые входы.
это связано с особенностью IE для ввода одного текстового поля.
простое решение-остановить страницу, имеющую одно текстовое поле, добавив другое скрытое.
<input type="text" name="hidden" style="visibility:hidden;display:none;" />
посмотреть.. http://www.4guysfromrolla.com/articles/060805-1.aspx
в основном, форма нуждается в кнопке, типе ввода= "отправить"или типе ввода=" изображение", чтобы позволить встроенному поведению отправить форму при вводе. Вам не нужен javascript для его отправки.