【问题标题】:Dynamically add dropdown and dropdown fields动态添加下拉列表和下拉字段
【发布时间】:2016-10-19 09:05:12
【问题描述】:

编辑 001:

补充说: - event.preventDefault(); 和锚点而不是按钮

<div class="edit-area">
 <div class="controls">
    <a href="#" class="add">+</a>
    <a href="#" class="rem">-</a>
 </div>
</div>

现在页面+-不会让页面发送表单,但现在它什么也不做:s


我正在处理联系表格,但我有一些问题/疑问。

  • 我想在他们按下按钮 (+) 时动态添加字段
  • 当然,他们需要能够在需要时删除它... (-)

当我现在按下 + 按钮时,它会尝试像提交按钮一样发送表单...

脚本

<script>
        (function($) {
            "use strict";

            var itemTemplate = $('.example-template').detach(),
                editArea = $('.edit-area'),
                itemNumber = 1;

            $(document).on('click', '.edit-area .add', function(event) {
                var item = itemTemplate.clone();
                item.find('[project]').attr('project', function() {
                return $(this).attr('project') + '_' + itemNumber;
            });
            ++itemNumber;
            item.appendTo(editArea);
        });

        $(document).on('click', '.edit-area .rem', function(event) {
            editArea.children('.example-template').last().remove();
        });

        $(document).on('click', '.edit-area .del', function(event) {
            var target = $(event.target),
            row = target.closest('.example-template');
            row.remove();
        });

    }(jQuery));
</script>

HTML

<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="POST" name="contact">
    <div class="row uniform 50%">
        <div class="6u 12u(mobilep)">
            Your personal card number
            <input type="text" name="card2" id="card" value="<?php echo $_SESSION['username']; ?>" placeholder="Card Number" readonly/>
        </div>
        <div class="6u 12u(mobilep)">
            Your name
            <input type="text" name="name2" id="name" value="<?php echo $_SESSION['realName']; ?>" placeholder="Your name" readonly/>
        </div>
    </div>
    <div class="row uniform 50%">
            <div class="6u 12u(narrower)">
                Order tickets for a project.
            </div>
    </div>
<div class="example-template">
    <div class="row uniform 50%" id="readroot">
            <div class="4u 12u(narrower)">
            <select name="project" id="ddl" onchange="configureDropDownLists(this,document.getElementById('ddl2'))">
            <option disabled selected>Select a project</option>
                <option value="Smile">Project Smile</option>
                <option value="Sand">Project Sand</option>
                <option value="Schmuck">Project Schmuck</option>
            </select>
            </div>
            <div class="4u 12u(narrower)">
            <select id="ddl2" name="date">
                    <option disabled selected>Select a date</option>
            </select>
            </div>
            <div class="2u 12u(narrower)">
            <input type="text" onkeypress='return event.charCode >= 48 && event.charCode <= 57' name="amount" id="currentamount" value="" placeholder="Amount" />
            </div>
        </div>  
        <div class="edit-area">
        <div class="controls">
            <button class="add">+</button>
            <button class="rem">-</button>
        </div>
    </div>
    <div class="row uniform 50%">
        <div class="6u 12u(mobilep)">
            <input type="hidden" id="currentprice" value="10" />
        </div>
    </div>          
        <div class="6u 12u(mobilep)">
            <input type="hidden" id="nextprice1" value="10" placeholder="" />
        </div>
    </div>
    <div class="row uniform">
        <div class="12u">
        </div>
    </div>
        <div class="4u 12u(mobilep)">   
        Total price.(In EUR)
        <input type="text" name="total2" id="total" value=""  readonly/>
    </div>

    <div class="row uniform">
        <div class="12u">
            <ul class="actions align-center">
                <li><input type="submit" name="submit"value="Place Order"/></li>
            </ul>
        </div>
    </div>
</form>

表单图片(此处未显示 ID 和名称)

【问题讨论】:

    标签: javascript php jquery html contact-form


    【解决方案1】:

    将您的按钮更改为锚点:

    <a href="#" class="add">+</a>
    <a href="#" class="rem">-</a>
    

    然后在您的 javascript 中,当点击时,一定要调用 preventDefault() 以阻止它像标准链接一样运行。

    $(document).on('click', '.edit-area .rem', function(event) {
        event.preventDefault();
        editArea.children('.example-template').last().remove();
    });
    
    $(document).on('click', '.edit-area .del', function(event) {
        event.preventDefault();
        var target = $(event.target),
        row = target.closest('.example-template');
        row.remove();
    });
    

    我认为,或者,您可以将type 添加到按钮,这样它就不会默认为submit 类型(但不要引用我的话):

    <button type="button" class="add">+</button>
    

    【讨论】:

    • 如果添加event.preventDefault(),它是按钮还是锚点都没有关系。但是如果页面上的任何脚本出错(并且停止渲染 JS,那么锚点会更好,因为它不会意外提交表单)。
    • 表单现在没有发送,但我也没有收到任何额外的字段:p
    • 尝试在您的 sn-p 中执行一些 console.log 语句以添加代码以确保您的选择器与您认为需要的匹配。
    • 看起来没有错误(或者我做错了)。提供整个 PHP 文件会有所帮助吗? - 我正在做各种各样的事情,并且把它搞得比我应该做的还要多:p
    • 我怀疑它与您使用 detach() 并随后立即尝试绑定到该模板中的一个元素有关,该元素不再存在于 DOM 中。
    猜你喜欢
    • 2014-09-27
    • 2015-10-06
    • 1970-01-01
    • 2016-10-20
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    相关资源
    最近更新 更多