Событие Click не вызывается (или игнорируется) при выполнении ajax-вызова в фоновом режиме, который проверяет форму - PullRequest
0 голосов
/ 31 августа 2011

Я проверяю «имя» объекта, чтобы убедиться, что оно уникально. Для этого я использую плагин валидации bassisstance jQuery. Я выполняю SYNCHRONOUS AJAX-вызов во время метода проверки, чтобы изменить уникальность следующим образом

jQuery.validator.addMethod("new_user_role_name_unique", function(value) {
    var role_name_valid = true;
    jQuery.ajax(
    {
        type: "GET",
        async: false,
        data: "name=" + encodeURIComponent(value),
        url: '/user_roles/0/name_taken',
        success: function (result) {
            var taken = JSON.parse(result);
            role_name_valid = !taken
        }
    });
    return role_name_valid;
}, I18n.t('user_role_name_already_used'));

Когда я набираю имя в текстовом поле «имя», а затем сразу нажимаю на кнопку отправки, определенную ниже, я ожидаю, что будет вызван метод addUserRole:

      <button id='user_role_add_button' class='rounded green' type='button' onclick="addUserRole()" name='add' value='add'>
         <span><%= t(:user_role_add_button) %></span>
      </button>

Однако метод addUserRole не вызывается. Однако если я наберу «имя», а затем потерю фокус на текстовом поле имени, перед нажатием кнопки метод вызывается без драмы.

Итак, по сути, моя проблема в том, что когда текстовое поле имени имеет фокус, мне нужно дважды щелкнуть кнопку сохранения, чтобы убедиться, что вызывается метод addUserRole.

Кто-нибудь знает, почему мое событие щелчка кажется потерянным при первом щелчке при этих обстоятельствах, а не при втором? Я не могу заставить пользователя дважды щелкнуть по кнопке, чтобы сохранить.

1 Ответ

0 голосов
/ 31 августа 2011

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

Без фактического релевантного HTML-кода на вашей странице и всех участвующих обработчиков событий трудно следовать описанной вами последовательности, чтобы предоставить больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...