2009-08-11 8 views
3

Frage mich nur, ob es eine Möglichkeit gibt zu überprüfen, ob der Wert eines Dropdown-Auswahlfelds mit dem ursprünglichen Wert zum Zeitpunkt des Ladens der Seite übereinstimmt (wenn der Wert mit festgelegt wurde)?Wie kann ich mit JavaScript oder jQuery prüfen, ob das Auswahlfeld mit dem ursprünglichen Wert übereinstimmt?

Ich denke, ich könnte PHP verwenden, um die ursprünglichen Werte als JavaScript-Variablen zu erstellen und gegen sie zu überprüfen, aber es gibt ein paar Auswahlfelder, und ich versuche, den Code so prägnant wie möglich zu halten!

Antwort

7

Das ist gar nicht so schwer. Dies wird für jeden select auf der Seite Überblick über den Wert halten:

$(document).ready(function() { 
    $("select").each(function() { 
     var originalValue = $(this).val(); 

     $(this).change(function() { 
      if ($(this).val() != originalValue) 
       $(this).addClass('value-has-changed-since-page-loaded'); 
      else 
       $(this).removeClass('value-has-changed-since-page-loaded'); 
     }); 
    }); 
}); 

Diese eine neue Klasse gelten value-has-changed-since-page-loaded ein Auswahlfeld unterscheidet, dessen Wert (die vermutlich Sie etwas mehr relevant umbenannt würden), als es war als die Seite geladen wurde.

Sie können diese Klasse immer dann ausnutzen, wenn Sie daran interessiert sind, dass sich der Wert geändert hat.

+5

Sie können es sogar kürzer machen, wenn Sie die Anweisung 'if' durch' $ (this) .toggleClass ('val-hat-geändert', $ (this) .val()! = OriginalValue); 'ersetzen.' – RaYell

1
$(document).ready(function() { 
    var initialSelectValue = $('#yourselect').val(); 

    // call this function when you want to check the value 
    // returns true if value match, false otherwise 
    function checkSelectValue() { 
     return $('#yourselect').val() === initialSelectValue; 
    } 
}); 

PS. Sie sollten selected="selected" nicht selected="yes" verwenden.

+0

Brauchen Sie keine Möglichkeit, diese innere Funktion der Außenwelt zugänglich zu machen? – phairoh

+0

Nun, ich nehme an, dass Sie alle Ihre JS-Code innerhalb von 'bereiten' Callback. Wenn Sie es einem anderen Skript zur Verfügung stellen möchten, können Sie es außerhalb definieren. – RaYell

1

Auf Seite zu laden, ein Array mit dem Anfangswert jeden Auswahlfeld mit Namen indiziert erstellen:

var select_values = []; 

$(document).ready(function() { 
    $("select").each(function() { 
     select_values[$(this).attr('name')] = $(this).val(); 
    }); 
}); 

später, wenn Sie, wenn ein Wert geändert hat überprüfen müssen:

function has_select_changed(name) { 
    return $("select[name="+name+"]").val() != select_values[name]; 
} 
0

Zuerst ein Ausschnitt:

$('select').each( 
    function(){ 
    if(this.options[ this.selectedIndex ].getAttribute('selected') === null){ 
      alert(this.name +' has changed!') 
    } 
}); 

Nun ist die Erklärung:

Unter der Annahme, selectElement ist ein Verweis auf eine < wählen/> elementYou kann prüfen, welche Option ausgewählt ist mit

selectElement.selectedIndex 

Um das < Option/> Element, das derzeit ausgewählt ist, zu erhalten, verwenden Sie

selectElement.options[ selectElement.selectedIndex ] 

Nun, wenn Sie wissen, welche Option Element Sie ausgewählt herausfinden, ob dieses Element das ausgewählte = ‚ausgewählt‘ Attribut (wie im Quellcode, es ändert sich nicht - das ist nicht das gleiche wie .selected propery eines DOM-Knotens, was für das aktuell ausgewählte Optionselement gilt und bei Änderung der Auswahl geändert wird)

Verwandte Themen