Клонирование элементов и добавление в код разметки, чтобы отправка формы их забрала

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

При нажатии кнопки клонирования поля размера и длины должны быть клонированы и размещены ниже. Важным моментом является то, что я должен иметь возможность видеть этот клонированный код разметки, когда я проверяю исходный код браузера, потому что я отправлю все поля.

введите описание изображения здесь

HTML

 <style>
    div { display:inline-block; }
    .needles, .yarns, .options { border:1px solid #14A; padding:10px; }
</style>

<div class='needles'>
    <p>NEEDLES</p>
    <div class='options'>
        <div class='label'>Size</div>
        <div class='field'>
            <input id='size-0' name='size-0' value='Size' />
        </div>
    </div>
    <br />
    <div class='options'>
        <div class='label'>Length</div>
        <div class='field'>
            <input id='length-0' name='length-0' value='Length' />
        </div>
    </div>
    <br /><br />
    <button>Clone</button>
</div>

<br />

<div class='yarns'>
    <p>YARNS</p>
    <div class='options'>
        <div class='label'>Size</div>
        <div class='field'>
            <input id='size-0' name='size-0' value='Size' />
        </div>
    </div>
    <br />
    <div class='options'>
        <div class='label'>Length</div>
        <div class='field'>
            <input id='length-0' name='length-0' value='Length' />
        </div>
    </div>
    <br /><br />
    <button>Clone</button>
</div>
 

Я сделал что-то подобное, но, честно говоря, я думаю, что это беспорядок.

  $("button").click(function(event) {
     event.preventDefault();

     var $parent = $(this).closest('div');
     var $length = $parent.prev();
     var $size = $length.prev();

     var size = $size.clone(false).wrap('<p>').parent().html();
     var length = $length.clone(false).wrap('<p>').parent().html();

     var spanId = $(size).children('span').attr('id');
     var idArray = spanId.split("__");
     var currentIdentifierNo = idArray[idArray.length-2];
     var newIdentifierNo = parseInt(currentIdentifierNo) 1;
     var currentIdentifier = '__'   currentIdentifierNo   '__';
     var newIdentifier = '__'   newIdentifierNo   '__';

     var re = new RegExp(currentIdentifier, 'g');
     size = size.replace(re, newIdentifier);
     length = length.replace(re, newIdentifier);

     var html = size   length;
     $(this).before(html);
 });
 

Ответ №1:

Вы должны изменить name атрибут, чтобы это работало:

 length.find('input').attr('name', 'length-1');
size.find('input').attr('name', 'size-1');
 

Если вы отправляете одни и те же пары ключ / значение в форме, сервер не знает, что есть что.

Комментарии:

1. Мне нужен полный код jquery. У меня очень ограниченные знания о jquery. Это звучит как «сделай это для меня», но, к сожалению, я даже не могу превратить то, что мне сказали, в код.

2. К сожалению, я не могу написать это для вас. Основная идея заключается в том, чтобы в конечном итоге получить length-0, length-1, size-0, size-1 в вашей форме.