我正在验证一个对象的 "名称",以确保它是独一无二的。为了执行这个任务,我使用jQuery bassisstance验证插件。在验证方法中,我发出一个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'));
当我在 "name "文本字段中输入一个名字,然后立即点击下面定义的提交按钮时,我希望方法 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
没有被调用。然而,如果我输入了一个 "name",然后在name文本字段上失去了焦点,在点击按钮之前,该方法就会被调用,没有任何戏剧性。
所以本质上,我的问题是当姓名文本字段有焦点时,我必须双击保存按钮以确保 addUserRole
方法被调用。
有谁知道为什么在这种情况下,我的点击事件似乎在第一次点击时就丢失了,而第二次却没有?我不能让用户双击按钮来保存。
同步ajax调用会阻止UI事件,这样做时可能会丢失一些事件。 使用异步ajax调用,让用户事件实时发生会更好。
如果没有你的页面和所有参与事件处理程序的实际相关HTML,很难按照你描述的顺序提供更多信息。