首页 文章

Django中的Javascript驱动表单

提问于
浏览
1

Django使用他的forms API进行输入验证 . 表单将发送到模板,并呈现为html(as_p and friends) .

当用户准备就绪时,他会对表单进行验证,如果表单无效,则表单将在模板上重新呈现 .

当形式无效只是因为字段上没有足够的caracteres(即min_length)或无效字符时,这很奇怪:一个POST太多只是为了告诉用户它缺少一些非常基本的东西 .

那么,是否有任何可用的方式(Django或应用程序)使用javascript代码呈现表单"tests" [*]客户端的某些形式'字段?即有一个表单 as_javascript(...) ,动态显示将由form.errors显示的错误消息?

这不适用于所有字段,因为有些字段需要数据库命中,但它应该适用于简单(和最常见)字段,即CharField,TextField等 .

[*]“测试”因为总是要在服务器端进行验证 .

1 回答

  • 0

    因此,您希望在提交之前验证JS中的某些内容 . 这是一种方法 . 而不是在表单中输入类型提交,你应该放一个按钮类型按钮:

    <form id="my-form" submit="...">
      ...        
      <input type='button' id='submit-button' value="Save">
    </form>
    

    请注意,除非您将类型指定为“按钮”,否则它仍会尝试提交 .

    然后在JS文件中你写这样的东西(在你的HTML文件中包含jQuery):

    $('#submit-button').click(function() {
      var errors = testErrors(); // this function tests for the errors.
      if (errors != "") {
        alert(errors);
      } else {
        $('#my-form').submit();
      }
    }
    

    示例testErrors():

    function testErrors() {
        var country         = $("#id_country").val();
        var city            = $("#id_city").val();
    
        var errors = "";
        if (country == "") {
            errors += "- Please select a country\n";
        }
        if (city.length <= 10 ) {
            errors += "- Your city name is too short\n";
        }
        return errors;
    }
    

    因此,在testErrors中,您可以为每个字段定义自己的测试 . 在这个例子中有两个,国家和城市 . 对于国家/地区,代码测试它是否为空白,对于城市是否长于10个字符 . 您可以定义自己的进一步测试 . 请参阅jQuery文档以及如何从不同类型的表单字段中检索值 .

相关问题