2014-02-19 4 views
1

Я использую каскадный плагин jQuery для выпадающего списка. (https://github.com/dnasir/jquery-cascading-dropdown)Dependent/Cascading Dropdown

У меня есть два выпадающих меню. «Клиент» и «Сайт».

На основании того, какой клиент вы выбрали, список сайтов должен быть соответствующим образом уменьшен, чтобы показывать только сайты для выбранного клиента. Я установил два php-скрипта returnClientList.php и returnSiteList.php, которые успешно возвращают массивы json с парой label/value.

Моя проблема заключается в том, что я не могу уменьшить список сайтов после выбора клиента. Событие успешно срабатывает, но я получаю только полный список. Как вы увидите, код использует запрос getJSON, который я знаю из руководства, отправляет HTTP GET. Глядя на сеть , панель хром показывает, что на самом деле не передается значение GET.

Надеюсь, что-то очевидное, но я новичок в jquery, поэтому помогите оценить.

Мой код:

JS

$('#edit-shift').cascadingDropdown({ 
selectBoxes: [ 
    { 
     selector: '.clients', 
     source: function(request, response) { 
     $.getJSON('returnClientList.php', request, function(data) { 
        var selectOnlyOption = data.length <= 1; 
        response($.map(data, function(item, index) { 
         return { 
          label: item.label, 
          value: item.value, 
          selected: selectOnlyOption // Select if only option 
         }; 
        })); 
       }); 
      } 
    }, 
    { 
     selector: '.sites', 
     requires: ['.clients'], 
     source: function(request, response) { 
      $.getJSON('returnSiteList.php', request, function(data) { 
       var selectOnlyOption = data.length <= 1; 
       response($.map(data, function(item, index) { 
        return { 
         label: item.label, 
         value: item.value, 
         selected: selectOnlyOption // Select if only option 
        }; 
       })); 
      }); 

     } 
    }, 
    { 
     onChange: function(event, value, requiredValues){} 
    } 
] 
}); 

PHP

//this script returns a json array for use in jquery autocomplete fields for site  lists... 
header('Content-type: application/json'); 
require("connect.php"); 

$client_id = $_GET['?']; 

//do the query for sites that are active 
$sql = "SELECT * FROM site WHERE active=1 AND client_id='$client_id' ORDER BY site_name ASC"; 
$result = mysql_query($sql) or die('Error: ' . mysql_error()); 

//loop the results and create php array 
while($row = mysql_fetch_array($result)){ 
    $arr[] = array('label' => $row['site_name'], 'value' => $row['id']); 
} 

echo json_encode($arr); 

ответ

0

Законченное писать свое собственное решение этой проблемы и слом плагин. Наслаждаться.

//dynamically returns the sites once the user chooses a client - edit/add shift form 
    $('.client-id').change(function() { 
    var selectedClient = $(this).val(); 
    if (selectedClient != null && selectedClient != '') { 

     $.getJSON('returnSiteList.php', { id: selectedClient }, 
        function (Sites) { 
         var siteSelect = $('.site-id'); 
         siteSelect.empty(); 
         $.each(Sites, function (index, site) { 
         siteSelect.append($('<option/>', { 
         value: site.value, 
         text: site.label 
       })); 
      }); 
     }); 
    } 
}); 
Смежные вопросы