2013-10-24 5 views
0

Проект, над которым я работаю, требует формы, в которой его текстовые области необходимо дублировать, если пользователь сам это требует. Элемент клонируется и добавляется к #mp, когда нажата кнопка, селектор #AddAnswer. Я пытался присвоить идентификаторы с помощью следующего кода JQuery:Как назначить новый уникальный идентификатор клонированному элементу HTML?

$('#AddAnswer').click(
    function() { 
     for(var i=0; i<=10;i++) 
      $clone=$('textarea[name="antwoord"]:first').clone().attr('id', 'list'+i); 
      console.log($clone); 
      $('#mp').append($clone); 
      return false; 
}); 

К сожалению, это только присваивает номер 10 позади селектора «#line». Может ли кто-нибудь помочь мне слегка настроить этот код так, чтобы идентификатор просто увеличивался на единицу как элемент, клонированный?

+0

Так что вы хотите создать десять клонов, когда вы нажимаете на AddAnswer и каждый из них имеет инкрементный идентификатор? – wootscootinboogie

+0

@wootscootinboogie - Мне нужно дублировать текстовые поля, чтобы административные пользователи могли заполнять ответы на вопросы для ответов на несколько вопросов. В этом случае я просто попытался использовать 10 в условии оператора for для проверки кода. Конечно, 10 не будут лучшим выбором вариантов. У нас также есть очень придирчивые и легкомысленные люди в этом мире. Опять же, когда я клонирую элемент, я хотел бы, чтобы число в id увеличивалось на 1. –

+0

, если можно, я думаю, было бы неплохо, если бы camelCase ваши html-элементы. addAnswer более стандартен, чем AddAnswer – wootscootinboogie

ответ

0

я бы создать новый индекс, основанный на количестве элементов, которые вы уже имеете

$('#AddAnswer').on("click",function() { 
    var idx = $('textarea[name^="antwoord"]').length+1, 
     $clone = $('textarea[name^="antwoord"]:first').clone().attr('id', 'antwoord_'+idx); 
    $('#mp').append($clone); 
    return false; 
}); 

тест на http://fiddle.jshell.net/Uj5W7/2/

другая возможность будет работать с index()

$('#AddAnswer').on("click",function() { 
    var idx = $('textarea[name^="antwoord"]:last').index()+1, 
     $clone = $('textarea[name^="antwoord"]:first').clone().attr('id', 'antwoord_'+idx); 
    $('#mp').append($clone); 
    return false; 
}); 

тест на http://fiddle.jshell.net/Uj5W7/3/

+0

Есть ли способ добавить/добавить письмо для ответа на основе заявленного количества ответов в переменной« idx »? Требуется ли утверждение if? –

+0

Не знаете, правильно ли я вас понимаю: вы можете обернуть 'li' вокруг' textarea' с помощью 'list-style-type: decimals'. см. здесь: http://fiddle.jshell.net/Uj5W7/4/. Или: просто добавьте индекс перед текстовым полем с '$ clone.before (idx)'. в этом случае вы должны использовать возможность «.length + 1» – Tschitsch

0

Попробуйте следующий код:

//Defaults to 1 
var numAnswers = 1; 

$('#AddAnswer').click(function() { 
    //Gets the clone and sets the ID to be list + Number of Answers 
    $clone = $('textarea[name="antwoord"]:first').clone().attr('id', 'list'+numAnswers); 
    console.log($clone); 
    $('#mp').append($clone); 
    //Add 1 to number of answers 
    numAnswers += 1; 

    return false; 
}); 

Это добавит текстовое поле для управления каждый раз, когда кнопка нажата AddAnswer.

Если вы хотите добавить больше чем один в то время, попробуйте следующее:

//Defaults to 1 
var numAnswers = 1; 

$('#AddAnswer').click(function() { 
    var numToAdd = 10; 
    var startNum = numAnswers + 1; 
    var endNum = numToAdd + numAnswers;   

    for(var i=startNum; i <= endNum;i++) { 
     //Gets the clone and sets the ID to be list + current Answer number 
     $clone = $('textarea[name="antwoord"]:first').clone().attr('id', 'list'+i); 
     console.log($clone); 
     $('#mp').append($clone); 
     //Add 1 to number of answers 
     numAnswers += 1;    
    } 
    return false; 
}); 

Второй подход добавляет 10 пунктов, в то время, и добавит к количеству элементов, т.е. первый раз, когда он будет добавлен пункты до 11, а затем пункты до 21 и т.д.

+0

Это сработало отлично! Хотя, я хотел бы, чтобы количество текстовых полей было проиндексировано, как описано в решении выше. Есть ли способ добавить/добавить письмо для ответа на основе указанного количества ответов в переменной idx? Требуется ли утверждение if? –

+0

Не совсем уверен, что вы имеете в виду, добавив/добавьте письмо. Что именно означает «письмо», о котором вы говорите? jQuery может добавлять/продлевать, используя следующие методы соответственно: ['.append()'] (http://api.jquery.com/append/) ['.prepend()'] (http: //api.jquery. com/prepend /) – Nunners

+0

То, что я подразумеваю под буквой, - это письмо, которое относится к варианту ответа. Как ответ «А.» или ответ «B.». Я хотел бы, чтобы письмо было автоматически назначено на вариант ответа, поскольку клонирование textarea. –

0

попробовать что-то вроде этого

  $('#AddAnswer').click(function() { 
       for(var i=0; i<=10;i++) 
       { 
        $clone=$('textarea[name="antwoord"]:first').clone().attr('id', 'list'+i); 
        $('#mp').append($clone); 
       } 
       return false; 
      }); 
Смежные вопросы