Ich habe 3 Dropdowns mit einer Liste von Orten, die ich in aufsteigender Reihenfolge sortieren wollte. Die erste Dropdown-Liste der Orte wird mit der Funktion order_by des aktiven Codeignitersatzes sortiert, und die Orte wurden erfolgreich in aufsteigender Reihenfolge sortiert. Wenn ich jedoch mit der Javascript-Funktion onchange einen Ort in der ersten Dropdown-Liste auswähle, füllen Sie die Beim zweiten Dropdown von Orten mit Ausnahme des Ortes, den ich im ersten Dropdown ausgewählt habe, wurden die zurückgegebenen Orte nicht in aufsteigender Reihenfolge sortiert, obwohl meine Abfrage die Funktion order_by enthält. Ich vermute, dass dies an den in onchange zurückgegebenen json-formatierten Daten liegt. Hier sind meine Codes. Danke für die Hilfe.

Dieser Code sortiert die Daten ordnungsgemäß in aufsteigender Reihenfolge

function get_dropdown_barangay(){

  $query = $this->db->select('ID,brgy_name')
                    ->from('tbl_barangay')
                    ->order_by('brgy_name','asc')
                    ->get()
                    ->result_array();
  $dropdown = array('0'=>'Select Barangay');
  foreach($query as $value){
    $dropdown[$value['ID']] = $value['brgy_name'];
  }

  return $dropdown;

}

Ausgabebild: Geben Sie hier die Bildbeschreibung ein

Beim Ändern des Codes werden die zurückgegebenen Stellen nicht in aufsteigender Reihenfolge sortiert.

$('#brgy_id_1').change(function(){

    var brgy_id = $("#brgy_id_1").val();
    alert(brgy_id);
    var data_val = {'brgy_id':brgy_id};

    $.ajax({
         type: "POST",
         url:"<?php echo base_url();?>admin/get_barangay_list",
         data:data_val,
         dataType:'json',
         success: function(data)
          {
           $('#brgy_id_2').empty();
           $.each(data,function(id,val)
           {
                var opt = $('<option />'); // here we're creating a new select option for each group
                  opt.val(id);
                  opt.text(val);
                  $('#brgy_id_2').append(opt);
            });
           }
     });

 }); //end change

admin.php

function get_barangay_list(){

      if(isset($_POST['brgy_id2'])){
        $brgy_array_id = array('0'=>$_POST['brgy_id'],'1'=>$_POST['brgy_id2']);
      } else{
        $brgy_array_id = array('0'=>$_POST['brgy_id']);
      }

      $result=$this->core_model->get_barangay_list($brgy_array_id);
      $this->output->set_header('Content-Type: application/json',true);
      echo json_encode($result);
    }

model.php

function get_barangay_list($brgy_array_id){

  $query = $this->db->select('ID,brgy_name')
                    ->from('tbl_barangay')
                    ->where_not_in('ID',$brgy_array_id)
                    ->order_by('brgy_name','asc')
                    ->get()
                    ->result_array();
  $dropdown = array('0'=>'Select Barangay');
  foreach($query as $value){
    $dropdown[$value['ID']] = $value['brgy_name'];
  }

  return $dropdown;

}

Ausgabebild mit Daten wird nicht in aufsteigender Reihenfolge sortiert

enter image description here

0
Eli 5 Dez. 2013 im 14:28

3 Antworten

Beste Antwort

Eine Möglichkeit, den Kommentar von kinghfb umzusetzen:

Auf der Serverseite: Erstellen Sie ein Array

$dropdown = array();
$dropdown[] = array('id' => 0, 'label' => 'Select city');
for ($query as $value) {
    $dropdown[] = array('id' => $value['ID'], 'label' => $value['brgy_name']);
}

Auf der Clientseite (Javascript): Ändern Sie Ihren Schleifencode:

$.each(data,function(id,val) {
    var opt = $('<option />'); // here we're creating a new select option for each group
    opt.val(val.id);
    opt.text(val.label);
    $('#brgy_id_2').append(opt);
});
1
LeGEC 5 Dez. 2013 im 10:49

Sie können Ihren JSON mithilfe des Unterstrichs sortieren

Übergeben Sie einfach Ihren JSON und eine Sortierfunktion. Wie so:

var cityJSON = [{city: 'San Vinente'}, {city: 'Pequnio'}, {city: 'Pili Drive'}, {city: 'Jc Aquino'}, {city: 'Banza'}];
console.log(cityJSON); // unsorted
cityJSON = _.sortBy(cityJSON, function(item){return item.city});
console.log(cityJSON); // sorted
0
John McNulty 5 Dez. 2013 im 10:42

Sie verlieren hier Ihre Bestellung, weil Sie neue Schlüssel festlegen (das Problem wird hier beschrieben. Array ändern Schlüssel ohne Änderung der Reihenfolge). Sie müssen also die Schlüssel behalten und aus diesem Grund auch den js-Teil ändern, da Sie mit dem Schlüsselwert nicht mehr auf die Daten zugreifen können.

function get_dropdown_barangay(){

$query = $this->db->select('ID,brgy_name')
                ->from('tbl_barangay')
                ->order_by('brgy_name','asc')
                ->get()
                ->result_array();
$dropdown = array('0'=>'Select Barangay');
foreach($query as $value){
 $dropdown[] = array("id" => $value["ID"], "name" => $value['brgy_name']); // setting new value and keep an numeric key which represents the order
 }

  return $dropdown;

 }

Und das js muss sein wie:

$('#brgy_id_1').change(function(){

    var brgy_id = $("#brgy_id_1").val();
    alert(brgy_id);
    var data_val = {'brgy_id':brgy_id};

    $.ajax({
         type: "POST",
         url:"<?php echo base_url();?>admin/get_barangay_list",
         data:data_val,
         dataType:'json',
         success: function(data)
          {
           $('#brgy_id_2').empty();
           $.each(data,function(object)
           {
                var opt = $('<option />'); // here we're creating a new select option for each group
                  opt.val(object.id);
                  opt.text(object.value);
                  $('#brgy_id_2').append(opt);
            });
           }
     });

 });

Ich hatte die Änderungen hervorgehoben, aber ich weiß nicht, ob ich bei SO Fett im Code verwenden soll ....

1
Community 23 Mai 2017 im 12:13