Ich habe drei ausgefüllte Dropdown-Menüs. Jedes Dropdown-Menü wird basierend auf der Auswahl der vorherigen Auswahl ausgefüllt. Dies bedeutet, dass die Auswahl von "Selektor 2" auf der Auswahl von "Selektor 1" basiert, während die Auswahl von "Selektor 3" auf der Auswahl von "Selektor 2" basiert. Das Dropdown-Menü wird dynamisch mit jquery gefüllt, und die Quelle stammt aus einer MySQL-Tabelle.

Wenn ich "Selektor 1" auswähle, wird "Selektor 2" ausgefüllt, und wenn ich "Selektor 2" auswähle, wird "Selektor 3" ausgefüllt. Das funktioniert gut. Das Problem besteht darin, dass, wenn ich "Selektor 1", "Selektor 2" und "Selektor 3" ausgewählt habe und "Selektor 1" ändere, der Wert von "Selektor 2" verloren geht (wie er sein sollte), aber der Wert von "Selektor 3" verbleibt dort. Ich möchte, dass der Selektorwert von 3 zurückgesetzt wird, wenn "Selektor 1" geändert wird, und nicht den alten Wert des vorherigen alten Selektors beibehält.

Das ist meine Frage

<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<script>

    function getTertiary(val) {
        $.ajax({
            type: "POST",
            url: "get_tertiary.php",
            data:'tertiary_cat='+val,
            success: function(data){
                $("#tertiary_cat").html(data);
            }
        });
    }


    function getSecondary(val) {
        $.ajax({
            type: "POST",
            url: "get_secondary.php",
            data:'primary_cat='+val,
            success: function(data){
                $("#secondary_cat").html(data);
            }
        });
    }

    function selectPrimary(val) {
        $("#search-box").val(val);
        $("#suggesstion-box").hide();
    }
</script>

Das ist mein HTML:

<div class="frmDronpDown">
    <div class="row">
        <label>Primary:</label><br/>
        <select name="primary_cat" id="primary_cat" class="demoInputBox" onChange="getSecondary(this.value);">
            <option value="">Select Primary</option>
            <?php
            foreach($results as $primaryCat) {
                ?>
                <option value="<?php echo $primaryCat["primary_cat"]; ?>"><?php echo $primaryCat["primary_cat"]; ?></option>
                <?php
            }
            ?>
        </select>
    </div>
    <div class="row">
        <label>Tertiary:</label><br/>
        <select name="secondary_cat" id="secondary_cat" class="demoInputBox" onChange="getTertiary(this.value);">
            <option value="">Select Seconary</option>
        </select>
    </div>
    <div class="row">
        <label>State:</label><br/>
        <select name="tertiary_cat" id="tertiary_cat" class="demoInputBox">
            <option value="">Select Tertiary</option>
        </select>
        <input type="text"/>
    </div>
</div>

Als ich versuchte - mich zu ändern

<select name="primary_cat" id="primary_cat" class="demoInputBox" onChange="getSecondary(this.value);">

Zu:

<select name="primary_cat" id="primary_cat" class="demoInputBox" onChange="getSecondary(this.value);getTertiary(this.value);">

Ich erhalte diesen Fehler in error_log

PHP Warning:  Invalid argument supplied for foreach()
0
xltmt 11 Aug. 2015 im 12:27

3 Antworten

Beste Antwort

Setzen Sie den Wert des dritten Down on Re zurück und starten Sie den zweiten wie folgt:

function getSecondary(val) {
    $.ajax({
        type: "POST",
        url: "get_secondary.php",
        data:'primary_cat='+val,
        success: function(data){
            $("#secondary_cat").html(data);
             $("#tertiary_cat").html('<option value="">Select Tertiary</option>')
        }
    });

}
0
Psylogic 11 Aug. 2015 im 09:45

Sie können getSecondary ändern, um das dritte Dropdown-Menü zu löschen, wenn der primäre Wert wie folgt geändert wird:

function getSecondary(val) {
    $.ajax({
        type: "POST",
        url: "get_secondary.php",
        data:'primary_cat='+val,
        success: function(data){
            $("#secondary_cat").html(data);
            $('#tertiary_cat').html('<option value="">Select Tertiary</option>')
        }
    });
}
0
majita 11 Aug. 2015 im 09:39

Möglicherweise ist der Wert von $results kein Array. Wenn Sie hier eine Prüfung hinzufügen, wird Ihr Problem gelöst.

 <?php
 if (is_array($results)){
    foreach($results as $primaryCat) {
        ?>
            <option value="<?php echo $primaryCat["primary_cat"]; ?>"><?php echo $primaryCat["primary_cat"]; ?></option>
        <?php
    }

 }
 ?>
0
Shailendra Sharma 11 Aug. 2015 im 09:39