【问题标题】:Triggering jquery event from within the same event handler从同一事件处理程序中触发 jquery 事件
【发布时间】:2012-10-21 18:12:30
【问题描述】:

我正在使用 Ajax 验证 Zend 表单并提出了以下建议:

$('#some-dialog-i-have form').live('submit', function(e) {

    e.preventDefault();

    MyClass.Form.Validate($(this), function() {
        // I wish to submit the form from this callback function
        $(this).trigger('submit');

    });
});

MyClass.Form.Validate 获取表单并执行 XHR 请求以检查表单是否有效。

我的问题是,如果表单有效,我希望继续提交,但如果不是,则停止一切。从这个处理程序中触发提交显然会导致递归问题;最好的方法是什么?

Form: {
    Validate: function(form, onSuccess) {

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: '/ajax/form/validate',
            data: form.serialize() + '&f=' + form.data('id')

        }).done(function(errorMessages) {
            if(errorMessages.count > 0) {
                // Snip (display errors)
                return false;
            }
        // Callback
            onSuccess();
        });
    }
}
  • 我已经完成了关于 stopPropagation 的操作,但这对实时处理程序没有影响
  • 我知道 live() 处理程序已被弃用,我暂时忽略了更改它
  • 我曾考虑过简单地通过 Ajax 发布表单,但不确定是否要这样做

可能是一个简单的解决方案,但我今天的思路不正确。

谢谢。

【问题讨论】:

  • 解释应该是什么顺序。看来您不希望在 ajax 完成之前提交表单(并且没有错误),但不是很清楚
  • 你可以让ajax同步运行
  • 你为什么要尝试提交表单两次?提交处理程序中的 $(this).trigger('submit'); 也是递归的

标签: jquery ajax zend-framework validation


【解决方案1】:

想到的一件事是有一个变量来说明表单是否作为 Ajax 检查的结果有效。

如果标志为假,则运行 Ajax 验证。一旦 Ajax 验证返回有效,将标志设置为 true,然后当触发提交处理程序时,它会看到标志并绕过检查并直接提交表单。

请记住,提交时表单仍应在服务器上进行验证,以防有人禁用 JS 或机器人尝试直接发布到服务器并跳过验证步骤。

希望对您有所帮助。

【讨论】:

  • 谢谢,知道这将是一个简单的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多