推荐Tablepicker的JQuery插件?

时间:2010-09-10 19:14:39

标签: jquery datepicker

我正在寻找一个看起来像JQuery插件的JQuery插件的推荐,但是允许我从表中选择一行。各种表格选择列表。我不得不相信这样的东西在那里,但我似乎找不到类似的东西。我不是在寻找一个自动完成器 - 更像是当JSP表单字段获得焦点时,会出现一个由表填充的选择列表......

任何/所有回复都表示赞赏。

3 个答案:

答案 0 :(得分:1)

我为此推出了自己的选择器并为它制作了一个插件。这是我制作jQuery插件的第一步,所以欢迎任何建议或反馈。代码高度依赖于Jquery 1.4.2,用于弹出窗口的CSS格式的JQuery UI以及用于表格格式和分页的DataTables插件。


jquery.tablepicker.js

(function($) {
  // Shell for the plugin code
  $.fn.tablePicker = function(options) {
    // Plugin code
    var tbl = null;
    return this.each(function() {
      // for each item in selector
      options = $.extend($.fn.tablePicker.defaults, options);
      tbl= $('#'+options.tblName);
      $(tbl).wrap(options.container);
      if(!$.isEmptyObject(options.header)){
          var headerHtml= '<div align="center">' + options.header + '</div>';
          $(this).find("#tp-container").prepend(headerHtml);
      }
      $(this).addClass("ui-hidden-on-load").addClass("ui-tablepicker");
      $(this).addClass("ui-widget").addClass("ui-widget-content");
      $(this).addClass("ui-helper-clearfix").addClass("ui-corner-all");
      $(this).addClass("ui-helper-hidden-accessible");
      $(this).css("position", options.position);

      if(!$.isEmptyObject(options.top)){
          $(this).css("top", options.top);
      }else{
          var offset= $("#"+options.forinput).offset();
          $(this).css("top", offset.top);
      }

      if(!$.isEmptyObject(options.left)){
          $(this).css("left", options.left);
      }else{
          var offset= $("#"+options.forinput).offset();
          $(this).css("left", offset.left);
      }
      $(this).css("z-index", "1");

      tbl= _setUpDataTable(tbl);
      _performBindings(tbl, this);


    });
    function _setUpDataTable(tbl){
        options = $.extend($.fn.tablePicker.defaults, options);
        tbl= $(tbl).dataTable( {
            "aoColumns" : options.aoColumns,
            "bFilter" : options.bFilter,
            "bPaginate" : options.bPaginate,
            "bLengthChange" : options.bLengthChange,
            "bAutoWidth" : options.bAutoWidth,
            "sScrollY" : options.sScrollY,
            "sPaginationType" : options.sPaginationType,
            "bProcessing" : options.bProcessing,
            "sAjaxSource" : options.sAjaxSource
        });
        return tbl;

    };
    function _performBindings(dataTable, picker){
        options = $.extend($.fn.tablePicker.defaults, options);
        var tableName= options.tblName;
        var inputToBind=$('#'+options.forinput);
        // Bind hide list to all inputs
        var tableFilter= tableName + '_filter';
        $('input, select').live('focus', function(event) {
            if ($(event.target).parent().attr('id') != tableFilter) {
                _hideList(picker);
            }
        });
        // Don't bind hide list to the field we want to show the list for
        $(inputToBind).unbind('focus');
        // Bind to the field to show the list on.   
        $(inputToBind).focus(function() {
            if (!$(picker).is(':visible')) {
                $(picker).slideToggle();
            }
        });
        // Bindings for mouse over on table
        var tbl= $('#'+tableName); 
        $(tbl).find('tbody tr').live('mouseover mouseout', function(event) {
            if (event.type == 'mouseover') {
                $(this).addClass('hover');
            } else {
                $(this).removeClass('hover');
            }
        });
        // handle the click event of the table
        $(tbl).find('tbody tr').live('click', function(event, ui) {
            var aData = dataTable.fnGetData(this);
            if (aData != null) {
                $.isFunction(options.onClick) && options.onClick.call(this, aData);
            }
            _hideList(picker);
        });

    }
    function _hideList(picker) {
        if ($(picker).is(':visible')) {
            $(picker).slideToggle();
        }
    }

  }
  $.fn.tablePicker.defaults = {
    header      :   null,
    container   :   '<div id="tp-container" class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all"/>',
    position    :   'absolute',
    top         :   null,
    left        :   null,
    tblName     :   'list_table',
    forinput    :   'input',
    aoColumns   :   [ {"bVisible" : false}, null, null, null, null, {"bVisible" : false}],
    bFilter     :   true,
    bPaginate   :   true,
    bLengthChange : false,
    bAutoWidth  :   true,
    sScrollY    :   "200px",
    sPaginationType : "full_numbers",
    bProcessing :   true,
    sAjaxSource :   './list-data.do',
    onClick     :   null

  };
})(jQuery);

jquery.tablepicker.css

.ui-hidden-on-load{display: none;}
.ui-tablepicker { width: 35em; padding: .25em .25em 0; z-index: 1}
.ui-tablepicker .ui-tablepicker-header { position:relative; padding:.2em 0; }
.ui-widget-header div{ width: 100% }

使用:这高度依赖于JQuery和DataTables.net插件。

    ...
<link href="/pw/css/jquery.tablepicker.css" rel="stylesheet" type="text/css" media="screen">
<script type="text/javascript" src="/pw/js/jquery.tablepicker.js"></script>
<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
        $("#partListPicker").tablePicker({
                tblName: 'part_table', 
                forinput: "part",
                 onClick: function(data){
                    var partNum = data[1];
                    $("#part").val(partNum);
                 },
                 sAjaxSource :  './partlist-data.do?id=50150',
                 aoColumns  :   [ {"bVisible" : false}, null, null, null],
        });

    });
</script>
<s:form action="... theme="simple">
...
<table width="100%" align="center" border="0">
    <tr>
        <td align="right">
            <label for="part" class="required">Part:</label>
        </td>   
        <td align="left">
            <input id="part" class="staticBody" maxlength="240" size="50"> 
        </td>
    </tr>
</table>
</s:form>
<!-- Data table for the pick list -->
<div id="partListPicker">
    <table cellpadding="0" cellspacing="0" border="0" class="display" id="part_table">
        <thead>
            <tr>
                <th>Id</th>
                <th>Part #</th>
                <th>Description</th>
                <th>Technology Level</th>
            </tr>
        </thead>
        <tbody>
        </tbody>
    </table>
</div>   

答案 1 :(得分:1)

即时使用jqueryUI对话框+ jQGrid。

这样你就可以使用搜索工具栏和寻呼机完成数据表选择器

答案 2 :(得分:0)

Ryley的评论100%正确。使用插件可以让您的生活更加艰难,而不是更容易。

所以我的建议不能再简单了:使用选择。