Iterazione su < seleziona > Utilizzando jQuery + Selezione multipla
-
22-07-2019 - |
Domanda
Non è così semplice come si potrebbe pensare. Sto usando un plugin chiamato jQuery MultiSelect e multiple < ; seleziona > opzioni che utilizzano XSLT come segue:
<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>
Il JavaScript associato è il seguente:
var selects = document.getElementsByTagName("select");
$.each(selects, function() {
$(this).multiSelect();
});
Questo mi permette di applicare multiSelect (); funzione per ogni singolo < seleziona > nella pagina.
Il comportamento è abbastanza strano, ogni altro < seleziona > viene modificato nell'elenco a discesa (tutti uguali). Non riesco a vedere nulla di sbagliato nel mio JavaScript per causare questo problema in quanto ripeterebbe su ogni singolo. Per renderlo più chiaro, gli unici elenchi a cui è stato applicato JavaScript sono quelli in posizione 2, 4, 6 e 8 (su 9 che si trovano nella pagina).
Qualche idea?
Soluzione
Non avevo mai sentito il tag "Problema di Halloween" prima, ma Robert potrebbe essere corretto.
La lista dei nomi restituita da getElementsByTagName è dinamica, vale a dire che l'aggiunta o la rimozione, in questo caso seleziona, cambierà la lista dei nomi dopo che è stata creata.
try
//hoping for magic here
$('select').multiSelect();
o
$('select').each( function() {
$(this).multiSelect();
});
Altri suggerimenti
Sembra un problema di Halloween ( http: // blogs .msdn.com / mikechampion / archive / 2006/07/20 / 672208.aspx ) in multiSelect, ma poiché non conosco multiSelect non posso dirlo con certezza.
Prova questo:
jQuery('select').each(function(){selectAll(this.id)});