如果 django 表单提交失败,则运行 javascript

Posted

技术标签:

【中文标题】如果 django 表单提交失败,则运行 javascript【英文标题】:running a javascript if a django form submission fails 【发布时间】:2012-12-03 06:15:05 【问题描述】:

我有一个django 应用程序,用户可以在其中使用submit a form。我已将此表单放在div (say of id='mydiv_id') 中,该表单最初是不可见的(css display:none)。当用户想要输入输入时,他点击页面上的show 按钮,javascript 通过使display:block 使 div 可见。

表单中的字段具有myform.myfield.errors,因此如果验证失败,将创建ul class="errorlist"

如果表单验证失败,我想通过运行另一个 javascript 来保持表单可见。javascript 的正文将只是 $('#mydiv_id').show();

但是我应该如何运行呢?如果没有在 javascript 内部进行验证,如何告诉 javascript django 表单验证失败?

我认为我需要在 javascript 正文中添加以下内容。除此之外,我不知道如何告诉它表单提交失败。

$(document).ready(function()

..
);

【问题讨论】:

【参考方案1】:

如果我理解你的话

$(document).ready(function()
    show = % if form.errors % true % else % false % endif %
    if (show) 
       $('#mydiv_id').show();
    
    else 
    ....
    

);

【讨论】:

【参考方案2】:
def method(request):
    if something_wrong:
        data['error'] = True
    return render_to_response('template.html', data)

在 template.html 中你可以添加 javascript 块:

% if error %
<script type='text/javascript'>
    //the javascript used to show the message
    $(function()
        $('#mydiv_id').show();
    );
</script>
%endif%

【讨论】:

【参考方案3】:

使用javascript进行表单验证是一件很聪明的事情,如果表单无效,为什么还要调用服务器?您只是通过使其进行表单验证来为您的服务器增加额外的开销。如果您不需要调用服务器来进行表单验证,那么您没有理由这样做,请使用 javascript 来执行此操作。

【讨论】:

假设用户关闭 javascript 并提交,那么我将在关闭服务器端验证时遇到问题 在这种情况下,您将不会运行任何 javascript。如果 django 表单验证未通过,您将通过常规帖子提交,您将返回该无效表单以显示错误。

以上是关于如果 django 表单提交失败,则运行 javascript的主要内容,如果未能解决你的问题,请参考以下文章

Django CSRF错误是通过以多页形式访问页面来修复的吗?

ExtJS+django表单提交成功/失败问题

如果单击任何表单元素,则使用 Jquery 启用提交按钮

使用 django 表单提交传递变量

如何根据用户输入动态更改 django 中的表单(提交前)

Django 表单:无法显示验证错误