2009-01-13 8 views
0

Ce n'est pas aussi simple qu'on pourrait le penser. J'utilise un plugin appelé jQuery MultiSelect et plusieurs < sélectionnez> Options en utilisant XSLT comme suit:itération de plus de <select> Utilisation de jQuery + Multi Select

<xsl:for-each select="RootField"> 
    <select id="{RootField}" multiple="multiple" size="3"> 
    <option value=""></option> 
    <xsl:for-each select="ChildField"> 
     <option value="{ChildField}"><xsl:value-of select="ChildField"/></option> 
    </xsl:for-each> 
    </select> 
</xsl:for-each> 

Le JavaScript d'accompagnement est comme suit:

var selects = document.getElementsByTagName("select"); 

$.each(selects, function() { 
    $(this).multiSelect(); 
}); 

Cela me permet d'appliquer la multiSelect(); fonction à chaque < sélectionnez> sur la page.

Le comportement est assez étrange, tous les autres < select> sont en cours de modification dans la liste déroulante (tous les pairs même de toute façon). Je ne vois rien de mal dans mon code JavaScript pour provoquer ce problème car il serait itérer sur chacun d'eux. Pour le rendre plus clair, les seules listes auxquelles JavaScript est appliqué sont celles en position 2, 4, 6 et 8 (sur les 9 qui sont sur la page).

Des idées?

Répondre

4

Je n'avais jamais entendu le mot "problème d'Halloween" auparavant, mais Robert a peut-être raison.
La nodelist renvoyée par getElementsByTagName est dynamique, c'est-à-dire que l'ajout ou la suppression, dans ce cas de sélection, modifie la nodelist après sa création.

essayer

//hoping for magic here 
$('select').multiSelect(); 

ou

$('select').each(function() { 
    $(this).multiSelect(); 
}); 
+0

Bon sang. J'ai essayé pendant des heures et vous l'avez fait si simple! :) – Kezzer

+0

Simple est la façon jQuery. Je l'aime – roborourke

+0

Ouais. jQuery est sacrément utile car il nous permet de ne pas faire d'appels comme document.getElementsByTagName et de gérer tout ce qui est imaginable en utilisant les sélecteurs css et xpath !! –

0

Essayez ceci:

jQuery('select').each(function(){selectAll(this.id)}); 
Questions connexes