проблема, когда клон - jquery - PullRequest
6 голосов
/ 10 июня 2011

Я использую этот плагин

Теперь я делаю способ клонировать выпадающий список. Кнопка для добавления клонированных div. Итак, у пользователя есть начальный выпадающий список, но он может добавить больше. Div клонируется.

Основная проблема в том, что когда я клонирую div, выпадающий список ассоциируется с начальным выпадающим списком, а no - с новым, который клонируется Результат: все выпадающие списки новых клонированных элементов имеют событие для открытия выбора, связанного с первым.

enter image description here

Скрипт для вызова плагина в

<script language="javascript" type="text/javascript">
$(document).ready(function() {
        $(".mydds").msDropDown();
})

</script>

скрипт для клонирования

<script type="text/javascript">
    $(document).ready(function() {
        $('#adicionar').live('click', function(){
            var num = $('.linguas').length;
            var newNum = new Number(num + 1);

            var newElem = $('#copiar' + num).clone(true).prop('id', 'copiar' + newNum);

            newElem.children(':text').prop('name', "myformdata[languages" + newNum + "]").prop('languages', 'languages' + newNum).val('');
            $('#copiar' + num).after(newElem);
            $('#apagar').prop('disabled', '');

        });

</script>

Есть идеи для решения проблемы? В основном я думаю, что событие, связанное с выпадающим списком, не копируется ... спасибо

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Если у вас есть только один выпадающий список на клонированный элемент, вы можете использовать

$('#adicionar').live('click', function(){
    var num = $('.linguas').length;
    var newNum = new Number(num + 1);

    var newElem = $('#copiar' + num).clone(true, true).attr('id', 'copiar' + newNum);

    var id = newElem.find('select').msDropDown().data('dd').get('id');

    newElem.find('[id]').each(function(){
        $(this).attr('id',this.id.replace(id,'customid_' + newNum,'g') );
    });


    $('#copiar' + num).after(newElem);

    newElem.find('select').msDropDown();
});

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

Вам нужно будет изменить все эти идентификаторы, а также ссылку .. ( приведенный выше код делает именно это .. )

демо http://jsfiddle.net/gaby/CXBZR/3/

1 голос
/ 10 июня 2011

В вашем скрипте вы звоните .clone(true).Этот параметр true клонирует события и данные.

Из API

.clone( [ withDataAndEvents ] )
withDataAndEvents: логическое значение, указывающее, являются ли обработчики событийдолжны быть скопированы вместе с элементами.Начиная с jQuery 1.4, данные элемента также будут копироваться.

Если вы удалите это или установите значение false, это предотвратит клонирование событий в ваши новые элементы div.

...