如何在表单中动态创建字段?

时间:2014-12-29 01:58:30

标签: javascript php html5

我有这个简单的表格

<form action="" method="post" class="smart-green">
    <h1>Contract Form 
        <span>Please fill all the texts in the fields.</span>
    </h1>
    <label>
        <span>Client:</span>
        <input type="text" name="client" placeholder="Your Client Name" />
    </label>

    <label>
        <span>Your Name (Salesman):</span>
        <input type="text" name="salesman" placeholder="Name" />
    </label>
    <label>
        <span>Construction Name:</span>
        <input type="text" name="construction" placeholder="Construction Name" />
    </label>
    <label>
        <span>City:</span>
        <input type="text" name="city" placeholder="City" />
    </label>

    <label>
        <span>Items:</span>
        <input type="text" name="id_item" placeholder="Item" />
    </label>    

     <label>
        <span>&nbsp;</span> 
        <input type="button" class="button" value="Send" /> 
    </label>    
</form>

这是订单的表格。我需要能够输入我要输入的项目的值(例如5),然后我需要“项目”输入显示5次。我还需要能够将其删除,以便用户自行纠正。我不知道如何在Javascript中编码,这甚至可能吗?怎么样?我需要稍后作为控制器中的数组访问它。这就是为什么我将该字段的名称作为数组。提前感谢您的帮助。

编辑:我刚刚发现了类似于我需要的内容:http://www.sanwebe.com/2013/03/addremove-input-fields-dynamically-with-jquery 我只是不希望它成为一个按钮,而是一个带有数字输入的字段,并且它没有限制。我希望我知道Javascript:&lt;

EDIT2:也许我写的不清楚,但我可以使用Javascript,我只是不知道如何正确编程,所以如果有人知道如何在Javascript中实现,我会很高兴。

3 个答案:

答案 0 :(得分:0)

听起来您需要询问用户要订购的商品数量,然后当用户向您提交页面时,使用$_SESSION将表单数据保存到数组中。显示的下一页将提供项目文本元素供用户完成。

你基本上想要:

  • 开始会话
  • 如果设置了$_POST['id_item']
    • 将所有变量保存到$_SESSION
    • 使用id_item循环
    • 根据for生成项目输入
  • 如果提供了项目
    • $_SESSION检索以前的表单数据,与新项目信息结合
  • 否则
    • 显示初始表单

(个人注意:Javascript会让这更好更容易)

答案 1 :(得分:0)

如果没有脚本语言,我不相信这是可能的。我想你可以使用更简单的内联&#39;用于显示后续元素的脚本,例如:

<div id="item1div">
Item 1:<input name="item1" value="" onFocus="getElementById('item2div').style.display='block';">
</div>
<div id="item2div" style="display:none;">
Item 2:<input name="item2" value="" onFocus="getElementById('item3div').style.display='block';">
</div>
...
<div id="item10div" style="display:none;">
Item 10: <input name="item10" value="">
</div>

这会在选择上一个项目时显示每个项目。它有自己的问题,它是你所要求的真正简化,但它可以实现你的基本目标,而无需在JS中编写函数。

答案 2 :(得分:0)

当我说使用session + PHP时,这就是我所指的。你可以用PHP完成所有这些,虽然javascript是最佳的。我没有提供一种删除会话输入的方法,但是使用其他表单元素就足够了。另外,我没有在重新加载时做任何回显值。如果您真的不想使用javascript,这只是一个选项:

<?php
    // Put at top of page
    session_start();
    // Also somewhere at top of page
    // Check post empty and assign post to a session for continual use
    if(!empty($_POST)) {
            $_SESSION['form']   =   $_POST;
        } ?>

<form action="" method="post" class="smart-green">
    <h1>Contract Form 
        <span>Please fill all the texts in the fields.</span>
    </h1>
    <label>
        <span>Client:</span>
        <input type="text" name="client" placeholder="Your Client Name" />
    </label>

    <label>
        <span>Your Name (Salesman):</span>
        <input type="text" name="salesman" placeholder="Name" />
    </label>
    <label>
        <span>Construction Name:</span>
        <input type="text" name="construction" placeholder="Construction Name" />
    </label>
    <label>
        <span>City:</span>
        <input type="text" name="city" placeholder="City" />
    </label>

    <label>
        <span>Items:</span>
        <input type="text" name="id_item" placeholder="Item" />
    </label>    
    <label for="new">Add Fields</label>
    <select name="new" id="new">
        <option value="">Select</option>
        <option value="1">Add 1</option>
        <option value="2">Add 2</option>
        <option value="3">Add 3</option>
        <option value="4">Add 4</option>
    </select>
    <?php
        // This checks if new has been posted
        if(isset($_POST['new']) && $_POST['new'] >= 1) {
        // Check if there are inputs in the queue
        $count  =   (isset($_SESSION['form']['new_input']) && !empty($_SESSION['form']['new_input']))? count($_SESSION['form']['new_input']):1;
        // Loop
        for($i = $count; $i <= $_POST['new']+$count; $i++) { ?>
    <input type="text" name="new_input[<?php echo $i; ?>]" id="new-<?php echo $i; ?>" />
    <?php }
    }

    // Loop through sessioned inputs
    if(isset($_SESSION['form']['new_input'])) {
        $i = 0;
        foreach($_SESSION['form']['new_input'] as $key => $value) { ?>
    <input type="text" name="new_input[<?php echo $key; ?>]" id="new-<?php echo $key; ?>" value="<?php echo strip_tags($value); ?>" />
    <?php }
    } ?>
    <button name="add_new" value="new">Add New</button>

    <label>

        <span>&nbsp;</span> 
        <input type="button" class="button" value="Send" /> 
    </label> 
</form>