Pregunta

Tengo una lista desplegable en una página web con 3830 elementos en los mismos. Lo sé, pero sea cual sea excesiva.

En jQuery consigo el valor de la opción seleccionada mediante la instrucción:

$ ( "#institutionCombo: seleccionado") .val ();

Hay una pausa apreciable antes de encontrar la selección. Una vez que consiga ese valor lo inserte en un cuadro de texto en la página, así que sé qué tan rápido. Además He comprobado que el uso de puntos de interrupción en Firebug.

Si voy a la vieja escuela y uso este javascript:

var div = document.getElementById ( "maindiv");
var seleccionar = div.getElementsByTagName ( "seleccionar") [0];
var = ix select.selectedIndex;
var instId = select.options [IX] .value;

Esta velocidad es instananeous.

¿Hay algo que heredar en jQuery que hace que el selector: seleccionado tan lento cuando los números son demasiado altos? Me gustaría seguir con jQuery lo largo de mis guiones, ¿alguien tiene una sugerencia para acelerar la búsqueda de la opción seleccionada en jQuery?

Gracias,

Craig

¿Fue útil?

Solución

No hay necesidad de llamar al: seleccionado al conseguir el val de un cuadro de selección

.

El comportamiento por defecto es conseguir que el selectedIndex

$( "#institutionCombo").val();

Como se señaló en el comentario, si usted necesita para acceder al texto de esa opción que puede utilizar

$( "#institutionCombo option[value=" + $( "#institutionCombo").val(); + "]").text();

A pesar de que si usted sabe que necesita la propiedad de texto y su diferente del valor es posible que sólo desee utilizar la selectedIndex directamente.

var combo = $("#institutionCombo").get(0); 
combo = combo ? combo : {selectedIndex: -1}; // handle no combo returned
if (combo.selectedIndex < 0)
  return; // nothing selected
$('#institutionCombo option:eq(' + combo.selectedIndex + ')').text()

Aquí es el fragmento de la fuente de jquery (v1.3)

val: function( value ) {
    // ...  
    // We need to handle select boxes special
    if ( jQuery.nodeName( elem, "select" ) ) {
        var index = elem.selectedIndex,
            values = [],
            options = elem.options,
            one = elem.type == "select-one";

        // Nothing was selected
        if ( index < 0 )
            return null;

        // Loop through all the selected options
        for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
            var option = options[ i ];

            if ( option.selected ) {
                // Get the specifc value for the option
                value = jQuery(option).val();

                // We don't need an array for one selects
                if ( one )
                    return value;

                // Multi-Selects return an array
                values.push( value );
            }
        }

        return values;  
    // ...  
},

Cuando se llama al: Selector seleccionada que se va bucle a través de todos los elementos seleccionados decendientes en busca de la propiedad .selected que se fijen, y devolver una matriz de cualquier. De cualquier manera usted hace esto se hará en bucle todos los decendientes, así que no hacerlo.

Otros consejos

Usted puede hacer esto:

var ix = $ ( "#institutionCombo") .attr ( "selectedIndex");

valor var = $ ( "#institutionCombo opción: eq (" + ix + ")") .val ();

pero eso es efectivamente lo que está haciendo en el código de la vieja escuela.

Me sorprende que hay un retraso notable, ya que yo hubiera pensado que lo que estoy haciendo por encima de lo que es el código jQuery está haciendo por la:. Selector seleccionado

De lo contrario, me pregunto si se trata de un error de sintaxis que está causando el retraso, probablemente debería estar haciendo

$ ( "opción #institutionCombo: seleccionado") .val ();

(Opción Nota: seleccionado vs: seleccionado)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top