jQuery cloning problème html, mise à jour DOM?

j'ai besoin de l'aide des experts de javascript / jquery pour résoudre le problème suivant:

---- 1. ce javascript "151970920 des alertes de" l'id d'une option sélectionnée dans une balise html:

$(function(){
    $("#id_productos_list").change(
    function(){
        var op = $(this).selectedValues()
        alert(op);
     }
     );
});

----2. ce javascript clone code html:

function cloneMore(selector, type) {
    var newElement = $(selector).clone();
    var total = $('#id_' + type + '-TOTAL_FORMS').val();

    newElement.find(':input').each(function() {
        var name = $(this).attr('name').replace('-' + (total-1) + '-','-' + total + '-');
        var id = 'id_' + name;
        $(this).attr({'name': name, 'id': id}).val('').removeAttr('checked');
    });
    newElement.find('label').each(function() {
        var newFor = $(this).attr('for').replace('-' + (total-1) + '-','-' + total + '-');
        $(this).attr('for', newFor);
    });

    total++;
    $('#id_' + type + '-TOTAL_FORMS').val(total);
    $(selector).after(newElement);
}

- - - - c'est une partie du code HTML que JS est en train de cloner, et cela fonctionne sans problème

            <select id="id_productos_list" name="productos_list" >
              <option value="1">One</option>
              <option value="2">Two</option>
            </select>

mais juste le javascript #1 fonctionne avec le code html initial (original pour clone). les autres clonés n'alertent pas les options sélectionnées. J'ai testé avec des identifiants diferents les attrs pour chaque étiquette de sélection clonée, sans résultat.

Qu'est-ce qui me manque? firebug afficher la cloné DOM html nice :S ce que je Dois mettre à jour DOM après clonage pour faire $("#id productos liste").changement.(..) fonctionne?

2
demandé sur Community 2009-09-16 04:30:00

2 réponses

la syntaxe jQuery $("#...") renverra le premier élément apparié par exact id. Si vous clonez des éléments sans les différencier par leur id, ce code ne fonctionnera pas comme vous l'attendez.

Vous pouvez comparer les différences entre les deux expressions suivantes:

alert($("#id_productos_list").size());

...et

alert($("[id='#id_productos_list']").size());

La première expression renvoie zéro ou une fonction de la présence d'un élément avec id "id_productos_list" dans votre page. Le premier élément de l'ordre déclaré gagne.

la seconde expression retournera zéro ou un ou plusieurs en fonction de l'ensemble des éléments avec id" id_productos_list " dans votre page.

il est également important de noter qu'il ne semble pas que les gestionnaires d'événements soient copiés dans le cadre de l'opération clone() . Vous devrez peut-être réaffecter ces gestionnaires pour les nouveaux éléments.

var newElement = $(selector).clone(true);
4
répondu David Andres 2009-09-16 01:10:50

avez-vous essayé .clone(true) qui clone tous les manipulateurs attachés? Il est décrit au bas de la "Clone documentation .

6
répondu JJ Geewax 2009-09-16 01:02:59