JQUERY обработчик клика от РАЗЛИЧНОГО элемента, сработавшего при вводе? - PullRequest
0 голосов
/ 06 марта 2012

URL-адрес здесь: http://prorankstudios.com/sandbox/wtf/

Используя IE9, с фокусом на поле User или Pass, нажмите клавишу ВВОД ...

Обратите внимание, что вся эта страница перезагружается.

Что происходит, так это то, что обработчик клика для #live_site_link (назначенный в строке 30 файла common.js) работает, когда по #live_site_link вообще не было щелчков ...

Логин Подать код:

    Login.Submit = function(e)
{
    Login.feedback.empty();
    if (Login.user.val() == '')
    {
        Camo.ErrorAlert('Invalid username.',Login.feedback);
        Login.user.focus().select();
        return false;
    }
    if (Login.pass.val() == '')
    {
        Camo.ErrorAlert('Invalid password.',Login.feedback);
        Login.pass.focus().select();
        return false;
    }

    Camo.AJAXStart('Logging in...');
    postData =
    {
        user:Login.user.val(),
        pass:Login.pass.val()
    }

    Camo.AJAXPost('index/login/',Login.Success,Login.Failure,postData);
    return false;
}

Обработчик кликов live_site_link:

    $('#live_site_link').click(function()
{
    window.location.href = './';
});

Фактически, обработчики для формы входа в систему (как keyup, так и кнопка «Перейти», назначенная в строках login.js 22 и 24 соответственно) иногда запускаются ПОСЛЕ перезагрузки страницы, как ни странно.

В IE7 / режиме совместимости обработчики keyup и click для login_submit работают правильно, и страница не перезагружается. Это также относится ко всем другим браузерам, которые я тестировал.

Что делает IE9?

Ответы [ 3 ]

0 голосов
/ 06 марта 2012

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

$('form').submit(function(){
    var valid=someValidionFunction();

   return valid;
})

Отредактировано из-за отсутствия AJAX

0 голосов
/ 06 марта 2012

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

Очевидно, что без вложенных тегов формы IE9 использует кнопку live_site_link вместо кнопки GO для отправки формы с помощью обычного нажатия клавиши ввода перед обработчиками клавиш на входах и обработчиком щелчков на кнопке Go формы входа когда-либо получит шанс срабатывания, что приведет к перезагрузке страницы (как это делает обработчик кликов для live_site_link).

Теперь я должен обрабатывать логины без AJAX ...

0 голосов
/ 06 марта 2012

Попробуйте позвонить e.preventDefault() или e.stopPropagation(), прежде чем вернуть false в Login.SubmitOnEnter

Было бы лучше, если бы вы обернули форму вокруг элементов формы, а затем прикрепили событие для отправки формы. Таким образом, он все равно будет работать без javascript, и вам не потребуется отдельное событие для нажатия и ввода прессы.

...