jqgrid搜索弹出窗口允许删除所有过滤器! [英] jqgrid search popup allows all filters to be removed!

查看:65
本文介绍了jqgrid搜索弹出窗口允许删除所有过滤器!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在JqGrid上执行非常简单的搜索弹出窗口.请参见下面的代码.有几个问题:

I'm trying out very simple search popup on the JqGrid. Please see the code below. There are few issues:

  • 弹出式菜单的最顶部带有与/或"和[+]控件.请参见下面的屏幕截图:(来自FF 4)

  • The popup comes up with AND/OR and [+] controls at the very top. See screenshot below: (from FF 4)

您可以单击[-]按钮删除第一行(也是唯一的)过滤器行.它不应该被允许.绝对不允许删除第一过滤器行.

You can click on [-] button to remove the very first (and only) filter row. It shouldn't be allowed. First filter row should never be allowed to be removed.

代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html>
<head>
<title>JQGRID Test</title>      
<link rel="stylesheet" type="text/css" media="screen" href="http://trirand.com/blog/jqgrid/themes/redmond/jquery-ui-1.8.1.custom.css"/>
<link rel="stylesheet" type="text/css" media="screen" href="http://trirand.com/blog/jqgrid/themes/ui.jqgrid.css"/>

<script type="text/javascript" src="http://trirand.com/blog/jqgrid/js/jquery.js"></script>
<script type="text/javascript" src="http://trirand.com/blog/jqgrid/js/jquery-ui-1.8.1.custom.min.js"></script>
<script type="text/javascript" src="http://trirand.com/blog/jqgrid/js/i18n/grid.locale-en.js"></script>
<script type="text/javascript" src="http://trirand.com/blog/jqgrid/js/jquery.jqGrid.min.js"></script>

<script type="text/javascript">
    $(function() {
        createGrid();
    });
    function createGrid() {
        $("#jqgrid-table").jqGrid({
            colNames:['First Name', 'Last Name', 'Age', 'IQ', 'Type'],
            colModel:[
                {name:'firstName',index:'firstName', width:100},
                {name:'lastName',index:'lastName', width:100},
                {name:'age', index:'age', width:50},
                {name:'iq', index:'iq', width:50, stype:'select', searchoptions: {dataUrl:'/api/domains/putcalldomain'}},
                {name:'type', index:'type', width: 56}
            ],
            width: 800,
            datatype:'local',                   
            pager: '#pager2',
            viewrecords: true,
            caption:"JSON Example"
        });
        var searchOptions = {
            caption: 'Filter...',
            multipleSearch:true,
            closeAfterSearch:true,
            closeAfterReset:true,
            Find: 'Filter'
        };                
        jQuery("#jqgrid-table").jqGrid('navGrid',
                                '#pager2', 
                                {search:true, edit:false, add:false, del:false, refresh:false}, 
                                null, null, null, searchOptions
                                );
        var data = getData();
        for(var i =0; i < data.length; i++) {
            var r = data[i];
            jQuery("#jqgrid-table").addRowData(r.id, r);
        }
    }
    function getData() {
        return [
               {id:1, firstName: 'John', lastName: 'XXX',  age:'30',  iq:'200', type: 'Nice'},
               {id:2, firstName: 'Ashley', lastName:'YYY', age:'31', iq:'210', type:'Nicer'},
               {id:3, firstName:'Smith', lastName:'ZZZ', age:'23', iq:'90', type:'Nicest'}
            ];
   }

</script>
</head>
<body>
  <div id='jqgrid-div'>
      <table id='jqgrid-table'></table>
     <div id="pager2"></div>
  </div>
</body>
</html>

推荐答案

我建议覆盖用于过滤的内部reDraw方法(请参见

I suggest to overwrite the internal reDraw method used by filtering (see my another answer for more description). To do this you should include in the searchOptions which you use the beforeShowSearch event handler with the following implementation:

beforeShowSearch: function($form) {
    var searchDialog = $form[0],
        oldrReDraw = searchDialog.reDraw, // save the original reDraw method
        doWhatWeNeed = function() {
            $('input.delete-rule:first',searchDialog).unbind('click');

            // set fucus in the last input field
            setTimeout(function() {
               // set fucus in the last input field
               $('input[type="text"]:last',searchDialog).focus();
            }, 50);
        }
    searchDialog.reDraw = function() {
        oldrReDraw.call(searchDialog);    // call the original reDraw method
        doWhatWeNeed();
    }
    doWhatWeNeed();
}

您可以在此处看到相应的演示.

You can see the corresponding demo here.

这篇关于jqgrid搜索弹出窗口允许删除所有过滤器!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆