asp.net нажатие кнопки imagebutton на клавишу Enter

#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 отвечала на ввод. Мы действительно хотим, чтобы произошло СОХРАНЕНИЕ (или ничего, но неправильное поведение заключалось в перезагрузке страницы, и это вызвало недовольство)

  1. Настройте обработчик для окна, чтобы перехватывать события. Я делаю это в docReady ()

     function docReady() {
    
     $(document).keydown(mapKeyCode);
    
    };
      
  2. В этом обработчике найдите код ключа, который вы хотите записать (введите 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 , поэтому я вставил это. Я достаточно уверен, что ().Триггер сработает, если я выясню, что я делаю неправильно, я просто выбрал другой маршрут.

Для меня это халтурно, но это достигает цели.

Надеюсь, это поможет.