javascript - 具有多个下拉过滤器的页面

标签 javascript jquery ajax

我有一个页面,它使用下拉菜单来过滤列表。我现在有超过 10 个过滤器,每个更改函数都调用 AJAX 请求并将相应的变量传递给 PHP 函数。像这样:

$("#categories").change(function() {
  uri = "myurl" ;
  var status=$("#statusfilter").val();
  var category=$("#categories").val();
  var network=$("#networksfilter").val();
  var prod_type = $("#prodtypefilter").val();
  loadData(uri,category,status,network,prod_type);
});

在 loadData() 中我有以下代码:

function loadData(uri,category,status,network,prod_type){
  url + = category+"/"+status+"/"+network+"/"+prod_type;
  $('#userdata').load(url); 
}

这里我只给出了 4 个过滤器,但实际上是 10 个,并且可能会增加。无论如何,这工作正常。但问题是,当我增加过滤器时,我需要为每个下拉更改函数编写相同的内容。有没有更好的方法来优化代码,这样我就不需要加载一堆 JS 了?

最佳答案

重命名过滤器元素的 ID,使其以相同的单词开头,例如“filter_”。然后一次性获取所有这些:

$('select[id^="filter_"]').change(function() {
    var uri = "myurl";
    var filters = new Array();

    $('select[id^="filter_"]').map(function () { 
        filters[$(this).name()] = $(this).val(); // not tested, just an idea
    });

    loadData(uri,filters);
});

.map() 迭代其元素,对每个元素调用一个函数并将所选选项值记录在数组中。

如果 .map() 对您来说更直观,您可以使用 .each():

$.each('select[id^="filter_"]', function() {
   filters[$(this).name()] = $(this).val(); // not tested, just an idea
});

注意:最好使用关联数组,正如 @Tony 下面注意到的那样,以确定哪个过滤器适用于服务器端脚本中的哪个数据库表属性。

关于javascript - 具有多个下拉过滤器的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396234/

相关文章:

Javascript - 切换内容功能只能使用一次

javascript - 如何使用 javascript 命令在 jw player 中获取源 url

javascript - Safari 5 扩展 XMLHttpRequest 错误 : INVALID_STATE_ERR: DOM Exception 11

ajax - 网络错误 : XMLHttpRequest Exception 101

javascript - 如何使用 jquery 向 ajax 调用添加参数?

Javascript 和渲染暂停并在 Android 浏览器中滚动时保持暂停状态

javascript - 如何使用 PayPal 的 Express In-Context Checkout 和 ReactJS?

java - struts2-jquery 迭代器中对话框的唯一 ID

javascript - 将一个元素的位置绑定(bind)到另一个元素的位置

javascript - 启用基于单选按钮选择的组合框