Любой способ переопределить .blur (), если .submit () вызывается в jQuery? - PullRequest
3 голосов
/ 28 июля 2010

Я пишу пользовательский код для CMS для веб-сайта.Когда пользователь нажимает кнопку отправки (созданную с помощью пользовательского интерфейса jQuery), он вызывает событие нажатия на кнопку, которое, в свою очередь, вызывает событие отправки, которое отправляет форму.

Указанная форма также проверяет определенные поля дляПосмотрите, есть ли у них текст, и покажет сообщения об ошибках, и отключите кнопку отправки, пока проблемы не будут решены.Для этого я в настоящее время использую .focus (), в которой есть функция .blur (), которая проверяет, исправлена ​​ли ошибка, и удаляет уведомление, если это так (и, если других ошибок нет, повторно активирует кнопку).

Теперь у меня проблема в том, что если пользователь в любой момент редактирует одно из проверяемых полей, если он не щелкает по нему и пытается отправить данные формы, то .blur () функция берет на себя управление (как и должно быть в зависимости от того, как это закодировано), поэтому для отправки данных формы требуется второй щелчок.

Есть ли способ, чтобы .submit () имел приоритет над .blur ()в jQuery, так что эта проблема не может возникнуть (на данный момент я могу просто сказать пользователям, использующим это, не делать шаги, чтобы вызвать его)?

(Если вам, ребята, нужен код, я могу попробовать опубликовать некоторые его частиздесь.)

Ответы [ 3 ]

2 голосов
/ 29 декабря 2010

Я попытался удалить событие размытия в полях ввода и использовать событие onFocusout функции проверки формы.Это решение сработало для меня.

Другое Лучшее решение - установить таймер, который задерживает действие события размытия, прежде чем оно запускает событие нажатия кнопки.

// Пространство имен для таймера var setTimer = {timer: null}

        $('input,select').blur(function () {
            setTimer.timer = setTimeout(function () {
               functionCall();
            }, 1000);
        });

        $('input,select').focus(function () {
            setTimer.timer = setTimeout(function () {
                functionCall();
            }, 1000);
        });

        $("#btn").click(function () {
            clearTimeout(setTimer.timer);
            functionCall();
        });   
2 голосов
/ 28 июля 2010

Попробуйте остановить распространение события onblur:

$(form).submit(function(){
  blur.stopPropagation()
...
});

Смотрите здесь: http://api.jquery.com/event.stopPropagation/

0 голосов
/ 28 июля 2010

Подумав немного об этом вчера вечером, я понял, что если бы я сделал быструю проверку, чтобы убедиться, что ошибка видна или нет, прежде чем я вызвал blur (), это решило бы мою проблему (сделал быструю проверку, и кажется,иметь).

Спасибо за предложение о прекращении распространения события, но я должен помнить об этом.

...