2009-12-02 7 views
0

J'ai une forme qui est construit dynamiquement en utilisant ce plugin jQueryjQuery. Appliquer sélecteur sur tous les domaines sous une forme dynamique

http://code.google.com/p/jquery-dynamic-form/ 

Lorsque dupliquer un div, tous les champs de la div sont dupliqués et -as plugin docs état- parenthèses sont ajoutés au nom du champ

J'utilise aussi jQueryUI. J'utilise le plugin datePicker

$("#myDynDateField").datepicker(); 

Cela fonctionne très bien quand il n'y a qu'une seule instance de ce champ datePicker. Quand je dupliquer l'ensemble div, le champ DatePicker est également dupliqué, et les erreurs commencent


inst is undefined 
uncaught exception: Missing instance data for this datepicker 

1) Comment puis-je utiliser un sélecteur jQuery qui couvre tous les champs dupliqués aussi?
2) Comment puis-je m'assurer que chaque champ dupliqué datePicker aura sa bonne instance, etc.?

Merci beaucoup à l'avance,

Répondre

0

Je ne sais pas si vous utilisez $.clone() à « dupliquer » vos éléments, mais si vous êtes, la question pourraient résulter de passer dans le drapeau true. par exemple. $('div#id').clone(true). Cela clone l'élément ainsi que les événements qui s'y rattachent (et ce sont les enfants). Cependant, en utilisant ceci sur jquery, les éléments de l'ui peuvent gâcher certaines choses, il est donc préférable de redéfinir les informations d'un élément après sa duplication.

Les chances sont, même si vous ne le contrôlez pas avec cette granularité. Plus ou moins, vous rencontrez des problèmes car jqueryui n'est pas au courant de ces champs de formulaire dupliqués. Je suggère de supprimer la version 'dupé' du champ datepicker et de le remplacer par un nouveau champ datepicker.

Quelque chose comme ceci:

// code to duplicate form 
// ... 
// Now replace the element with one just like it but without any events 
$('#newDupedForm') 
    .find('.datefield') 
    .replaceWith(
     $(this).clone(false).datepicker(options) 
    ); 

Cela devrait se débarrasser de tous les liens à l'ancienne jquery ui datepicker de l'autre élément et instancier un nouveau, s'il y a quelque chose qui me manque, vous pouvez toujours créer l'élément d'entrée à partir de zéro et faire le replaceWith avec ça.

+0

Salut Alex. J'utilise le plugin de formulaire dynamique. Je ne sais pas s'il utilise la fonction $ .clone(). Je devrais chercher dans le code de plugin et vérifier ceci, mais je ne sais pas beaucoup au sujet du codage de plugin de jQuery pour faire un peu de changement dedans ... – Enrique

+0

Aussi, que se passerait-il si je fais les choses de replaceWith? Sera-t-il (le champ dupliqué datePicker) avoir le même id, nom que l'original? – Enrique

+0

Vous ne devriez pas dupliquer quoi que ce soit avec un attribut id pour commencer, cela fera pleurer votre moteur de sélection.Il aura tout pareil que l'élément d'origine, mais il n'aura aucun des événements que le datepicker a mis sur le premier. –

0

Il a commencé à travailler pour moi quand je mis à exécution les recommandations in this thread:

$('input.hasDatepicker', $clone).removeClass('hasDatepicker'); 

Si vous utilisez $.slideDown, il semble nécessaire de le faire à la fin de la diapositive, comme ceci:

$clone.slideDown(function() { 
    $('input.hasDatepicker', $clone).removeClass('hasDatepicker'); 
}); 

J'espère que cela aide les autres; C'était embêtant pour moi!

Questions connexes