我试图在克隆元素时更改我的元素的ID,基本上我保留一个计数器,我每增加一次,并在每次克隆时将其添加到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+"_"));
});
});
});
}
}
对不起,如果我的代码有点不清楚。
基本上我的第一回路经过我的所有列表中的元素(除了模板与一个虚拟数据)时会为每个“答”和取代双下划线‘__’为‘我’,其中i是一个计数器。
对于某些dang的原因,我总是1.我知道每个列表项的值增量,因为如果我在尝试重新分配id之前和之后提醒它的值,值就会上升,但在实际分配中它总是1.
这是我非常困惑的地方。任何帮助将不胜感激:)
编辑:
这是一些HTML。基本上我通过我的清单项目在这里循环和改变我的输入编号和名称,所以我可以处理它们一旦被提交:
<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函数。
在我看来,你的代码应该正常工作。 'i'变量可以被两个循环访问,并且在读取时应该在每个点保持适当的递增值。我用一个简单的HTML结构做了一个测试,并且它工作正常。你有什么机会可以在你的问题中展示你的HTML? – user113716 2010-06-29 21:34:32
我发布了一些HTML并发布了我的整个JavaScript函数。 – Gazillion 2010-06-30 13:06:09
好吧,我绕过了我的问题。我并不真的需要一个唯一的ID,所以我只是改变了name属性,所以某个语言的所有问题都被添加到一个数组中。感谢您的帮助:) – Gazillion 2010-06-30 15:09:01