【问题标题】:Multiple checkbox filter not filtering correct多个复选框过滤器未过滤正确
【发布时间】:2014-04-07 14:52:31
【问题描述】:

我正在编写一段代码,但我无法让它工作。

我有这些复选框,当我选中它们时,列表会被过滤,屏幕会使用 AJAX 实时更新。多重过滤有效,但前提是信息仍在屏幕上。一旦它被过滤掉,它就不会再回来了。我有很多这样的说法。我需要添加 If / Else 语句吗?

<?php 
$pdo = new PDO('mysql:host=localhost;dbname=records', 'root', '*******');
$select = 'SELECT *';
$from = ' FROM overboekingen';
$where = ' WHERE TRUE';
$opts = isset($_POST['filterOpts'])? $_POST['filterOpts'] : array('');


if (in_array("coulance_happyhome1", $opts)){
    $where .= " AND coulance_happyhome = 1";
}
if (in_array("coulance_happyhome2", $opts)){
    $where .= " AND coulance_happyhome = 2";
}
if (in_array("coulance_happyhome3", $opts)){
    $where .= " AND coulance_happyhome = 3";
}
if (in_array("coulance_happyhome4", $opts)){
    $where .= " AND coulance_happyhome = 4";
}
if (in_array("coulance_happyhome5", $opts)){
    $where .= " AND coulance_happyhome = 5";
}


$sql = $select . $from . $where;
$statement = $pdo->prepare($sql);
$statement->execute();
$results = $statement->fetchAll(PDO::FETCH_ASSOC);
$json = json_encode($results);
echo($json);
?>



</td>
        <td class="tdfilter">                

<label for="coulance_happyhome"><h4>Coulance Happyhome</h4></label>
<input type="checkbox" id="coulance_happyhome" name="coulance_happyhome1">Coulance Agent<br>
<input type="checkbox" id="coulance_happyhome" name="coulance_happyhome2">Coulance Camping<br>
<input type="checkbox" id="coulance_happyhome" name="coulance_happyhome3">Coulance Park<br>
<input type="checkbox" id="coulance_happyhome" name="coulance_happyhome4">Coulance    Privatowner<br>
<input type="checkbox" id="coulance_happyhome" name="coulance_happyhome5">Coulance HappyHome<br>

        </td>
        <td class="tdfilter">                

<label for="opmerking"><h4>Opmerking</h4></label>
<input type="checkbox" id="opmerking" name="opmerking">

        </td>
    </tr>
</table>


<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function makeTable(data){
var tbl_body = "";
$.each(data, function() {
var tbl_row = "";
$.each(this, function(k , v) {
tbl_row += "<td>"+v+"</td>";
})
tbl_body += "<tr>"+tbl_row+"</tr>";
})

return tbl_body;
}

function getEmployeeFilterOptions(){
    var opts = [];
    $checkboxes.each(function(){
        if(this.checked){
        opts.push(this.name);
    }
    });
return opts;
}

function updateEmployees(opts){
    $.ajax({
        type: "POST",
        url: "submit.php",
        dataType : 'json',
        cache: false,
        data: {filterOpts: opts},
        success: function(records){
            $('#employees tbody').html(makeTable(records));
        }
    });
}

var $checkboxes = $("input:checkbox");
$checkboxes.on("change", function(){
    var opts = getEmployeeFilterOptions();
    updateEmployees(opts);
});

updateEmployees();

【问题讨论】:

  • 我们肯定需要在这里查看更多代码。您可以发布带有复选框的表单以及更多相关的过滤代码吗?
  • 添加了一些代码:)
  • 我认为您的 opts 数组正在构建中,但从未减少。您可以在您的 checkboxes.onChange 函数中添加一个 console.log 语句,并在您过滤结果时观察 opts 的值吗?
  • 还在吗?我在那里发布了另一个答案......你试过了吗?
  • 您应该使用 2 个单独的文件,在第一个 php 文件中,您应该保留名称为 submit.php 的 php 脚本,并在其他页面中保留所有其余代码,如 html 和 ajax 代码,然后您的代码将正常工作正确,因为我认为您的 submit.php 页面定义不正确,因此您没有得到任何输出。

标签: php mysql ajax json checkbox


【解决方案1】:

您的代码应如下所示:

if (in_array("coulance_happyhome1", $opts)){
    $where .= " OR coulance_happyhome = 1";
}
if (in_array("coulance_happyhome2", $opts)){
    $where .= " OR coulance_happyhome = 2";
}
if (in_array("coulance_happyhome3", $opts)){
    $where .= " OR coulance_happyhome = 3";
}
if (in_array("coulance_happyhome4", $opts)){
    $where .= " OR coulance_happyhome = 4";
}
if (in_array("coulance_happyhome5", $opts)){
    $where .= " OR coulance_happyhome = 5";
}

【讨论】:

  • 当我尝试这个时过滤器完全停止工作
【解决方案2】:

我认为您的 opts 数组正在构建,但一旦添加元素就不会丢失。像这样更改更改功能上的复选框:

$checkboxes.on("change", function(){
    opts.length = 0;
    opts = getEmployeeFilterOptions();
    updateEmployees(opts);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多