JQuery 克隆不保留单选和选择状态

标签 jquery clone

单击复制链接时,我将克隆当前行。创建新行时,不会保留单选按钮的旧状态。

我需要克隆当前行,它也应该保留旧行的输入元素状态。

代码

$("#MyLastOrder tr .BtnPlus").click(function () {

$($(this).parent().parent()).clone(true, true).appendTo("#MyLastOrder");
var totalRows = document.getElementById("totalrows").value;
var qtyrow = "totalqty_" + eval(parseInt(totalRows) + 1);
var weightrow = "weight_" + eval(parseInt(totalRows) + 1);
var brandrow = "br_" + eval(parseInt(totalRows) + 1);

$("#MyLastOrder tr:last").find("input:radio").each(function () {

    var curName = $(this).attr('name');
    console.log("curname" + $(this).attr('name') + curName.substr(0, 2));
    $(this).attr('name', function (_, id) {
        var currentNameAttr = $(this).attr('name');
        if (curName.substr(0, 2) == "br") {
            $(this).attr('name', brandrow);
        }
        if (curName.substr(0, 2) == "we") {
            $(this).attr('name', weightrow);
        }

    });

});

$("#MyLastOrder tr:last").find("select").each(function () {
    var curName = $(this).attr('name');
    console.log("curname" + $(this).attr('name') + curName.substr(0, 2));
    $(this).attr('name', function (_, id) {
        var currentNameAttr = $(this).attr('name');
        if (curName.substr(0, 3) == "tot") {
            $(this).attr('name', qtyrow);
        }
    });

});
var incTotalRows = parseInt(totalRows) + 1;
document.getElementById("totalrows").value = incTotalRows;

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table class="table" id="MyLastOrder">
<thead>
    <tr id="header1">
        <th>Brand</th>
        <th>Type</th>
        <th>Qty</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>
            <input name="br_1" value="13" type="radio" checked="true">&nbsp;xyz<br>
            <input name="br_1" value="16" type="radio">&nbsp;xyz<br>
            <input name="br_1" value="17" type="radio">&nbsp;xyz<br>
        </td>
        <td>
            <input name="weight_1" value="1" type="radio">&nbsp;1gm<br>
            <input name="weight_1" value="2" type="radio" checked="">&nbsp;2gm<br>
        </td>
        <td>
            <select name="totalqty_1">
                <option selected="">1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
                <option>5</option>
                <option>6</option>
                <option>7</option>
                <option>8</option>
                <option>9</option>
                <option>10</option>
            </select>
        </td>
        </td>
        <td><a href="javascript:void(0)" class="BtnPlus"><img src="images/copyitem.png" title="Copy"></a></td>
    </tr>
</tbody>
</table>
<input type="hidden" name="totalrows1" id="totalrows" value="2">
<!--this hidden is to act as counter and increment input elements name when cloning. this will be dynamically updated when a row is cloned.-->

最佳答案

它不会保留前一行的状态,因为您在新行中附加了与前一行具有相同名称的单选按钮。所以前面的内容当然不会被选中。

您要做的是首先克隆行,然后在克隆行中找到单选按钮,更改名称,然后附加克隆的行。

var $clone = $($(this).parent().parent()).clone(true, true);

$clone.find(":radio").each(function () {
    // previous code
});

// and later
$clone.appendTo("#MyLastOrder");

演示:http://jsfiddle.net/q1wphkpb/

关于JQuery 克隆不保留单选和选择状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27588628/

相关文章:

javascript - highcharts 热图元素不透明度变为 0

javascript - 通过更改解析字符串在同一页面上多次重用 highchart 图表

c++11 - C++中std::shared_ptr的克隆模式

Java 深度克隆 - 如果可克隆,则克隆 ArrayList 中的每个元素,无论类型如何

javascript - 如何从js文件中获取html脚本src值?

单击 jQuery 显示 div 但它闪烁并消失

jquery - iPhone 故障,将 div 完美地移动到上面的 div

c# - 无法访问 protected 成员 'object.MemberwiseClone()'

java - 如何克隆 java keystore 实例?

c# - 在 C# 中创建结构的浅拷贝