#asp.net
#asp.net
Вопрос:
Я исследовал эту проблему здесь, на SO, и попробовал очевидное решение, которое не сработало, так что вот оно:
У меня есть очень сложная форма с тремя текстовыми полями автозаполнения, среди прочих элементов управления.
У меня также есть клиент, который, похоже, не может перестать вводить значение в текстовые поля и нажимать клавишу Ввода, чтобы выбрать желаемое значение из списка автозаполнения.
Когда они нажимают Enter, срабатывает первая кнопка imagebutton в форме, делая что-то совершенно другое. Таким образом, для них форма нарушена.
Что мне нужно сделать, так это запретить нажатию клавиши Enter на эти кнопки imagebuttons (в форме их 10).
Я пробовал следующий код как в Page_Load, так и в Page_LoadComplete, ни один из которых не работает:
imgbtn1.Attributes.Add("onkeydown", "return (event.keyCode!=13);")
Приветствуется любой совет, который сэкономит мне несколько минут.
Комментарии:
1. Так что почувствуй свою боль. Я пригрозил удалить все клавиши enter с клавиатур моих клиентов.
Ответ №1:
Одно хорошее решение можно найти здесь:
Отключить нажатие кнопки, кнопки ImageButton и / или отправку формы при нажатии клавиши Enter
Добавление разметки из ссылки
<form id="form1" runat="server">
<input type="submit" style="position:absolute;left:-100px;top:-100px;width:0px;height:0px;" onclick="javascript:return false;" />
<!-- other form controls below this line -->
</form>
Ответ №2:
Вы проверили эти две ссылки
http://www.bloggingdeveloper.com/post/Disable-Form-Submit-on-Enter-Key-Press.aspx
http://www.webcheatsheet.com/javascript/disable_enter_key.php
Они, по сути, делают то же самое, что и вы, просто подключают его к другому событию. Также убедитесь, что ваш Javascript надежен, т. Е. Если в javascript есть какие-то ошибки, то ваш конечный результат может быть не таким, как ожидалось.
Ответ №3:
Опубликованная Дайком вторая ссылка (отключить ввод клавиши) сработала для меня. У меня есть две кнопки ImageButtons, и они обе не запускают обратную отправку при использовании этой функции (немного измененной по сравнению с оригиналом), что здорово.
document.onkeypress = function (evt) {
return ((evt) ? evt : ((event) ? event : null)).keyCode != 13;
};
Ответ №4:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.Page.Form.DefaultButton = BtSearch.UniqueID
If Not IsPostBack Then
' ...............
End If
End Sub
Ответ №5:
У меня была похожая проблема. Просмотр списка 1.Кнопка ImageButton отвечала на ввод. Мы действительно хотим, чтобы произошло СОХРАНЕНИЕ (или ничего, но неправильное поведение заключалось в перезагрузке страницы, и это вызвало недовольство)
-
Настройте обработчик для окна, чтобы перехватывать события. Я делаю это в docReady ()
function docReady() { $(document).keydown(mapKeyCode); };
-
В этом обработчике найдите код ключа, который вы хотите записать (введите 13)
https://css-tricks.com/snippets/javascript/javascript-keycodes/
function mapKeyCode(event) {
{
if (event.keyCode == 13) {
//event.stopPropagation();
//event.preventDefault();
__doPostBack('ctl00$cp1$InventoryPieces$btnSubmit', '');
}
}
событие.Остановка распространения не приведет к тому, что ничего не произойдет.Нажатие клавиши просто съедается. Это может быть то, что вы хотите. Вы по-прежнему можете вызвать приведенный ниже метод ajax, который не является частью события.
событие.Предполагается, что preventDefault не позволяет событию выполнять то, что оно обычно выполняет. У меня возникли проблемы с поиском разницы, закомментирована эта строка или нет. Существует подробное обсуждение preventDefault и ENTER здесь, на SO.
Эта 3-я строка — это то, чего хотят люди, которые мне платят, когда они нажимают клавишу ENTER, хотя они, вероятно, должны нажимать tab. Я попробовал (#).trigger() и мне не очень повезло. Проверив элемент, я увидел, что он вызывает __postback , поэтому я вставил это. Я достаточно уверен, что ().Триггер сработает, если я выясню, что я делаю неправильно, я просто выбрал другой маршрут.
Для меня это халтурно, но это достигает цели.
Надеюсь, это поможет.