Dojo - отправка формы нажатием Enter

У меня есть следующий код:

<div dojoType="dijit.layout.ContentPane" id="filterForm" style="padding: 3px">
    <form dojoType="dijit.form.Form">
        <input dojoType="dijit.form.TextBox" style="width: 120px" />
        <button dojoType="dijit.form.Button" type="submit">
            Filter
        </button>
        <script type="dojo/connect" event="onSubmit" args="evt">
            filterGrid();
            dojo.stopEvent(evt);
        </script>
    </form>
</div>

Он работает, как и ожидалось, если я нажимаю кнопку «Фильтр», однако мне бы хотелось, чтобы такое же поведение шло, когда пользователь нажимает Enter, когда текстовое поле сфокусировано. Однако этого не происходит. На самом деле ничего не происходит, когда я нажимаю Enter. Как я могу заставить обработчик onSubmit выполняться при нажатии Enter? Спасибо.


person Dario    schedule 11.10.2010    source источник
comment
Конечно, у меня работает на FF 3.6, Chrome 7, IE 8... jsfiddle.net/x3MMA (добавлен console.log для проверки). Мы упускаем некоторые детали проблемы?   -  person Ken Franqueiro    schedule 12.10.2010
comment
Еще раз спасибо за поддержку, Кен. Ниже я написал о причине проблемы.   -  person Dario    schedule 12.10.2010


Ответы (3)


Дарио, это должно сработать. Что-то еще в вашем окружении все портит. Возможно, у вас есть еще один скрипт, который перехватывает нажатия клавиш. Это может быть в ваших сценариях на веб-странице или даже в среде вашего браузера, например, в сценарии Grease Monkey или другом расширении.

Вы должны настроить минимальный тестовый пример, когда веб-страница содержит только минимальный минимальный html, включая эту форму, и загрузить dojo из aol или google CDN и попробовать войти. Если это не сработает, предоставьте нам полную копию (или URL-адрес) вашего теста, и мы попытаемся выяснить, что происходит не так, но я подозреваю, что это сработает. Затем вам нужно работать в обратном направлении между минимальным тестовым примером и полной средой сайта, пока не найдете конфликтующий фрагмент сценария.

person Caleb    schedule 12.10.2010
comment
Калеб, ты прав. Похоже, что DataGrid (который находится чуть ниже) блокирует мои нажатия клавиш. Это работает, только если я щелкну текстовое поле, затем щелкну где-нибудь еще на странице, затем снова щелкну текстовое поле и нажму Enter :) - person Dario; 12.10.2010
comment
Дарио спасибо за сообщение о решенной проблеме. Возможно, стоит отправить это как ошибку в проект додзё, потому что это определенно не должно взаимодействовать таким образом. - person Caleb; 13.10.2010

Это решение, которое я написал и работал для меня. Отправьте ключ ввода в «dijit/form/ValidationTextBox», используя тесты Mocha.

keyEventDispatch: функция (элемент, код, завершениеFn) {

        var keyboardEvent = document.createEvent("KeyboardEvent");

          Object.defineProperty(keyboardEvent, 'keyCode', {
            get : function() {
              return this.keyCodeVal;
            }
          });
          Object.defineProperty(keyboardEvent, 'which', {
            get : function() {
              return this.keyCodeVal;
            }
          });
          var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
          keyboardEvent[initMethod](
             "keypress", // event type : keydown, keyup, keypress
             true, // bubbles
             true, // cancelable
             window, // viewArg: should be window
             false, // ctrlKeyArg
             false, // altKeyArg
             false, // shiftKeyArg
             false, // metaKeyArg
             code, // keyCodeArg : unsigned long the virtual key code, else 0
             0 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
          );
          keyboardEvent.keyCodeVal = code;
          if (element.dispatchEvent) element.dispatchEvent(keyboardEvent);  
          if (completionFn) completionFn();
    },

и в вашем тесте вы будете вызывать keyEventDispatch(textboxes, 13);

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

person Archana Nogriya    schedule 30.09.2014

Я столкнулся с той же проблемой, что это не работало только в Internet Explorer (отлично работает с Firefox, Chrome) для нашей старой базы кода с использованием Dojo 1.5.0.

Оказалось, что ошибка в Dojo связана с проблемой IE со скрытой формой, и она была исправлена ​​этот патч.

person hshib    schedule 22.06.2016