/**获取组件选中的内容 */
function getSelectText(obj) {
if (window.getSelection) {
if (obj.selectionStart != undefined && obj.selectionEnd != undefined) {
return obj.value.substring(obj.selectionStart, obj.selectionEnd);
} else {
return "";
}
} else {
return document.selection.createRange().text;
}
}
/**只能输入数字
* |--> 参数:
* |--> e:event
* |--> maxLength:总长度最大值
* |--> precision: 精度
* |--> isNegativeNum: 是否可以输入负数(默认可以)
*/
function noNumbers(e, maxLength, precision, isNegativeNum) {
var keynum;
var keychar;
var numcheck;
/*FireFox、Opera、Chrome 事件对应的函数有一个隐藏的变量e,表示发生事件。 e有一个属性e.which指示哪个键被按下,给出该键的索引值(按键码)。
IE只有keyCode属性,FireFox中有which和charCode属性,Opera中有keyCode和which属性,Chrome中有keyCode、which和charCode属性。
*/
if (window.event) { //IE不需要e变量,window.event表示发生事件。
keynum = e.keyCode;
} else if (e.which) {
keynum = e.which;
}
keychar = String.fromCharCode(keynum);//静态函数String.fromCharCode()可以把索引值(按键码)转化成该键对应的的字符。
if (" " == keychar) {
return false;
}
var currentSelectValue = e.currentTarget.value;
// 判断是数字,且小数点后面只保留precision位小数
if (!isNaN(keychar)) { //isNaN() 函数用于检查其参数是否是非数字值。非数字值为true
var index = currentSelectValue.indexOf(".");
if (index >= 0 && currentSelectValue.length - index > precision) {
var selectValue = getSelectText(e.currentTarget);
if(selectValue && currentSelectValue.indexOf(selectValue) > -1){
return true;
}
var cursorPosition = getCursorPosition(e.currentTarget);
if(cursorPosition <= index){
//判断整数位长度
var integerLength = maxLength - precision;
if(index >= integerLength){
return false;
}
return true;
}
return false;
}
var selectValue = getSelectText(e.currentTarget);
//有组件选中时,一不会超出长度
if(selectValue && currentSelectValue.indexOf(selectValue) > -1){
return true;
}
var maxLength_new = maxLength;
if (currentSelectValue.indexOf(".") >= 0) {
maxLength_new++;
}
//判断没有点,总长度大于等于最大值
if(currentSelectValue.indexOf(".") < 0 && currentSelectValue.length >= maxLength_new-precision){
return false;
}
return true;
}
// 如果是负号 但不能出现多个 且只能第一位是负号
if ("-" == keychar) {
if (currentSelectValue != "") {
return false;
}
if(isNegativeNum) {
return false;
}
if (currentSelectValue.indexOf("-") >= 0) {
return false;
}
return true;
}
// 如果是小数点 但不能出现多个 且第一位不能是小数点
if ("." == keychar) {
if(precision == 0) {
return false;
}
if (currentSelectValue == "") {
return false;
}
if (currentSelectValue.indexOf(".") >= 0) {
return false;
}
//小数点插入时的处理
var cursorPosition = getCursorPosition(e.currentTarget);
if(currentSelectValue.length - cursorPosition > precision){
e.currentTarget.value = currentSelectValue.substring(0,cursorPosition)+"."+currentSelectValue.substring(cursorPosition,precision+cursorPosition);
return false;
}
return true;
}
return false;
}
/** 获取光标的位置 */
function getCursorPosition(obj){
var cursurPosition=-1;
if(obj.selectionStart){//非IE浏览器
cursurPosition= obj.selectionStart;
}else{//IE
var range = document.selection.createRange();
range.moveStart("character",-obj.value.length);
cursurPosition=range.text.length;
}
return cursurPosition;
}