В настоящее время у меня есть 5 отдельных раскрывающихся списков HTML. Всякий раз, когда я выбираю один, он фильтрует остальные четыре. Однако после выполнения другого выбора он по существу игнорирует первый выбор, сделанный при фильтрации выпадающих меню после второго выбора. Я мог бы написать запрос для каждой возможности выбора, но это, очевидно, не идеально. Будет ли способ объединить все в один запрос, где он будет отфильтровывать другие выпадающие списки, независимо от того, есть ли у него только один выбор, есть 3-4 различных варианта? Мне просто нужно, чтобы выпадающие списки фильтровали друг друга во всех возможных вариантах.
Код Index.php (по сути, просто код JavaScript в моем php-файле:
// ----- Function that sends values to index-ajax.php which filters the dropdowns -----
$(document).ready(function(){
$("#collector, #date, #status, #repcode, #balancegroup").change(function(e){
showUser(
$("#collector").val()
,$("#date").val()
,$("#status").val()
,$("#repcode").val()
,$("#balancegroup").val()
);
});
$("#collector").change(function(e){
$.post('index-ajax.php',{filter:'Name',by:$(this).val()},function(data){
$("#date .choice").hide();
$("#status .choice").hide();
$("#repcode .choice").hide();
$("#balancegroup .choice").hide();
$.each(data, function(key,row) {
$("#date option").filter(function(i){
return $(this).attr("value").indexOf( row.item ) != -1;
}).show();
$("#status option").filter(function(i){
return $(this).attr("value").indexOf( row.item1 ) != -1;
}).show();
$("#repcode option").filter(function(i){
return $(this).attr("value").indexOf( row.item2 ) != -1;
}).show();
$("#balancegroup option").filter(function(i){
return $(this).attr("value").indexOf( row.item3 ) != -1;
}).show();
});
},"JSON");
});
$("#date").change(function(e){
$.post('index-ajax.php',{filter:'Date',by:$(this).val()},function(data){
$("#collector .choice").hide();
$("#status .choice").hide();
$("#repcode .choice").hide();
$("#balancegroup .choice").hide();
$.each(data, function(key,row) {
$("#collector option").filter(function(i){
return $(this).attr("value").indexOf( row.item ) != -1;
}).show();
$("#status option").filter(function(i){
return $(this).attr("value").indexOf( row.item1 ) != -1;
}).show();
$("#repcode option").filter(function(i){
return $(this).attr("value").indexOf( row.item2 ) != -1;
}).show();
$("#balancegroup option").filter(function(i){
return $(this).attr("value").indexOf( row.item3 ) != -1;
}).show();
});
},"JSON");
});
$("#status").change(function(e){
$.post('index-ajax.php',{filter:'Status',by:$(this).val()},function(data){
$("#collector .choice").hide();
$("#date .choice").hide();
$("#repcode .choice").hide();
$("#balancegroup .choice").hide();
$.each(data, function(key,row) {
$("#collector option").filter(function(i){
return $(this).attr("value").indexOf( row.item ) != -1;
}).show();
$("#date option").filter(function(i){
return $(this).attr("value").indexOf( row.item1 ) != -1;
}).show();
$("#repcode option").filter(function(i){
return $(this).attr("value").indexOf( row.item2 ) != -1;
}).show();
$("#balancegroup option").filter(function(i){
return $(this).attr("value").indexOf( row.item3 ) != -1;
}).show();
});
},"JSON");
});
$("#repcode").change(function(e){
$.post('index-ajax.php',{filter:'Report Code',by:$(this).val()},function(data){
$("#collector .choice").hide();
$("#date .choice").hide();
$("#status .choice").hide();
$("#balancegroup .choice").hide();
$.each(data, function(key,row) {
$("#collector option").filter(function(i){
return $(this).attr("value").indexOf( row.item ) != -1;
}).show();
$("#date option").filter(function(i){
return $(this).attr("value").indexOf( row.item1 ) != -1;
}).show();
$("#status option").filter(function(i){
return $(this).attr("value").indexOf( row.item2 ) != -1;
}).show();
$("#balancegroup option").filter(function(i){
return $(this).attr("value").indexOf( row.item3 ) != -1;
}).show();
});
},"JSON");
});
$("#balancegroup").change(function(e){
$.post('index-ajax.php',{filter:'Balance Group',by:$(this).val()},function(data){
$("#collector .choice").hide();
$("#date .choice").hide();
$("#status .choice").hide();
$("#repcode .choice").hide();
$.each(data, function(key,row) {
$("#collector option").filter(function(i){
return $(this).attr("value").indexOf( row.item ) != -1;
}).show();
$("#date option").filter(function(i){
return $(this).attr("value").indexOf( row.item1 ) != -1;
}).show();
$("#status option").filter(function(i){
return $(this).attr("value").indexOf( row.item2 ) != -1;
}).show();
$("#repcode option").filter(function(i){
return $(this).attr("value").indexOf( row.item3 ) != -1;
}).show();
});
},"JSON");
});
});
Индекс-ajax.php код:
<?php
$host="xxxxxx";
$dbName="xxxxxxxxx";
$dbUser="xxxxxxxx";
$dbPass="xxxx";
$dbh = new PDO("sqlsrv:Server=$host;Database=$dbName", $dbUser, $dbPass);
//$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
if (isset($_POST['filter']) and isset($_POST['by'])) {
$results = array();
if (!empty($_POST['by'])) {
// -----------------------------------------------------
if ($_POST['filter'] == 'Name') {
$sql = "SELECT DISTINCT [Date Group - Filter] as item,
[Line Status] as item1,
[Parent Report Code] as item2,
[Balance Group - Filter] as item3
FROM [Test_Spec_Bill]
WHERE [Collector Name] = ? AND [Next Bill Date] = 'Yes'"; }
// -----------------------------------------------------
if ($_POST['filter'] == 'Date') {
$sql = "SELECT DISTINCT [Collector Name] as item,
[Line Status] as item1,
[Parent Report Code] as item2,
[Balance Group - Filter] as item3
FROM [Test_Spec_Bill]
WHERE [Date Group - Filter] = ? AND [Next Bill Date] = 'Yes'"; }
// -----------------------------------------------------
if ($_POST['filter'] == 'Status') {
$sql = "SELECT DISTINCT [Collector Name] as item,
[Date Group - Filter] as item1,
[Parent Report Code] as item2,
[Balance Group - Filter] as item3
FROM [Test_Spec_Bill]
WHERE [Line Status] = ? AND [Next Bill Date] = 'Yes'"; }
// -----------------------------------------------------
if ($_POST['filter'] == 'Report Code') {
$sql = "SELECT DISTINCT [Collector Name] as item,
[Date Group - Filter] as item1,
[Line Status] as item2,
[Balance Group - Filter] as item3
FROM [Test_Spec_Bill]
WHERE [Parent Report Code] = ? AND [Next Bill Date] = 'Yes'"; }
// -----------------------------------------------------
if ($_POST['filter'] == 'Balance Group') {
$sql = "SELECT DISTINCT [Collector Name] as item,
[Date Group - Filter] as item1,
[Line Status] as item2,
[Parent Report Code] as item3
FROM [Test_Spec_Bill]
WHERE [Balance Group - Filter] = ? AND [Next Bill Date] = 'Yes'"; }
// -----------------------------------------------------
$stmt = $dbh->prepare($sql);
$stmt->execute(array($_POST['by']));
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $results[] = $row; }
}
echo json_encode( $results );
exit;
}
?>