Frage

Ich habe einen Drop-Down auf einer Webseite mit 3830 Elementen. Ich weiß, übermäßige, aber was auch immer.

In jquery Ich erhalte die gewählte Option Wert mit der Anweisung:

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

Es gibt eine merkliche Pause, bevor die Auswahl gefunden wird. Sobald ich diesen Wert bekommen füge ich es in ein Textfeld auf der Seite, damit ich weiß, wie schnell. Plus Ich habe überprüft, es Haltepunkte in Firebug.

Wenn ich alte Schule gehen und dieses Javascript verwenden:

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

Diese Geschwindigkeit ist instananeous.

Gibt es etwas in jquery erben, die das macht: ausgewählte Wähler so langsam, wenn die Zahlen zu hoch? Ich mag mit Jquery bleiben überall in meinen Skripte, hat jemand einen Vorschlag die gewählte Option in Jquery beschleunigen zu finden?

Danke,

Craig

War es hilfreich?

Lösung

Es gibt keine Notwendigkeit, das zu nennen: ausgewählt, wenn das val eine Auswahlbox bekommen

.

Das Standardverhalten ist die selectedIndex bekommen

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

Wie im Kommentar erwähnt, Wenn Sie den Text dieser Option zugreifen müssen Sie verwenden können,

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

obwohl, wenn Sie wissen, was Sie brauchen den Text Eigentum und seine unterscheidet sich von dem Wert, den Sie gerade möchten direkt die selectedIndex verwenden.

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()
Hier

ist der Ausschnitt aus der jquery Quelle (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;  
    // ...  
},

Wenn Sie rufen Sie den: ausgewählte Selektor, der alle Schleife durch die Auswahlelemente wird Decendents für die .selected Eigenschaft suchen festgelegt werden und wird eine Reihe von jeder zurückzukehren. Wie auch immer Sie dies tun, wird es alle Abkömmlinge Schleife, so tun dies nicht.

Andere Tipps

Sie können dies tun:

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

var value = $ ( "#institutionCombo Option: eq (" + ix + ")") .val ();

aber, das ist effektiv, was Sie in Ihrem alten Schule Code tun.

Ich bin überrascht, dass es eine merkliche Verzögerung, da ich gedacht hätte, dass ich über das, was zu tun ist, was der jQuery-Code für das tut. Ausgewählten Selektor

Ansonsten frage ich mich, ob es ein Syntaxfehler ist, dass die Verzögerung verursacht, sollten Sie wahrscheinlich tun

$ ( "#institutionCombo Option: selected") .val ();

(Anmerkung Option: ausgewählt vs: ausgewählt)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top