easyui源码翻译1.32--NumberBox(数值输入框)

时间:2022-11-05 22:10:34

前言

扩展自$.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--NumberBox(数值输入框)的更多相关文章

  1. easyui源码翻译1&period;32&plus;API翻译全篇导航 &lpar;提供下载源码&rpar;

    前言 EasyUI每个组件都会有 属性.方法.事件 属性 所有的属性都定义在jQuery.fn.{plugin}.defaults里面.例如,对话框属性定义在jQuery.fn.dialog.defa ...

  2. easyui源码翻译1&period;32--DateBox(日期输入框)

    前言 扩展自$.fn.combo.defaults.使用$.fn.datebox.defaults重写默认值对象.下载该插件翻译源码 日期输入框结合了一个可编辑的文本框控件和允许用户选择日期的下拉日历 ...

  3. easyui源码翻译1&period;32--datagrid&lpar;数据表格&rpar;

    前言 此前网上有easyui1.25的源码  应该算是比较老的版本  之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34  1.33开始支持css3 算是又一个转折  但是 ...

  4. easyui源码翻译1&period;32--NumberSpinner(数字微调)

    前言 扩展自$.fn.spinner.defaults和$.fn.numberbox.defaults.使用$.fn.numberspinner.defaults重写默认值对象.下载该插件翻译源码 数 ...

  5. easyui源码翻译1&period;32--EasyLoader(简单加载)

    前言 扩展自$.fn.datebox.defaults,使用$.fn.datetimebox.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3. ...

  6. easyui源码翻译1&period;32--Form(表单)

    前言 使用$.fn.form.defaults重写默认值对象下载该插件翻译源码 form提供了各种方法来操作执行表单字段,比如:ajax提交, load, clear等等.当提交表单的时候可以调用va ...

  7. easyui源码翻译1&period;32--Slider(滑动条)

    前言 使用$.fn.slider.defaults重写默认值对象.下载该插件翻译源码 滑动条允许用户从一个有限的范围内选择一个数值.当滑块控件沿着轨道移动的时候,将会显示一个提示来表示当前值.用户可以 ...

  8. easyui源码翻译1&period;32--Draggable(拖动)

    前言 使用$.fn.draggable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:qq 1364386878 --拖动 ...

  9. easyui源码翻译1&period;32--Droppable(放置)

    前言 使用$.fn.droppable.defaults重写默认值对象.下载该插件翻译源码 源码 /** * jQuery EasyUI 1.3.2 * *翻译:lbq --放置 拉伸 */ (fun ...

随机推荐

  1. 基于GPU的高分一号影像正射校正的设计与实现

    一 RPC正射校正的原理 影像正射校正的方法有很多,主要包含两大类:一类是严格的几何纠正模型,另一类是近似几何纠正模型.当遥感影像的成像模型和有关参数已知时,可以根据严格的成像模型来校正图像,这种方法 ...

  2. Hibernate SQL查询 addScalar&lpar;&rpar;或addEntity&lpar;&rpar;

    本文完全引用自: http://www.cnblogs.com/chenyixue/p/5601285.html Hibernate除了支持HQL查询外,还支持原生SQL查询.          对原 ...

  3. &lbrack;HTML5&rsqb;移动开发不同手机弹出数字键盘问题

    这里还是先那么先交代一下遇到的问题.其实无论是tel还是number都不是完美的:type="tel"优点是iOS和Android的键盘表现都差不多缺点是那些字母好多余,虽然我没有 ...

  4. Linux shell命令

    一.删除监听指定端口的进程: lsof -ti: 80 | xargs kill -9 -t: 输出pid -i:查看指定端口占用情况 二.查看可执行文件动态链接库相关信息 ldd <可执行文件 ...

  5. java 从零开始,学习笔记之基础入门&lt&semi;Oracle&lowbar;基础&gt&semi;(三十三&rpar;

    Oracle 数据库基本知识   [训练1] 显示DEPT表的指定字段的查询.               输入并执行查询:               SELECTdeptno,dname FROM ...

  6. wyh的数列~(坑爹题目)

    链接:https://www.nowcoder.com/acm/contest/93/K来源:牛客网 题目描述 wyh学长特别喜欢斐波那契数列,F(0)=0,F(1)=1,F(n)=F(n-1)+F( ...

  7. 微信小程序请求API接口PHPSESSID变化的解决方式

    微信小程序开发,请求服务器API的方法使用的是微信官方提供的wx.request()方法.在开发中发现,每一个请求都会生成一个独立的PHPSESSID,如下图示: 搜索后得知,这是由于wx.reque ...

  8. Linux扩展分区记录

    Vmware中新建的Linux虚拟机,数据盘规划太小,数据量超出磁盘大小,本文介绍如何快速扩充空间 参考:https://blog.csdn.net/lyd135364/article/details ...

  9. 【算法】串的模式匹配算法(KMP)

    串的模式匹配算法     问题:         求子串位置的定位函数如何写? int index(SString S,SString T,int pos);         给定串S,子串T,问T在 ...

  10. java&period;——最大子序列和(前提是:全部都是非负数)

    直接上代码吧: 情况一:全部是非负数整数的时候,其实非负实数处理也一样. package Person; import java.util.Scanner; public class Main{   ...