1

我有这样的ajax调用:

$('.register a').click(register);

注册功能:

function register(e){
    e.preventDefault();
    var params = $('.register').serialize();
    Api.callApi(
        "/api/authkey/create_user",
        params,
        //success!
        function(response){
            settooltip(response.msg[0])
            // GA
            _gaq.push(['_trackPageview', '/registered']);
            _gaq.push(['_trackEvent', 'register', 'public']);
        },
        //error
        function(response){
            settooltip(response.msg[0])
        }
    );
}

有时 ajax 会以错误响应。我尝试在有错误的字段旁边显示这些箭头(这就是 settooltipc–function 所做的)。但是,api 只响应有错误的字段的名称,有时,同名的字段多于一个。这意味着我不知道应该将错误消息应用到哪个字段。

我如何解决这个问题的想法是为最新提交的表单设置一个 ID。但是,我想在注册函数中执行此操作。如果有人实际单击 .register a,我可以使用“this”,但如果他们使用 enter,则“this”包含窗口元素。这是一个好方法吗?在那种情况下,我怎么知道正在提交什么表格?

4

1 回答 1

2

您应该使用表单的 sumbit 事件,而不是单击任何内容来处理表单提交。

$("#the-form").submit(register);

此外,使用 jQuery,您可以只return false;在事件处理程序的末尾。e.preventDefault();它以跨浏览器的方式做同样的事情。

如果您需要手动提交表单(并因此执行您的事件处理程序),您仍然可以执行以下操作:

$('.register a').click(function() {$("#the-form").submit();});

这样,this将始终是“提交”事件处理程序中的表单。

于 2013-07-09T15:33:55.607 回答