jQuery Textfeld in Abhängigkeit freigeben

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich arbeite gerade an einer Fahrzeugdatenbank ähnlich der von mobile.de. Bei der Anlage von neuen Datensätzen ist es jetzt so, daß mit der Auswahl des Herstellers die jeweiligen Modelle nachgeladen werden.
Javascript:
$(document).ready(function() {
    $("#hersteller").change(function(){
        var hersteller = $(this).children('option:selected').val();
        $("#modell").load("loadmodell.php",{value: hersteller});
    });
});
So weit so gut. Bei jeder Modellliste gibt es auch noch einen Punkt "Andere". Wenn der ausgewählt wird, soll ein Textfeld freigegeben werden, in das das jeweilige Modell per Hand eingetragen wird.
Javascript:
$(document).ready(function() {
    $("#modell").change(function(){
        var modell = $(this).children('option:selected').text();
        if (modell == 'Andere'){
            $("#ind_modell").prop('disabled', false);
        }else{
            $("#ind_modell").prop('disabled', true);
        }
    });
});
Auch das funktioniert.

Jetzt kann es aber bei ganz kleinen Herstellern sein, daß keine eigenen Modelle hinterlegt sind und nur das "Andere" verfügbar ist. Und da beginnt mein Problem. Dadurch daß das Modell-Select ja nicht explizit aufgerufen wird, wird auch das Textfeld nicht freigegeben. Da aber auch keine andere Option zur Auswahl steht, gibt es im Moment keine Möglichkeit, bei einem solchen Hersteller das Textfeld freizugeben.

Ich hab auch schon versucht, die zweite Funktion von der ersten aus aufzurufen, hat aber leider nichts gebracht. Hat jemand eine Idee, wie ich in dem beschriebenen Sonderfall, wenn in dem Select nur die eine Option "Andere" vorhanden ist, das Textfeld freigeben kann?

Viele Grüße,
Sprint
 
Hi,
vielleicht funktioniert es wenn Du die Optionenmenge des selectfeldes überprüfst oder Du nutzt das selected Attribut und überprüfst davon den Wert.

Grüße
 
Der Ansatz von Jan-Frederik Stieler ist der Richtige. Mit der load-Methode wirst du leider schwer vorran kommen, daher empfehle ich dir die post/get-Methode.
Dein Code müsste in etwa so ausehen:

Code:
$(document).ready(function() {
    $("#hersteller").change(function(){
        var hersteller = $(this).children('option:selected').val();
        $.post('loadmodell.php', {value: hersteller}, function (data) {
           if(data=='<select value="0">Andere</select>'){    // Mit default-Ausgabe ersetzen!
               $("#ind_modell").prop('disabled', false);
           }
           $('#modell').html(data);
        });
    });
});
 
ja, so gehts fast. Den direkten Vergleich konnte ich nicht nehmen, da der Wert der Option für "Andere" bei jedem Hersteller unterschiedlich ist. Ich hab es dann mit contains() versucht, aber ddas ließ data nicht mir sich machen. Über die Stringlänge funktionierte es dann aber, da die immer über 40 liegt, wenn noch mindestens ein anderes Modell dabei ist.

Vielen Dank für eure Hilfe,
Sprint
 
Zurück