有条件的必填字段和禁用输入

时间:2010-08-12 01:27:31

标签: django django-forms design-decisions

我的表单中有一堆地址字段(街道,城市,国家,省,邮政编码),需要一遍又一遍地填写。为了方便用户,我添加了一个“复制自”选择器,他们可以在这里选择他们以前使用过的地址。执行此操作时,表单字段将自动填充,然后禁用。通过这种方式,他们可以清楚地看到他们将要提交的内容。

问题是,如果字段被禁用,W3 says将不会提交输入。那没关系,因为我可以从选择器中获取所需的所有数据,但现在表单未通过验证。

我认为我有两个选择:

  1. 在提交表单之前重新启用表单字段(但这有点破解)
  2. 将所有地址字段设为可选。但是我需要添加一堆clean_方法,以确保当您不知道他们 时已填写 不要使用预设选择器。此外,我在整个网站使用地址表单,在某些地方他们确实是必需的,所以我不想让字段可选。虽然,我想我可以复制粘贴地址表格并为此页面制作一个特例。
  3. 思考?我应该采取什么方法?

2 个答案:

答案 0 :(得分:1)

有几点想法。他们可能会给你一些想法。

  1. 如果用户使用的是以前使用的地址,则无法编辑表单(字段已禁用),他们是否需要地址表单?您是否可以在没有表单的情况下显示以前的地址并将其作为隐藏参数传递给它?
  2. 如果用户可以编辑之前选择的地址(我认为亚马逊会这样做)那么将表单字段保留为可编辑是不是有意义?

答案 1 :(得分:0)

我一直面临类似的问题,其中字段是必需的,但它们的值是从另一种形式获取的。我决定做的是:

  1. 为所有必需的输入分配一个类,但不需要手动输入
  2. 创建一个自动禁用键盘或上下文菜单中所有用户输入的功能
  3. 这是我的解决方案: 带有表单的HTML文件     

    <head>
    <script src='file1.js'></script>
    </head>
    
    <body>
    <form method='post'>
    <input class='RequiredNoManual'>
    <input type='submit'>
    </form>
    
    </body>
    </html>
    

    JS FILE

    window.addEventListener('load', configureNoManualInputFields);
    function configureNoManualInputFields()
    {
        var elements = document.getElementsByClassName('RequiredNoManual');
        for(var i =0; i<elements.length; i++)
        {
            elements[i].oncut = function(){event.preventDefault();};
            elements[i].oncopy = function(){event.preventDefault();};
            elements[i].onkeydown = function(){event.preventDefault();};
            elements[i].onkeypress = function(){event.preventDefault();};
            elements[i].setAttribute('required', 'required');
        }
    
    }
    
相关问题