【问题标题】:Creating a dynamic html form创建动态 html 表单
【发布时间】:2011-07-06 14:53:57
【问题描述】:

我想创建一个动态变化的表单。

我有一个用于创建项目的表单(包含以下字段:project_name、project_description...),该项目可以有任意数量(大于或等于 0)的类别。

我想要的是显示一个按钮,让用户可以选择添加另一个类别字段。此外,我还希望用户可以“删除”类别字段的选项(如果他改变主意或犯了错误)。最好的方法是什么。我想要一个 Ajax 类型的解决方案。

到目前为止,我的解决方案是在最后一个类别下方留下一个空 div,然后单击按钮将另一个字段加载到该 div 中,另一个 div 将用于下一个 div。对此解决方案不满意,因为我现在必须计算我拥有多少个字段并为每个 div 提供它自己的 id,这使问题更加复杂。

有没有更简单的解决方案?

【问题讨论】:

    标签: html forms dynamic


    【解决方案1】:

    如果您尝试使用按钮动态添加字段,您可以通过执行以下操作轻松完成:

    HTML:

    <form>
        <p>
            <label>Name:</label> <input type="text">
            <label>Age:</label> <input type="text">
            <span class="remove">Remove</span>
        </p>
        <p>
            <span class="add">Add fields</span>
        </p>
    </form>
    

    JS:

    $(".add").click(function() {
        $("form > p:first-child").clone(true).insertBefore("form > p:last-child");
        return false;
    });
    
    $(".remove").click(function() {
        $(this).parent().remove();
    });
    

    演示:http://jsfiddle.net/UeSsu/1/

    【讨论】:

    • 太棒了!如此简单...但是如果例如我想将编辑后的结果发送出去,我将如何处理每个单独的字段,以便外部函数可以轻松读取它(将信息输入数据库例如)
    • 不是我真正想要的,因为要删除一个类别,必须删除之后添加的所有类别。
    • @nayish 我会给它们所有相同的名称,但我会给它们一个引用数组 0 的名称,而不是 category1、category2 等,我会命名每个 HTML 元素“类别[]”。 (这在 PHP 中有效。)这样,所有内容都被写入数组,您可以简单地遍历它。这应该适用于初始解决方案。
    • 这是一个很好的解决方案,但是当我在我的网站上实现它时,我得到了一个奇怪的结果。我当时添加了两个,而不是一个额外的 p 标签(带有字段)。知道为什么会这样吗?
    • 这太棒了
    【解决方案2】:

    不久前,我开始编写基于 JSON 定义的表单生成器。它可以工作,但可以使用一些增强功能。它是使用 Prototype.js 编写的,但将其移植到 jQuery 上并不费力。

    欢迎你窃取the code。 (只看源码)

    【讨论】:

    • JSON 块包含表单的定义。因此,本质上是通过使用 JS 来操作表单定义,您可以动态控制表单中的内容。
    • 我知道这是一个旧线程,但我只是想如果你删除所有块,我会指出这个中断
    【解决方案3】:

    我做过类似的事情。要删除字段,我并没有真正删除字段。我只是用display:none 隐藏了它们,并有一个隐藏的input“删除”我触发为真。然后,收到结果的页面就知道要删除数据库中的哪个字段了。

    在提交表单之前它们不会被删除。这就像一个“两次通过”的概念。但是,如果您真的不需要真正的 ajax,它就可以正常工作。否则,您需要您的 JS 删除函数来调用服务器并告诉删除带有其 id 的字段。代码有点复杂。

    【讨论】:

    • 用 CSS 隐藏内容具有严重的潜在后果。用js动态添加它们是更好的方法。
    • 一个字:CSRF
    • @TheRealChx101 你能详细说明一下吗?只是好奇。找不到为什么这会是 CSRF 漏洞。
    猜你喜欢
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2019-11-19
    • 2011-09-13
    • 2017-01-31
    相关资源
    最近更新 更多