jquery change () в поле ввода в IE6 — не удается удалить фокус

У меня есть страница оформления заказа, которая ненавязчиво проверяет, делал ли клиент заказ у нас раньше.

После того, как они заполняют свой адрес электронной почты и переключаются на следующее поле, я просматриваю электронное письмо и представляю что-то типа «добро пожаловать обратно» с возможностью запомнить их данные.

У меня возникает проблема в IE6: всякий раз, когда фокус теряется из поля ввода, функция ajax работает как обычно, но фокус возвращается обратно в поле ввода. Это означает, что всякий раз, когда клиент пытается выйти из поля ввода электронной почты, он продолжает возвращаться к нему и не может продолжить.

Есть ли способ остановить это поведение?

  // check when the e-mail box is changed
  $("#email").change(function(event) {
    $.ajax({
        type: "POST",
        url: "procBasketEmailLookup.php", 
        data: $("#checkoutform").serialize(),
        success: function(response) {
            $('#emailstuffOutput').hide();
            $('#emailstuffOutput').html(response);
            $('#emailstuffOutput').show('slow');
        }
        });
        // DON'T ALLOW THE PAGE TO SUBMIT
    return false;
    });

person Ashley    schedule 10.02.2010    source источник
comment
Что произойдет, если вы не вернете false из скрипта?   -  person Pointy    schedule 10.02.2010
comment
@Pointy Затем форма будет отправлена ​​и перенаправлена ​​​​на страницу действий.   -  person Vivin Paliath    schedule 10.02.2010
comment
@vivin Почему форма будет отправлена, если вы удалите return false?   -  person Mattias Jakobsson    schedule 10.02.2010
comment
@Mattias Argh, мой плохой - я думал, что он использует submit(). Не обращайте внимания на то, что я сказал ранее.   -  person Vivin Paliath    schedule 10.02.2010
comment
Ааа, понятно :) Потому что думаю, если он удалит, то работать будет (в этом не уверен). И я не вижу причин для его присутствия.   -  person Mattias Jakobsson    schedule 10.02.2010
comment
О, хороший момент — вероятно, поэтому он сохраняет фокус — потому что он продолжает возвращать false из обработчика change().   -  person Vivin Paliath    schedule 10.02.2010
comment
Удалил return false и работает нормально. Я думаю, что скопировал его из некоторых других функций на той же странице, которые будут отправлены, и забыл удалить его. Спасибо!   -  person Ashley    schedule 10.02.2010
comment
@vivi Да, я тоже так думал.   -  person Mattias Jakobsson    schedule 10.02.2010


Ответы (1)


Пытаться:

jQuery("#emailInputField").blur();

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

ИЗМЕНИТЬ

Что касается комментария Пойнти. Использование blur() портит последовательность вкладок. Кроме того, Пойнти и Маттиас указали, что вы возвращаете false из своего обработчика. Вам не нужно этого делать, так как вы не находитесь в обработчике submit(). return false; также может быть причиной вашей проблемы.

person Vivin Paliath    schedule 10.02.2010
comment
Проблема с вызовом blur() заключается в том, что он может испортить последовательность вкладок. Если пользователь сделал изменение, а затем использовал табуляцию для перехода к следующему полю, вызов blur() может привести к тому, что браузер переместит фокус на какое-то более или менее случайное место на странице. - person Pointy; 10.02.2010
comment
Хорошая точка зрения; Я все равно обновляю ответ - похоже, это может быть связано с false, который он возвращает из обработчика change(). - person Vivin Paliath; 10.02.2010