当我克隆一个元素时,我正在尝试更改元素的id,基本上我保留了一个我增量的计数器,并在每次克隆时在id的末尾添加它。看起来很简单。
var addAnswerFlag = true;
function addAnswer(button)
{
//flag to keep clicks from chaining
if(addAnswerFlag)
{
addAnswerFlag = false;
$('#answer_warning').fadeOut(600);
$('.template').clone().attr('id','').insertAfter($('.template')).fadeIn(300, function() {
$(this).removeClass('template');
addAnswerFlag = true;
$('.answer_li:not(.template)').each(function(index){
++index;
$(this).children('.answer').each(function(){
$(this).attr('id', $(this).attr('id').replace("__", "_"+index+"_")).attr('name',$(this).attr('name').replace("__", "_"+index+"_"));
});
});
});
}
}
很抱歉,如果我的代码有点不清楚。
基本上我的第一个循环遍历我的所有列表元素(除了带有虚拟数据的模板)并且每个'.answer'并替换“ i ”的双下划线“__”我是一个柜台。
由于某些原因,我总是1.我知道每个列表项的值增量,因为如果我在尝试重新分配id之前和之后警告其值,则值会增加,但在实际分配中它始终为1
这是我非常困惑的地方。任何帮助将不胜感激:)
编辑:
这是一些HTML。基本上我在这里循环浏览我的列表项并更改输入的ID和名称,以便我们可以在提交后处理它们:
<ul id="answers">
<li style="" class="answer_li template">
<input id="question__en" name="question_[en]" class="answer" value="" type="text">
<input id="question__fr" name="question_[fr]" class="answer" value="" type="text">
</li>
<li id="" style="display: list-item;" class="answer_li">
<input id="question_1_en" name="question_[en]" class="answer" value="" type="text">
<input id="question_1_fr" name="question_[fr]" class="answer" value="" type="text">
</li>
</ul>
正如您所看到的,第一个是我的模板,第二个是在下划线之间添加了索引。但是,当我克隆模板时,它们都获得相同的索引。我真的不明白,因为如果我警告它的值正确增加,我很困惑,我回到基本的javascript教程,看看我是否错过了某种我偶然使用的操作符:)
我还发布了当我点击一个按钮(我作为参数传递)时调用的整个javascript函数。
答案 0 :(得分:3)
每个函数都将提供索引(从零开始),因此不需要保留单独的变量。请注意,index
将是每次迭代的新值,因此您无需判断闭包是否正确。
$('.answer_li:not(.template)').each( function(index){
++index; // to get one-based values
$(this).children('.answer').each( function(){
$(this).attr('id', $(this).attr('id').replace("__", "_"+index+"_")).attr('name',$(this).attr('name').replace("__", "_"+index+"_"));
});
});