easyui源码翻译1.32--NumberBox(数值输入框)
前言
扩展自$.fn.validatebox.defaults。使用$.fn.numberbox.defaults重写默认值对象。下载该插件翻译源码
数值输入框是用来限制用户只能输入数值型数据的。他可以转换一个输入的元素到其他类型,比如:数字、百分比、货币等。更多的输入类型定义依赖于'formatter'和'parser'函数
源码
/**
* jQuery EasyUI 1.3.2
*
*翻译:qq 1364386878 数值输入框
*/
(function ($) {
//隐藏字段
function hiddenField(target) {
$(target).addClass("numberbox-f");
var v = $("<input type=\"hidden\">").insertAfter(target);
var name = $(target).attr("name");
if (name) {
v.attr("name", name);
$(target).removeAttr("name").attr("numberboxName", name);
}
return v;
};
//初始化值
function initValue(target) {
var options = $.data(target, "numberbox").options;
var fn = options.onChange;
options.onChange = function () {
};
_fixValue(target, options.parser.call(target, options.value));
options.onChange = fn;
options.originalValue = _getValue(target);
};
//获取值
function _getValue(target) {
return $.data(target, "numberbox").field.val();
};
//修正值
function _fixValue(target, val) {
var numberbox = $.data(target, "numberbox");
var options = numberbox.options;
var value = _getValue(target);
val = options.parser.call(target, val);
options.value = val;
numberbox.field.val(val);
$(target).val(options.formatter.call(target, val));
if (value != val) {
options.onChange.call(target, val, value);
}
};
//绑定事件
function bindEvents(jq) {
var options = $.data(jq, "numberbox").options;
$(jq).unbind(".numberbox").bind("keypress.numberbox", function (e) {
if (e.which == 45) {
if ($(this).val().indexOf("-") == -1) {
return true;
} else {
return false;
}
}
if (e.which == 46) {
if ($(this).val().indexOf(".") == -1) {
return true;
} else {
return false;
}
} else {
if ((e.which >= 48 && e.which <= 57 && e.ctrlKey == false && e.shiftKey == false) || e.which == 0 || e.which == 8) {
return true;
} else {
if (e.ctrlKey == true && (e.which == 99 || e.which == 118)) {
return true;
} else {
return false;
}
}
}
}).bind("blur.numberbox", function () {
_fixValue(jq, $(this).val());
$(this).val(options.formatter.call(jq, _getValue(jq)));
}).bind("focus.numberbox", function () {
var vv = _getValue(jq);
if ($(this).val() != vv) {
$(this).val(vv);
}
});
};
//数据验证
function validate(jq) {
if ($.fn.validatebox) {
var options = $.data(jq, "numberbox").options;
$(jq).validatebox(options);
}
};
//设置禁用
function disable(jq, disabled) {
var options = $.data(jq, "numberbox").options;
if (disabled) {
options.disabled = true;
$(jq).attr("disabled", true);
} else {
options.disabled = false;
$(jq).removeAttr("disabled");
}
};
//实例化组件
$.fn.numberbox = function (target, parm) {
if (typeof target == "string") {
var method = $.fn.numberbox.methods[target];
if (method) {
return method(this, parm);
} else {
return this.validatebox(target, parm);
}
}
target = target || {};
return this.each(function () {
var numberbox = $.data(this, "numberbox");
if (numberbox) {
$.extend(numberbox.options, target);
} else {
numberbox = $.data(this, "numberbox", {
options: $.extend({}, $.fn.numberbox.defaults,
$.fn.numberbox.parseOptions(this),
target),
field: hiddenField(this)
});
$(this).removeAttr("disabled");
$(this).css({ imeMode: "disabled" });
}
disable(this, numberbox.options.disabled);
bindEvents(this);
validate(this);
initValue(this);
});
};
//默认方法
$.fn.numberbox.methods = {
//返回数值输入框属性
options: function (jq) {
return $.data(jq[0], "numberbox").options;
},
//销毁数值输入框对象
destroy: function (jq) {
return jq.each(function () {
$.data(this, "numberbox").field.remove();
$(this).validatebox("destroy");
$(this).remove();
});
},
//禁用字段
disable: function (jq) {
return jq.each(function () {
disable(this, true);
});
},
//启用字段
enable: function (jq) {
return jq.each(function () {
disable(this, false);
});
},
//将输入框中的值修正为有效的值
fix: function (jq) {
return jq.each(function () {
_fixValue(this, $(this).val());
});
},
//设置数值输入框的值
setValue: function (jq, value) {
return jq.each(function () {
_fixValue(this, value);
});
},
//获取数值输入框的值
getValue: function (jq) {
return _getValue(jq[0]);
},
//清楚数值输入框的值
clear: function (jq) {
return jq.each(function () {
var numberbox = $.data(this, "numberbox");
numberbox.field.val("");
$(this).val("");
});
},
//重置数值输入框的值
reset: function (jq) {
return jq.each(function () {
var options = $(this).numberbox("options");
$(this).numberbox("setValue", options.originalValue);
});
}
};
//解析器配置
$.fn.numberbox.parseOptions = function (target) {
var t = $(target);
return $.extend({}, $.fn.validatebox.parseOptions(target),
$.parser.parseOptions(target, ["decimalSeparator", "groupSeparator", "suffix",
{ min: "number", max: "number", precision: "number" }]),
{
prefix: (t.attr("prefix") ? t.attr("prefix") : undefined),
disabled: (t.attr("disabled") ? true : undefined),
value: (t.val() || undefined)
});
};
//默认属性和事件
$.fn.numberbox.defaults = $.extend({}, $.fn.validatebox.defaults, {
disabled: false,//是否禁用该字段
value: "",//默认值
min: null,//允许的最小值
max: null,//允许的最大值
precision: 0,//在十进制分隔符之后显示的最大精度。(即小数点后的显示精度)
decimalSeparator: ".",//使用哪一种十进制字符分隔数字的整数和小数部分
//使用哪一种字符分割整数组,以显示成千上万的数据。(比如:99,999,999.00中的','就是该分隔符设置。)
groupSeparator: "",
prefix: "",//前缀字符。(比如:金额的$或者¥)
suffix: "",//后缀字符。(比如:后置的欧元符号€)
//用于格式化数值的函数。返回字符串值以显示到输入框中
formatter: function (param) {
if (!param) {
return param;
}
param = param + "";
var opts = $(this).numberbox("options");
var intNum = param, decNum = "";
var pointIndex = param.indexOf(".");
if (pointIndex >= 0) {
intNum = param.substring(0, pointIndex);
decNum = param.substring(pointIndex + 1, param.length);
}
if (opts.groupSeparator) {
var p = /(\d+)(\d{3})/;
while (p.test(intNum)) {
intNum = intNum.replace(p, "$1" + opts.groupSeparator + "$2");
}
}
if (decNum) {
return opts.prefix + intNum + opts.decimalSeparator + decNum + opts.suffix;
} else {
return opts.prefix + intNum + opts.suffix;
}
},
//用于解析字符串的函数。返回数值
parser: function (s) {
s = s + "";
var opts = $(this).numberbox("options");
if (opts.groupSeparator) {
s = s.replace(new RegExp("\\" + opts.groupSeparator, "g"), "");
}
if (opts.decimalSeparator) {
s = s.replace(new RegExp("\\" + opts.decimalSeparator, "g"), ".");
}
if (opts.prefix) {
s = s.replace(new RegExp("\\" + $.trim(opts.prefix), "g"), "");
}
if (opts.suffix) {
s = s.replace(new RegExp("\\" + $.trim(opts.suffix), "g"), "");
}
s = s.replace(/\s/g, "");
var val = parseFloat(s).toFixed(opts.precision);
if (isNaN(val)) {
val = "";
} else {
if (typeof (opts.min) == "number" && val < opts.min) {
val = opts.min.toFixed(opts.precision);
} else {
if (typeof (opts.max) == "number" && val > opts.max) {
val = opts.max.toFixed(opts.precision);
}
}
}
return val;
},
onChange: function (newValue, oldValue) {
}
});
})(jQuery);
示例代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Basic NumberBox - 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.validatebox.js"></script>
<script src="../../plugins2/jquery.numberbox.js"></script>
</head>
<body>
<h2>Basic NumberBox</h2>
<div class="demo-info">
<div class="demo-tip icon-tip"></div>
<div>The Box can only input number.</div>
</div>
<div style="margin:10px 0;"></div>
<input class="easyui-numberbox" required data-options="
onChange: function(value){
$('#vv').text(value);
}">
<div style="margin:10px 0;">
Value: <span id="vv"></span>
</div>
</body>
</html>
插件效果
easyui源码翻译1.32--NumberBox(数值输入框)的更多相关文章
- easyui源码翻译1.32+API翻译全篇导航 (提供下载源码)
前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...
- easyui源码翻译1.32--DateBox(日期输入框)
前言 扩展自$.fn.combo.defaults.使用$.fn.datebox.defaults重写默认值对象.下载该插件翻译源码 日期输入框结合了一个可编辑的文本框控件和允许用户选择日期的下拉日历 ...
- easyui源码翻译1.32--datagrid(数据表格)
前言 此前网上有easyui1.25的源码 应该算是比较老的版本 之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34 1.33开始支持css3 算是又一个转折 但是 ...
- easyui源码翻译1.32--NumberSpinner(数字微调)
前言 扩展自$.fn.spinner.defaults和$.fn.numberbox.defaults.使用$.fn.numberspinner.defaults重写默认值对象.下载该插件翻译源码 数 ...
- easyui源码翻译1.32--EasyLoader(简单加载)
前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...
- easyui源码翻译1.32--Form(表单)
前言 使用$.fn.form.defaults重写默认值对象下载该插件翻译源码 form提供了各种方法来操作执行表单字段,比如:ajax提交, load, clear等等.当提交表单的时候可以调用va ...
- easyui源码翻译1.32--Slider(滑动条)
前言 使用$.fn.slider.defaults重写默认值对象.下载该插件翻译源码 滑动条允许用户从一个有限的范围内选择一个数值.当滑块控件沿着轨道移动的时候,将会显示一个提示来表示当前值.用户可以 ...
- 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 ...
随机推荐
- 【转载】java数据库操作
数据库访问几乎每一个稍微成型的程序都要用到的知识,怎么高效的访问数据库也是我们学习的一个重点,今天的任务就是总结java访问数据库的方法和有关API,java访问数据库主要用的方法是JDBC,它是ja ...
- ubuntu系统下wireshark普通用户抓包设置
dumpcap需要root权限才能使用的,以普通用户打开Wireshark,Wireshark当然没有权限使用dumpcap进行截取封包. 虽然可以使用 sudo wireshark ...
- ###《Video Event Detection by Inferring Temporal Instance Lables》
论文作者:Kuan-Ting Lai, Felix X. Yu, Ming-Syan Chen and Shih-Fu Chang. #@author: gr #@date: 2014-01-25 # ...
- 字符串 前篇 ---- sizeof()操作符和strlen()库函数
本文不是研究sizeof(), strlen() 的深奥定义和原理,我们不会在理论上太过钻牛角尖.希望读这篇文章的你,也不要太过抠概念(不要拘泥于语法).我们只做 实用意义 的介绍和讨论. 在介绍字符 ...
- OC中 block 的用法
block 常用于反向传值 声明 返回值类型 (^block)(参数列表) 调用 闭包的名字=^(参数列表){}: 闭包的名字(): 如: void(^aaaaa)(int num,NSString ...
- Easyui tabs的herf和content属性
在backstage.jsp页面中我写了一个方法,用于在指定位置添加面板(id为msg的地方)function addTab(t,h){ if($('#msg').tabs('exists',t)){ ...
- ubuntu16.04无法连接无线的问题解决方式以及QQ的安装
0x01 首先我是安装了win10与ubuntu16.04的双系统,不过遇到的问题有启动项与无线连接的问题,今天说一下联网的问题. 连接宽带是正常的,只需要操作sudo pppoeconf 这条命令即 ...
- RTTI(Runtime Type Information )
RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法.本文将简略介绍 RTTI 的一些背景知识.描述 RTTI 的概念,并通 ...
- strcpy函数导致release版程序崩溃
最近在写一个读取模型文件的小程序.很随意的使用了strcpy函数进行char字符数组的拷贝,这个数组是需要传递给PostMessage作为WPARAM的参数.代码部分如下: char pStrCurr ...
- iOSCoreData介绍
1.CoreData简介 Coredata用作数据持久化,使和大数据量的存储和查询 虽然是用户做数据的保存,但是并不是数据库,CoreData可以使用数据库.XML来存储数据 SQLite通过SQL语 ...