easyui源码翻译1.32--SearchBox(搜索框)
前言
使用$.fn.searchbox.defaults重写默认值对象。下载该插件翻译源码
搜索框提示用户需要输入搜索的值。它可以结合一个菜单,允许用户选择不同的搜索类别。在用户按下回车键或点击组件右边的搜索按钮的时候会执行搜索操作。
源码
- /**
- * jQuery EasyUI 1.3.2
- *
- *翻译:qq 1364386878
- */
- (function ($) {
- //初始化搜索框
- function initSearchbox(jq) {
- $(jq).hide();
- var sb = $("<span class=\"searchbox\"></span>").insertAfter(jq);
- var textBox = $("<input type=\"text\" class=\"searchbox-text\">").appendTo(sb);
- $("<span><span class=\"searchbox-button\"></span></span>").appendTo(sb);
- var name = $(jq).attr("name");
- if (name) {
- textBox.attr("name", name);
- $(jq).removeAttr("name").attr("searchboxName", name);
- }
- return sb;
- };
- //重设组件的宽度
- function _resize(jq, width) {
- var opts = $.data(jq, "searchbox").options;
- var sb = $.data(jq, "searchbox").searchbox;
- if (width) {
- opts.width = width;
- }
- sb.appendTo("body");
- if (isNaN(opts.width)) {
- opts.width = sb._outerWidth();
- }
- var btn = sb.find("span.searchbox-button");
- var menu = sb.find("a.searchbox-menu");
- var textbox = sb.find("input.searchbox-text");
- sb._outerWidth(opts.width)._outerHeight(opts.height);
- textbox._outerWidth(sb.width() - menu._outerWidth() - btn._outerWidth());
- textbox.css({ height: sb.height() + "px", lineHeight: sb.height() + "px" });
- menu._outerHeight(sb.height());
- btn._outerHeight(sb.height());
- var leftbtn = menu.find("span.l-btn-left");
- leftbtn._outerHeight(sb.height());
- leftbtn.find("span.l-btn-text,span.m-btn-downarrow").css({ height: leftbtn.height() + "px", lineHeight: leftbtn.height() + "px" });
- sb.insertAfter(jq);
- };
- //初始化菜单项
- function initMenu(jq) {
- var sb = $.data(jq, "searchbox");
- var opts = sb.options;
- if (opts.menu) {
- sb.menu = $(opts.menu).menu({
- onClick: function (item) {
- _clickMenu(item);
- }
- });
- ////设置默认选中
- var selecteds = sb.menu.children("div.menu-item:first");
- sb.menu.children("div.menu-item").each(function () {
- var _15 = $.extend({}, $.parser.parseOptions(this), { selected: ($(this).attr("selected") ? true : undefined) });
- if (_15.selected) {
- selecteds = $(this);
- return false;
- }
- });
- selecteds.triggerHandler("click");
- } else {
- sb.searchbox.find("a.searchbox-menu").remove();
- sb.menu = null;
- }
- //点击菜单按钮的事件处理方法
- function _clickMenu(item) {
- sb.searchbox.find("a.searchbox-menu").remove();
- var mb = $("<a class=\"searchbox-menu\" href=\"javascript:void(0)\"></a>").html(item.text);
- mb.prependTo(sb.searchbox).menubutton({ menu: sb.menu, iconCls: item.iconCls });
- sb.searchbox.find("input.searchbox-text").attr("name", $(item.target).attr("name") || item.text);
- _resize(jq);
- };
- };
- //绑定事件
- function bindEvent(jq) {
- var sb = $.data(jq, "searchbox");
- var opts = sb.options;
- var textBox = sb.searchbox.find("input.searchbox-text");
- var btn = sb.searchbox.find(".searchbox-button");
- textBox.unbind(".searchbox").bind("blur.searchbox", function (e) {//文本框绑定离开事件
- opts.value = $(this).val();
- if (opts.value == "") {
- $(this).val(opts.prompt);
- $(this).addClass("searchbox-prompt");
- } else {
- $(this).removeClass("searchbox-prompt");
- }
- }).bind("focus.searchbox", function (e) {//绑定焦点事件
- if ($(this).val() != opts.value) {
- $(this).val(opts.value);
- }
- $(this).removeClass("searchbox-prompt");
- }).bind("keydown.searchbox", function (e) {//绑定按键事件
- if (e.keyCode == 13) {
- e.preventDefault();
- var _1d = $.fn.prop ? textBox.prop("name") : textBox.attr("name");
- opts.value = $(this).val();
- opts.searcher.call(jq, opts.value, _1d);
- return false;
- }
- });
- btn.unbind(".searchbox").bind("click.searchbox", function () {//按钮绑定点击事件
- var name = $.fn.prop ? textBox.prop("name") : textBox.attr("name");
- opts.searcher.call(jq, opts.value, name);
- }).bind("mouseenter.searchbox", function () {
- $(this).addClass("searchbox-button-hover");
- }).bind("mouseleave.searchbox", function () {
- $(this).removeClass("searchbox-button-hover");
- });
- };
- //初始化组件文本框
- function initTextBox(jq) {
- var sb = $.data(jq, "searchbox");
- var opts = sb.options;
- var textBox = sb.searchbox.find("input.searchbox-text");
- if (opts.value == "") {
- textBox.val(opts.prompt);
- textBox.addClass("searchbox-prompt");
- } else {
- textBox.val(opts.value);
- textBox.removeClass("searchbox-prompt");
- }
- };
- //实例化
- $.fn.searchbox = function (options, param) {
- if (typeof options == "string") {
- return $.fn.searchbox.methods[options](this, param);
- }
- options = options || {};
- return this.each(function () {
- var searchbox = $.data(this, "searchbox");
- if (searchbox) {
- $.extend(searchbox.options, options);
- } else {
- searchbox = $.data(this, "searchbox", { options: $.extend({}, $.fn.searchbox.defaults, $.fn.searchbox.parseOptions(this), options), searchbox: initSearchbox(this) });
- }
- initMenu(this);
- initTextBox(this);
- bindEvent(this);
- _resize(this);
- });
- };
- //默认方法
- $.fn.searchbox.methods = {
- //返回属性对象
- options: function (jq) {
- return $.data(jq[0], "searchbox").options;
- },
- //返回搜索类型菜单对象。下面的例子显示了更改菜单项图标
- menu: function (jq) {
- return $.data(jq[0], "searchbox").menu;
- },
- //返回文本框对象
- textbox: function (jq) {
- return $.data(jq[0], "searchbox").searchbox.find("input.searchbox-text");
- },
- //返回当前搜索值
- getValue: function (jq) {
- return $.data(jq[0], "searchbox").options.value;
- },
- //设置一个新的搜索值
- setValue: function (jq, value) {
- return jq.each(function () {
- $(this).searchbox("options").value = value;
- $(this).searchbox("textbox").val(value);
- $(this).searchbox("textbox").blur();
- });
- },
- //返回当前搜索类型名
- getName: function (jq) {
- return $.data(jq[0], "searchbox").searchbox.find("input.searchbox-text").attr("name");
- },
- //选择当前搜索类型名
- selectName: function (jq, name) {
- return jq.each(function () {
- var menu = $.data(this, "searchbox").menu;
- if (menu) {
- menu.children("div.menu-item[name=\"" + name + "\"]").triggerHandler("click");
- }
- });
- },
- //销毁该控件
- destroy: function (jq) {
- return jq.each(function () {
- var menu = $(this).searchbox("menu");
- if (menu) {
- menu.menu("destroy");
- }
- $.data(this, "searchbox").searchbox.remove();
- $(this).remove();
- });
- },
- //重置组件宽度
- resize: function (jq, width) {
- return jq.each(function () {
- _resize(this, width);
- });
- }
- };
- //解析器配置
- $.fn.searchbox.parseOptions = function (target) {
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, ["width", "height", "prompt", "menu"]),
- { value: t.val(), searcher: (t.attr("searcher") ? eval(t.attr("searcher")) : undefined) });
- };
- //搜索框默认属性 事件
- $.fn.searchbox.defaults = {
- //组件宽度
- width: "auto",
- //组件高度
- height: 22,
- //在输入框中显示提示消息
- prompt: "",
- //输入的值
- value: "",
- //搜索类型菜单。每个菜单项都具备一下属性:
- //name:搜索类型名称。
- //selected:自定义默认选中的搜索类型名称
- menu: null,
- //在用户按下搜索按钮或回车键的时候调用searcher函数
- searcher: function (value, name) {
- }
- };
- })(jQuery);
示例代码
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>Basic SearchBox - 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 src="../../plugins2/jquery.parser.js"></script>
- <script src="../../plugins2/jquery.menu.js"></script>
- <script src="../../plugins2/jquery.linkbutton.js"></script>
- <script src="../../plugins2/jquery.menubutton.js"></script>
- <script src="../../plugins2/jquery.searchbox.js"></script>
- </head>
- <body>
- <h2>Basic SearchBox</h2>
- <div class="demo-info">
- <div class="demo-tip icon-tip"></div>
- <div>Click search button or press enter key in input box to do searching.</div>
- </div>
- <div style="margin:10px 0;"></div>
- <input class="easyui-searchbox" data-options="prompt:'Please Input Value',searcher:doSearch" style="width:300px"></input>
- <script>
- function doSearch(value){
- alert('You input: ' + value);
- }
- </script>
- </body>
- </html>
插件效果
easyui源码翻译1.32--SearchBox(搜索框)的更多相关文章
- easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)
前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...
- easyui源码翻译1.32--ValidateBox(验证框)
前言 使用$.fn.validatebox.defaults重写默认值对象.下载该插件翻译源码 validatebox(验证框)的设计目的是为了验证输入的表单字段是否有效.如果用户输入了无效的值,它将 ...
- easyui源码翻译1.32--datagrid(数据表格)
前言 此前网上有easyui1.25的源码 应该算是比较老的版本 之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34 1.33开始支持css3 算是又一个转折 但是 ...
- easyui源码翻译1.32--EasyLoader(简单加载)
前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...
- easyui源码翻译1.32--Combo(自定义下拉框)
前言 扩展自$.fn.validatebox.defaults.使用$.fn.combo.defaults重写默认值对象.下载该插件翻译源码 自定义下拉框显示一个可编辑的文本框和下拉面板在html页面 ...
- easyui源码翻译1.32--Draggable(拖动)
前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...
- easyui源码翻译1.32--Droppable(放置)
前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...
- easyui源码翻译1.32--Resizable(调整大小)
前言 使用$.fn.resizable.defaults重写默认值对象 下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 Resiz ...
- easyui源码翻译1.32--Pagination(分页)
前言 使用$.fn.pagination.defaults重写默认值对象下载该插件翻译源码 该分页控件允许用户导航页面的数据.它支持页面导航和页面长度选择的选项设置.用户可以在分页控件上添加自定义按钮 ...
随机推荐
- 【HTML XHTML CSS基础教程(第6版)】笔记之HTML XHTML笔记(1~6章)
第1章 网页的构造块 1.(X)HTML有三种主要的标记类型:元素,属性,值. 2.浏览器主要通过查看文件的扩展名(.htm或.html)来得知应该按照网页的方式读取文本文件. 3.H ...
- 利用CodeSmith生成抽象工厂步骤
其实CodeSmith挺好的,帮我们主动生成不少代码,并且代码质量不错,下面就来介绍一下利用CodeSmith生成抽象工厂步骤 打开codesmith模板的buildall 注意path的设置,因为后 ...
- ACM——Digital Roots
http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1028 Digital Roots 时间 ...
- java学习笔记3
今天在练习java中的javabean的使用中发现.usebean的 <jsp:setProperty property="id" name="user" ...
- ###STL学习--标准模板库
下面进行STL的学习.希望能了解标准模板库中的常用容器,迭代器,可以自由运用STL以提高编写代码的效率.下面的内容我想以知识点为总结,不再像<Effective C++>那样以章节进行总结 ...
- android 登陆案例_sd卡
代码: <?xml version="1.0"?> -<LinearLayout android:paddingTop="@dimen/activity ...
- 什么是SQL statement?
什么是SQL statement? 1.SQL SELECT statement - SELECT命令 REFER: What is SQL, and what are some example st ...
- C++实用数据结构:二叉索引树
看下面这个问题(动态连续和查询): 有一个数组A(长度为n),要求进行两种操作: add(i,x):让Ai增大x: query(a,b):询问Aa+Aa+1+...+Ab的和: 若进行模拟,则每次qu ...
- 某deed笔试题
1. 删除ra,输入s,然后从前往后扫,遇到直接删除,O(n),算水题吧. 2. 矩阵乘法,看完题,感觉这么简单,估计有什么套路,仔细再读一遍,发现真是水题,50*50*50=125000,在2s时 ...
- How do I create an installation log?
Quote from: http://www.advancedinstaller.com/user-guide/qa-log.html Windows Installer logging Window ...