Я проверяю «имя» объекта, чтобы убедиться, что оно уникально. Для этого я использую плагин валидации 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.
Кто-нибудь знает, почему мое событие щелчка кажется потерянным при первом щелчке при этих обстоятельствах, а не при втором? Я не могу заставить пользователя дважды щелкнуть по кнопке, чтобы сохранить.