当在后台执行验证表单的ajax调用时,点击事件不会被触发(或被忽略)。

问题描述 投票:0回答:1

我正在验证一个对象的 "名称",以确保它是独一无二的。为了执行这个任务,我使用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 方法被调用。

有谁知道为什么在这种情况下,我的点击事件似乎在第一次点击时就丢失了,而第二次却没有?我不能让用户双击按钮来保存。

javascript jquery ajax validation jquery-events
1个回答
0
投票

同步ajax调用会阻止UI事件,这样做时可能会丢失一些事件。 使用异步ajax调用,让用户事件实时发生会更好。

如果没有你的页面和所有参与事件处理程序的实际相关HTML,很难按照你描述的顺序提供更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.