无法更改我的元素的ID

时间:2010-06-29 20:55:45

标签: jquery

当我克隆一个元素时,我正在尝试更改元素的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函数。

1 个答案:

答案 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+"_"));         
    });
});