2016-05-27 11 views
0

Ich habe ein Skript zum Auffüllen einiger Dropdown-Listen. Die Funktionen rufen eine URL in Django auf.Nur JQuery auf manuelle Aktualisierung ausführen

Dies ist die Frage, die ich habe:

Wenn ich möchte die Seite laden, sollte die start_dates Drop-Down-gefüllt werden und die end_date Dropdown sollten leer bleiben.
Wenn im Dropdown-Menü "start_dates" ein Wert ausgewählt wird, wird ein weiteres Skript ausgeführt, das das Dropdown-Menü "end_dates" füllt.

Da ich jedoch die Funktion zur Aktualisierung des Dropdown-Menüs start_dates aufruft, wird automatisch die Funktion zum Aktualisieren der Enddatumsdaten aufgerufen, was zu einem Fehler führt, da in start_date kein Wert ausgewählt ist.

Wie kann ich die Funktion nur für Enddatum aufrufen, wenn ein Datum manuell ausgewählt wird?

<script> 
    $(document).ready(function ({}) { 
     json_to_select("{% url "get_start_dates_list" %}", "#id_start_date"); 
    }); 

    $(function() { 
     $("#id_start_date").change(function() { 
      json_to_select("{% url "get_end_dates_list" 4545645 %}".replace("4545645", $(this).val()), "#id_end_date") 
     }) 
    }); 

    function json_to_select(url, select_selector, oncomplete) { 
     var opt = $(select_selector); 
     opt.html(""); 
     opt.append($("<option/>").val(0).text("loading")); 
     opt.change(); 

     $.getJSON(url, function (data) { 
      var opt = $(select_selector); 
      var old_val = opt.val(); 
      opt.html(""); 
      opt.append($("<option/>").val("").text("---------")); 
      $.each(data, function() { 
       opt.append($("<option/>").val(this.id).text(this.value)); 
      }); 
      opt.val(old_val); 
      opt.change(); 

      if (oncomplete) { 
       oncomplete(); 
      } 
     }) 
    } 
</script> 

Antwort

1

Verwenden Sie einfach eine Variable, die angibt, ob der Startdatumswert zum ersten Mal gesetzt wird. und ignorieren bei diesem ersten Mal Enddatum Wert zu ändern:

var firstTime = true; 

$("#id_start_date").change(function(){ if(!firstTime){ 
      json_to_select("{% url "get_end_dates_list" 4545645 %}".replace("4545645", $(this).val()), "#id_end_date"); 
    firstTime = false;} 
     }); 

die firsttime cheking sollte getan werden, wenn der Wert des Startdatums zu ändern, und es könnte nicht in dem besten Platz in meinem Code sein, aber es ist nur die zeigen, Idee.

Verwandte Themen