3

我有这个 html

<form method="POST" action="" id="order" class="forms">
    <div>
        <span class="col1">Ref.</span>
        <span class="col2">Number</span>
        <span class="col3">Color</span>
        <span class="col4">Remarks</span>
        <span class="col5">Prijs</span>
    </div>
    <div class="order">
        <input type="text" name="ref-1" class="col1" />
        <input type="text" name="num-1" class="col2" />
        <input type="text" name="color-1" class="col3" />
        <input type="text" name="remark-1" class="col4" />
        <input type="text" name="price-1" class="col5" />
    </div>
    <a id="add" href="#">+</a>
</form>

而这个jQuery

$("#add").click(function() {     
    $("#order").children(":eq(1)").clone().each(function() {
            var index = $("#order").children().length - 1;
            alert(index);

        $(this).children().find(":input").each(function() {

                alert(index);

                    $(this).attr("[name]", function(i, v) {

                        return v.substr(0, v.lastIndexOf("-") + 1) + index;

                    }).val("");

                });
    }).insertBefore("#add");
});

我需要将每个输入名称的 -1 部分替换为增量值。但是 js 永远不会到达该$(this).attr()函数当我运行此代码时,当我单击时它不会显示第二个警报框#add

4

2 回答 2

3

我还没有检查你的整个代码,但有一个明显的错误

.attr("[name]"

应该

.attr("name"

您还需要.children()从行中删除

$(this).children().find(":input")

并做到

$(this).find(":input")

这是因为this指的div是包含输入的元素。通过运行.children()它会返回input元素,并且通过运行find()它不会返回任何内容,因为 find 会在选定的元素内部查找,不包括运行它的元素。

http://jsfiddle.net/gaby/TpmdP/更新了 jsfiddle

于 2011-04-12T10:02:47.023 回答
0

删除 .find(":input") 并将 ":input" 作为参数传递给 .children()。children() 甚至可以通过过滤元素来检索子元素。

于 2011-04-12T10:11:50.110 回答