【问题标题】:javascript/jquery clone not working in dropdown listjavascript/jquery 克隆在下拉列表中不起作用
【发布时间】:2013-07-23 13:20:11
【问题描述】:

我在上一篇文章中提出了一个问题,即我希望动态生成行并将数据复制到新行中。它工作正常,但仅适用于文本字段。但我的表单中也有下拉菜单,它没有在新行中显示最后一行的选定选项。 这是我的问题 add previous row data to dynamically generated row

我有 html 代码:

<form>
    <table border="1" id="engagements">
        <tr>
            <th>
                <input type="checkbox" onclick="checkAll(this)" />
            </th>
            <th>Organization</th>
            <th>Project</th>
            <th>Product</th>
            <th>Activity</th>
        </tr>
        <tr>
            <td>
                <input type="checkbox" onclick="checkAll(this)" />
            </td>
            <td>
                <select>
                    <option value = "1">One</option>/>
                     <option value = "1">two</option>/>
            </td>
            <td>
                <input type="text" />
            </td>
            <td>
                <input type="text" />
            </td>
            <td>
                <input type="text" />
            </td>
        </tr>
    </table>
    <select name="mode" id="mode">
        <option value="">Add More Rows with Same Data as Above</option>
        <option value="1">1 More</option>
        <option value="2">2 More</option>
        <option value="3">3 More</option>
        <option value="4">4 More</option>
        <option value="5">5 More</option>
    </select>
</form>

和脚本代码:

$("#mode").on('change', function () {
    var rows = parseInt(this.value);
    console.log(rows);
    var lastRow;
    for (var i = 0; i < rows; i++) {
        lastRow = $('#engagements tr').last().clone();
        $('#engagements tr').last().after(lastRow);
    }
});

JS 小提琴:http://jsfiddle.net/jW6eL/3/

【问题讨论】:

标签: javascript jquery clone


【解决方案1】:

出于性能原因,jquery 在克隆元素时不会保留选择。但是,您可以尝试使用

    .clone(true) 

这将使用下拉菜单复制所有事件和数据。这样您就可以使用事件并在下拉菜单中选择最后一个选项。

【讨论】:

    【解决方案2】:

    试试这个

    http://jsfiddle.net/jW6eL/7/

    $("#mode").on('change', function () {
        var rows = parseInt(this.value);
        console.log(rows);
        var lastRow;
        for (var i = 0; i < rows; i++) {
            lastRow = $('#engagements tr').last().html();
            $('#engagements tr:last').after('<tr>'+lastRow+'</tr>');
            $('#engagements tr:last').find('select').each(function(){
                var this_select=$(this);
                this_select.val(this_select.closest('tr').prev().find('td:eq('+this_select.closest('td').index()+')').find('select').val())
            })
        }
    });
    

    【讨论】:

    • 这仅在第一个 ddl 中有效,但我在表单中有 5 个 ddl
    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多