jQuery clone () проблема внутри формы - PullRequest
2 голосов
/ 30 декабря 2010

Я делаю форму в CakePHP с помощью jQuery. Моя проблема в том, что мне нужно иметь возможность клонировать некоторые поля формы с помощью jQuery. Форма является резервированием, и мне нужно клонировать данные клиента, чтобы добавить более 1 клиента (если это группа).

Я использую этот код:

var idx = 0;
        $(document).ready(function() {
            $("#addCustomerFields").click(function() {
                idx = idx + 1;
                var x = $("#Cliente").clone();
                $(x)
                    .attr("id", "Client." + idx)
                    .find("label").each(function() {
                        $(this).attr("for", $(this).attr("for").replace(".0", "." + idx));
                    })
                    .end()
                    .find("input").each(function() {
                        $(this)
                            .attr("id", $(this).attr("id").replace(".0", "." + idx))
                            .attr("name", $(this).attr("name").replace("[0]", "[" + idx + "]"));

                        //this.value = '';
                    })

                $("#CustomerFields").append(x);
            });
        });

Работает нормально, но только с полями для ввода текста. Выпадающие (выберите) не работают. Похоже, что атрибуты select (id и name) не изменены скриптом. Когда я добавляю 2 клиентов, сначала один мужчина и вторая женщина в базу данных, первый появляется как женщина, а второй - без секса. Каждое поле имеет свое имя и идентификатор: Клиент [0] [Имя], Клиент [0] [Пол] и т. Д. Когда я клонирую, я увеличиваю число, и это работает только при вводе текста.

Вид:

<fieldset id="Cliente">
        <legend class="legend"><?php __('Client Info'); ?></legend>
    <?php

        //this is select
        echo $this->Form->input('Client.0.sex_id', array(
            'label'=>'Gender', 
            'div'=>'float IconSex',
            )
        );
        echo $this->Form->input('Client.0.firstname', array(
            'label'=>'First name', 
            'div'=>'float IconUser'
            )
        );
        echo $this->Form->input('Client.0.lastname', array(
            'label'=>'Last name', 
            'div'=>'float IconUser'
            )
        );

        //another select
        echo $this->Form->input('Client.0.country_id', array(
            'label'=>'Country', 
            'div'=>'clear IconCountry',
            'default'=>'121'
            )
        );

    ?>

    </fieldset><div id="CustomerFields"></div>

    <?php 
    echo $this->Html->div('IconAdd', 'Add customer.', array(
            'id'=>'addCustomerFields', 
            )
        );
    ?>

Есть идеи?

1 Ответ

1 голос
/ 30 декабря 2010

Вы только выбираете элементы ввода с вашим текущим кодом .find("input").each(function(...

Попробуйте .find(":input") до соответствовать все входы (выбор, входы, текстовое поле и т. Д.)

или просто используйте

$('select, input')

для сопоставления входов и выберите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...