Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何不使用内置的搜索/筛选框筛选jqGrid数据_Jquery_Search_Filter_Jqgrid - Fatal编程技术网

Jquery 如何不使用内置的搜索/筛选框筛选jqGrid数据

Jquery 如何不使用内置的搜索/筛选框筛选jqGrid数据,jquery,search,filter,jqgrid,Jquery,Search,Filter,Jqgrid,我希望用户能够在不使用内部搜索框的情况下过滤网格数据 我已经为date创建了两个输入字段(from和to),现在需要告诉网格将其作为过滤器,然后请求新数据 伪造服务器对网格数据的请求(绕过网格)并将网格数据设置为响应数据是行不通的,因为一旦用户尝试重新排序结果或更改页面等,网格将使用空白过滤器从服务器请求新数据 我似乎找不到网格API来实现这一点——有人有什么想法吗?谢谢。关于postData参数,包括函数和触发器('reloadGrid'),您的问题很容易解决。我试着更详细地解释这个想法 让我

我希望用户能够在不使用内部搜索框的情况下过滤网格数据

我已经为date创建了两个输入字段(from和to),现在需要告诉网格将其作为过滤器,然后请求新数据

伪造服务器对网格数据的请求(绕过网格)并将网格数据设置为响应数据是行不通的,因为一旦用户尝试重新排序结果或更改页面等,网格将使用空白过滤器从服务器请求新数据


我似乎找不到网格API来实现这一点——有人有什么想法吗?谢谢。

关于
postData
参数,包括函数和
触发器('reloadGrid')
,您的问题很容易解决。我试着更详细地解释这个想法

让我们使用
mtype:“GET”
。显示界面后,标准搜索/过滤框所做的唯一一件事就是向url添加一些附加参数,发送到服务器并重新加载网格数据。如果您有自己的搜索/过滤界面(例如,一些选择控件或复选框),您应该自己添加url,并根据
触发器(“reloadGrid”)
重新加载网格。要重置网格中的信息,您可以选择您喜欢的任何方式。例如,您可以在选择控件中包含一个选项,如“无筛选”

更确切地说,您的代码应该与答案中的代码类似:

如果用户使用
id=StateId
更改选择框中的所选选项,或使用
id=CityId
更改另一个选择框(使用鼠标或键盘),则将调用函数
myReload
,该函数仅强制重新加载jqGrid中的数据。在jqGrid为我们执行的相应的
$.ajax
请求期间,
postData
参数中的值将作为
data
参数转发到
$.ajax
。如果
数据
的某些属性是函数,则这些函数将由
$.ajax
调用。因此,将加载来自选择框的实际数据,并将所有数据附加到发送到服务器的数据中。您只需要在服务器部件中实现此参数的读取

因此,来自
postData
参数的数据将被附加到url(符号“?”和“&”将自动添加,所有特殊符号(如空格)也将像往常一样进行编码)。使用
postData
的优点是:

  • 函数的使用内部
    postData
    参数允许您从所有使用的控件加载到重新加载时的实际值
  • 您的代码具有非常清晰的结构
  • 所有这些都可以很好地工作,不仅适用于HTTP GET请求,还适用于HTTP POST 如果在选择框
    StateId
    中使用一些“无筛选”或“全部”条目,则可以修改用于计算
    StateId
    参数值的函数,该参数应从

    StateId: function() { return jQuery("#StateId option:selected").val(); }
    
    类似于以下内容:

    StateId: function() {
        var val = jQuery("#StateId option:selected").val();
        return val === "all"? "": val;
    }
    
    在服务器端,如果接收到空值作为参数,则不应对
    StateId
    进行筛选


    您可以选择使用
    myGrid.setCaption('A text')更改网格标题。这让用户可以更清楚地看到,网格中的数据是通过一些标准过滤的。

    我也有同样的要求,并且(在Oleg的帮助下)提出了以下建议:

    基本上,用户开始在“Employee name”文本框中输入,结果立即显示在jqGrid中

    我是如何实现这一点的详细信息如下:

    请注意,我专门提前为jqGrid加载了所有JSON数据,对于大型数据集,在iPhone/Android设备上键入每个字符时运行此代码会有延迟


    但是,对于桌面web应用程序来说,它是一个很好的解决方案,并且使jqGrid对用户更加友好。

    通过使用
    ReloadGrid()
    jquery
    函数,您可以创建自己的自定义筛选函数。

    @Oleg,我可以用
    grid.setGridParam>覆盖默认的
    postData
    函数吗?我正试图这样做,但没有成功。看起来,即使我通过
    grid.setGridParam
    设置了一个参数,它仍然会得到我以前定义的默认
    postData
    函数。@AdrianoRR:也许你应该写一个新问题,描述你想解决的问题。你需要什么?是否希望某些参数不会发送到服务器?是否需要现有参数的自定义格式(如转换为JSON)?或者您可能不想向服务器发送任何其他参数?@Oleg,通过查看您的其他帖子,我设法得到了自己的答案。通过使用
    grid.getGridParam
    我可以获得postData属性并将它们设置为我想要的任何值。然后我所要做的就是调用
    grid.trigger(“reloadGrid”)并完成更改。无论如何,谢谢你的S.O.帖子@阿德里亚诺尔:不客气!对不起,我还是不明白你想做什么。是否要发布其他自定义参数或以某种方式更改现有标准参数?我建议你问一个新问题,让你有更多的地方来详细描述你的问题,并解释你需要实现什么,需要向服务器发送什么信息等等。@abhihello123:欢迎你!用法
    $(“#list”).jqGrid.trigger('reloadGrid')
    完全错误。表达式
    $(“#list”).trigger('reloadGrid')
    正确。该方法是常见的jQuery方法,可以应用于任何jQuery对象
    $(“#list”)
    myGrid
    是jQuery对象,因此可以对对象使用
    trigger
    方法。表达式
    $(“#list”).jqGrid
    i
    StateId: function() {
        var val = jQuery("#StateId option:selected").val();
        return val === "all"? "": val;
    }