Клонировать div и переименовывать идентификаторы элементов постепенно - PullRequest
2 голосов
/ 24 октября 2010

Хорошо, допустим, у меня есть div с элементами формы внутри него. Я хочу иметь возможность клонировать этот div с помощью нажатия кнопки, используя jQuery, и добавить версию 2 формы, поэтому ВСЕ идентификаторы элементов будут увеличиваться на 1 в их имени.

<div id="card">
    <!-- PART 1 --> 
    <h1 class="card_build">Build your card options:</h1>

    <select id="country" name="country[]">
        <?php
            include('lib/class_dbcon.php');
            $connect = new doConnect();

            $q = mysql_query("SELECT * FROM country ORDER BY country_id ASC");
            while($row = mysql_fetch_assoc($q))
            {
                echo '<option value="'.$row['country_id'].'">'.$row['country_option'].'</option>';
            }
        ?>
    </select>

    <select id="filter" name="filter[]">
        <option value="">-- Select Filter --</option>
    </select>

    <select id="load_choice" name="load_choice[]">
        <option value="">-- Select Load_choice --</option>
    </select>

    <select id="plastic" name="plastic[]">
        <option value="">-- Select Plastic --</option>
    </select>

    <select id="UG_tipping" name="UG_tipping[]">
        <option value="">-- Select UG/Tipping --</option>
    </select>
    <!-- PART 1 -->
    <!-- PART 2 -->
    <div id="part2" style="margin-top:10px;">
    <h1 class="card_build">Customize the card:</h1>
    <input type="text" name="3rdLine" size="32" class="field" id="3rdLine">
    <input type="text" name="4thLine" size="32" class="field" id="4thLine">
    <input type="text" name="card_value" size="32" class="field" id="card_value">
    <label for="showpoints">Show "Points"?</label>
    <input type="checkbox" value="points" class="checkbox" checked="checked">
    <label for="cobrand">Co-branded?</label>
    <input type="checkbox" value="cobrand" class="checkbox" checked="checked">
    <textarea rows="5" name="message" class="textarea" id="message"></textarea>
    <hr>
    </div>
    <!-- PART 2 -->
</div>
    <a href="#" onCLick="moreFields()">ADD</a>

Так что, если вы посмотрите на этот код и в конце щелкните ссылку ADD, она дублируется, превращается в нее и делает то же самое со всеми идентификаторами элементов внутри div. Одним из ключевых моментов в работе является то, что мне нужно МАКСИМАЛЬНОЕ из 5 клонов, поэтому сценарий может увеличиваться только в 4 раза (или 5, это на самом деле не имеет значения, пока я вижу способ создания максимума).

Мой единственный другой вопрос: останется ли инъекция PHP в такте при клонировании div? Спасибо заранее, я всю ночь ломал себе голову на этом.

1 Ответ

1 голос
/ 24 октября 2010

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

Сначала DOM (пример):


<div id="card">
    <div class="group">
        <select id="country" name="country[]">
            <option>select</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
        </select>
        <select id="filter" name="filter[]">
            <option>select</option>
            <option>1</option>
            <option>2</option>
            <option>3</option>
            <option>4</option>
        </select>
    </div>
</div>
<a id="more" href="">More</a>

Затем jquery:


$(function(){
    var newgroup = $('<div>').addClass('group');
    $('#more').click(function(e){
        e.preventDefault();
        $('.group').first().clone().appendTo(newgroup).appendTo('#card');
    });

    $('.group #country').live('change',function(){
        $(this).parent().find('#filter').val(1);
    });
});
...