easyui源码翻译1.32--ComboGrid(数据表格下拉框)
前言
扩展自$.fn.combo.defaults和$.fn.datagrid.defaults。使用$.fn.combogrid.defaults重写默认值对象。下载该插件翻译源码
数据表格下拉框结合了可编辑文本框控件和下拉数据表格面板控件,该控件允许用户快速查找和选择,并且该控件提供了键盘导航支持,对行进行筛选
源码
/**
* jQuery EasyUI 1.3.2
*
*翻译:qq 1364386878 下拉表格
*/
(function ($) { function create(jq) {
var options = $.data(jq, "combogrid").options;
var grid = $.data(jq, "combogrid").grid;
$(jq).addClass("combogrid-f");
$(jq).combo(options);
var panel = $(jq).combo("panel");
if (!grid) {
grid = $("<table></table>").appendTo(panel);
$.data(jq, "combogrid").grid = grid;
}
//
grid.datagrid($.extend({}, options, {
border: false,
fit: true,
singleSelect: (!options.multiple),
onLoadSuccess: function (_6) {
var remainText = $.data(jq, "combogrid").remainText;
var remainText = $(jq).combo("getValues");
_setValues(jq, remainText, remainText);
options.onLoadSuccess.apply(jq, arguments);
}, onClickRow: onClickRow,
onSelect: function (rowIndex, rowData) {
retrieveValues();
options.onSelect.call(this, rowIndex, rowData);
},
onUnselect: function (rowIndex, rowData) {
retrieveValues();
options.onUnselect.call(this, rowIndex, rowData);
},
onSelectAll: function (rows) {
retrieveValues();
options.onSelectAll.call(this, rows);
},
onUnselectAll: function (rows) {
if (options.multiple) {
retrieveValues();
}
options.onUnselectAll.call(this, rows);
}
})); function onClickRow(rowIndex, row) {
$.data(jq, "combogrid").remainText = false;
retrieveValues();
if (!options.multiple) {
$(jq).combo("hidePanel");
}
options.onClickRow.call(this, rowIndex, row);
}; function retrieveValues() {
var remainText = $.data(jq, "combogrid").remainText;
var rows = grid.datagrid("getSelections");
var vv = [], ss = [];
for (var i = 0; i < rows.length; i++) {
vv.push(rows[i][options.idField]);
ss.push(rows[i][options.textField]);
}
if (!options.multiple) {
$(jq).combo("setValues", (vv.length ? vv : [""]));
} else {
$(jq).combo("setValues", vv);
}
if (!remainText) {
$(jq).combo("setText", ss.join(options.separator));
}
};
};
//选择行
function selectRow(jq, step) {
var options = $.data(jq, "combogrid").options;
var grid = $.data(jq, "combogrid").grid;
var length = grid.datagrid("getRows").length;
if (!length) {
return;
}
$.data(jq, "combogrid").remainText = false;
var index;
var rows = grid.datagrid("getSelections");
if (rows.length) {
index = grid.datagrid("getRowIndex", rows[rows.length - 1][options.idField]);
index += step;
if (index < 0) {
index = 0;
}
if (index >= length) {
index = length - 1;
}
} else {
if (step > 0) {
index = 0;
} else {
if (step < 0) {
index = length - 1;
} else {
index = -1;
}
}
}
if (index >= 0) {
grid.datagrid("clearSelections");
grid.datagrid("selectRow", index);
}
};
//设置值
function _setValues(jq, values, remainText) {
var options = $.data(jq, "combogrid").options;
var grid = $.data(jq, "combogrid").grid;
var rows = grid.datagrid("getRows");
var ss = [];
for (var i = 0; i < values.length; i++) {
var index = grid.datagrid("getRowIndex", values[i]);
if (index >= 0) {
grid.datagrid("selectRow", index);
ss.push(rows[index][options.textField]);
} else {
ss.push(values[i]);
}
}
if ($(jq).combo("getValues").join(",") == values.join(",")) {
return;
}
$(jq).combo("setValues", values);
if (!remainText) {
$(jq).combo("setText", ss.join(options.separator));
}
};
//查询
function _query(jq, q) {
var options = $.data(jq, "combogrid").options;
var grid = $.data(jq, "combogrid").grid;
$.data(jq, "combogrid").remainText = true;
if (options.multiple && !q) {
_setValues(jq, [], true);
} else {
_setValues(jq, [q], true);
}
if (options.mode == "remote") {
grid.datagrid("clearSelections");
grid.datagrid("load", $.extend({}, options.queryParams, { q: q }));
} else {
if (!q) {
return;
}
var rows = grid.datagrid("getRows");
for (var i = 0; i < rows.length; i++) {
if (options.filter.call(jq, q, rows[i])) {
grid.datagrid("clearSelections");
grid.datagrid("selectRow", i);
return;
}
}
}
};
//实例化组件
$.fn.combogrid = function (target, parm) {
if (typeof target == "string") {
var method = $.fn.combogrid.methods[target];
if (method) {
return method(this, parm);
} else {
return $.fn.combo.methods[target](this, parm);
}
}
target = target || {};
return this.each(function () {
var state = $.data(this, "combogrid");
if (state) {
$.extend(state.options, target);
} else {
state = $.data(this, "combogrid", {
options: $.extend({},
$.fn.combogrid.defaults,
$.fn.combogrid.parseOptions(this),
target)
});
}
create(this);
});
};
//下拉表格默认方法
$.fn.combogrid.methods = {
//返回属性对象
options: function (jq) {
var options = $.data(jq[0], "combogrid").options;
options.originalValue = jq.combo("options").originalValue;
return options;
},
//返回数据表格对象
grid: function (jq) {
return $.data(jq[0], "combogrid").grid;
},
//返回数据表格对象
setValues: function (jq, values) {
return jq.each(function () {
_setValues(this, values);
});
},
//设置组件值
setValue: function (jq, value) {
return jq.each(function () {
_setValues(this, [value]);
});
},
//设置组件值
clear: function (jq) {
return jq.each(function () {
$(this).combogrid("grid").datagrid("clearSelections");
$(this).combo("clear");
});
},
//重置
reset: function (jq) {
return jq.each(function () {
var options = $(this).combogrid("options");
if (options.multiple) {
$(this).combogrid("setValues", options.originalValue);
} else {
$(this).combogrid("setValue", options.originalValue);
}
});
}
};
//解析器
$.fn.combogrid.parseOptions = function (target) {
var t = $(target);
return $.extend({}, $.fn.combo.parseOptions(target),
$.fn.datagrid.parseOptions(target),
$.parser.parseOptions(target, ["idField", "textField", "mode"]));
};
$.fn.combogrid.defaults = $.extend({}, $.fn.combo.defaults,
$.fn.datagrid.defaults, {
loadMsg: null,//在数据表格加载远程数据的时候显示消息
idField: null,//ID字段名称
textField: null,//ID字段名称
//定义在文本改变的时候如何读取数据网格数据。设置为'remote',
//数据表格将从远程服务器加载数据。当设置为'remote'模式的时候,用户输入将会发送到名为'q'的http请求参数,向服务器检索新的数据。
mode: "local", keyHandler: {
up: function () {
selectRow(this, -1);
},
down: function () {
selectRow(this, 1);
},
enter: function () {
selectRow(this, 0);
$(this).combo("hidePanel");
},
query: function (q) {
_query(this, q);
}
},
//定义在'mode'设置为'local'的时候如何选择本地数据,返回true时则选择该行
filter: function (q, row) {
var options = $(this).combogrid("options");
return row[options.textField].indexOf(q) == 0;
}
});
})(jQuery);
示例代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ComboGrid Actions - jQuery EasyUI Demo</title>
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
<link rel="stylesheet" type="text/css" href="../demo.css">
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="../../jquery-1.8.0.min.js"></script>
<script src="../../plugins2/jquery.parser.js"></script>
<script src="../../plugins2/jquery.validatebox.js"></script>
<script src="../../plugins2/jquery.panel.js"></script>
<script src="../../plugins2/jquery.resizable.js"></script>
<script src="../../plugins2/jquery.linkbutton.js"></script>
<script src="../../plugins2/jquery.pagination.js"></script>
<script src="../../plugins2/jquery.combo.js"></script>
<script src="../../plugins2/jquery.datagrid.js"></script>
<script src="../../plugins2/jquery.combogrid.js"></script>
</head>
<body>
<h2>ComboGrid Actions</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>Click the buttons below to perform actions.</div>
</div>
<div style="margin:10px 0">
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="getValue()">GetValue</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="setValue()">SetValue</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="disable()">Disable</a>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="enable()">Enable</a>
</div>
<input id="cc" class="easyui-combogrid" style="width:250px" data-options="
panelWidth: 500,
idField: 'itemid',
textField: 'productname',
url: '../combogrid/datagrid_data1.json',
columns: [[
{field:'itemid',title:'Item ID',width:80},
{field:'productname',title:'Product',width:120},
{field:'listprice',title:'List Price',width:80,align:'right'},
{field:'unitcost',title:'Unit Cost',width:80,align:'right'},
{field:'attr1',title:'Attribute',width:200},
{field:'status',title:'Status',width:60,align:'center'}
]],
fitColumns: true
">
<script type="text/javascript">
function getValue(){
var val = $('#cc').combogrid('getValue');
alert(val);
}
function setValue(){
$('#cc').combogrid('setValue', 'EST-13');
}
function disable(){
$('#cc').combogrid('disable');
}
function enable(){
$('#cc').combogrid('enable');
}
</script>
</body>
</html>
插件效果
easyui源码翻译1.32--ComboGrid(数据表格下拉框)的更多相关文章
- 第二百二十四节,jQuery EasyUI,ComboGrid(数据表格下拉框)组件
jQuery EasyUI,ComboGrid(数据表格下拉框)组件 学习要点: 1.加载方式 2.属性列表 3.方法列表 本节课重点了解 EasyUI 中 ComboGrid(数据表格下拉框)组件的 ...
- ComboGrid( 数据表格下拉框)
一. 加载方式//class 加载方式<select id="box" class="easyui-combogrid" name="dept& ...
- easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)
前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...
- easyui源码翻译1.32--PropertyGrid(属性表格)
前言 继承自$.fn.datagrid.defaults.使用$.fn.propertygrid.defaults重写默认值对象.下载该插件翻译源码 属性表格提供The propertygrid pr ...
- easyui源码翻译1.32--TreeGrid(树形表格)
前言 扩展自$.fn.datagrid.defaults.使用$.fn.treegrid.defaults重写默认值对象.下载该插件翻译源码 树形表格用于显示分层数据表格.它是基于数据表格.组合树控件 ...
- ExtJs 扩展类CheckColumn修改源码,支持按条件禁用启用下拉框功能
长话短说,具体的请看图 需求如图: 修改CheckColumn.js源码,添加鼠标点击改变事件 完整JS脚本 Ext.ns('Ext.ux.grid'); Ext.ux.grid.CheckColum ...
- jQuery EasyUI/TopJUI创建树形表格下拉框
jQuery EasyUI/TopJUI创建树形表格下拉框 第一种方法(纯HTML创建) <div class="topjui-row"> <div class= ...
- easyui源码翻译1.32--datagrid(数据表格)
前言 此前网上有easyui1.25的源码 应该算是比较老的版本 之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34 1.33开始支持css3 算是又一个转折 但是 ...
- easyui源码翻译1.32--Combo(自定义下拉框)
前言 扩展自$.fn.validatebox.defaults.使用$.fn.combo.defaults重写默认值对象.下载该插件翻译源码 自定义下拉框显示一个可编辑的文本框和下拉面板在html页面 ...
随机推荐
- java.net.BindException: 权限不够
在Linux 下 ,今天写了个socket小程序,绑定80端口,发现抛异常 原因其实是因为在linux下,如果使用1024以下的端口则需要root权限, 所以因为我当前使用的不是root权限,所以权限 ...
- Sqlserver 快照
最近,开发系统使用SqlServer2008 R2,但是由于系统数据压力的增加,准备增加一个和正式数据库同步的库,用来供接口和报表使用,所以开始对SqlServer里面的一些技术开始研究,第一篇先来研 ...
- WCF编程系列(三)地址与绑定
WCF编程系列(三)地址与绑定 地址 地址指定了接收消息的位置,WCF中地址以统一资源标识符(URI)的形式指定.URI由通讯协议和位置路径两部分组成,如示例一中的: http://loc ...
- JavaScript学习笔记(7)——JavaScript语法之函数
函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { //这里是要执行的代码 } 当调用该函数时,会执行函数内的代码. 可以在某事件 ...
- static的应用以及静态与非静态的区别
先前看到一个技术大牛写了一个关于静态成员与非静态成员,静态方法和非静态方法的各自区别,觉得挺好的,在这里写一个小程序来说明这些区别. package com.liaojianya.chapter5; ...
- c++实现类似Common Lisp的多参数加法和比较
在CL里我们可以这样: $ sbcl * (+ 1 2 3) 6 * (< 1 2 3) T * (< 2 3 1) NIL * 从简单的方面看, CL的+和<就是一个接收多参数的函 ...
- linux 终端快捷键
1. 移动光标快捷键 ctrl+f 向前移动一个字符 ctrl+b 向后移动一个字符 alt+f 向前移动一个单词 alt+b 向后移动一个单词 ctrl+a 移动到当前行首 ctrl+e 移动到当前 ...
- Python3 面向对象
Class 在Python中,定义类是通过class关键字: class Student(object): pass class后面紧接着是类名,即Student,类名通常是大写开头的单词,紧接着是( ...
- 目前IT行业的几个大方向
我简单总结了一下目前it行业的8大方向: 1.嵌入式开发 传统的arm linux开发.新兴的智能硬件.物联网等技术的发展,都让整个方向成为热门领域. 2.游戏开发 cocos2d-x.uni ...
- 推荐一款java的验证码组件——kaptcha
使用方法: 项目中导入kaptcha-2.3.jar包 在web.xml里面新增: <!-- 登陆验证码Kaptcha --> <servlet> <servlet- ...