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?

È stato utile?

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)});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top