/*
* 此脚本专门处理按键光标移动处理
* 结合jQuery的jquery.hotkeys.min.js一起使用
* 解决在文本有内容的情况下光标可以在文字上移动,到达文本末尾是往后跳格,到达文本首位是往前跳格
* $(".clsinput12").not(".css_readonly,:hidden")获取的是可输入的一些文本框的元素数组,包括 input,select,textarea
*
*/
//IE中屏蔽后退建(Back Space)
document.onkeydown = function() //用户的按键事件
{
if(event.keyCode == 8) //如果按下的是退格键
{
if(event.srcElement.tagName.toLowerCase() != "input"
&& event.srcElement.tagName.toLowerCase() != "textarea") //如果是在textarea内
event.returnValue = false; //不执行任何操作
}
}
//屏蔽掉IE自带的功能键
document.onkeydown=noway; //绑定窗体加载事件
function noway(){
if(event.keyCode==116){ //通过键值判断是否是F5
event.keyCode=0;
event.returnValue=false; //不进行任何操作
}
}
//js获得光标所在的文本框(text/textarea)中的位置
function getPosition(obj){
var result = 0;
if(obj.selectionStart){ //IE以外
result = obj.selectionStart
}else{ //IE
var rng;
if(obj.tagName == "textarea"){ //TEXTAREA
rng = event.srcElement.createTextRange();
rng.moveToPoint(event.x,event.y);
}else{ //Text
rng = document.selection.createRange();
}
rng.moveStart("character",-event.srcElement.value.length);
result = rng.text.length;
}
return result;
}
//计算字符串长度
String.prototype.codeLength=function(){
var len=0;
if(this==null||this.length==0)
return 0;
var str=this.replace(/(^\s*)|(\s*$)/g,"");//去掉空格
for(i=0;i<str.length;i++)
len++;
return len;
}
//热键处理
//屏蔽Backspace键
$(document).bind('keydown', 'backspace',function (evt){
if(evt.srcElement.tagName.toLowerCase()=="body"){
return false;
}
});
//向右箭头按键
$(document).bind('keydown', 'right',function (evt){
var currentElement=evt.target;//当前元素
var curId=currentElement.id;//获取元素id
var index=$(".clsinput12").not(".css_readonly,:hidden").index($("#"+curId)[0])+1;//获取后一个元素的index,此写法可参照jquery文档的index(object)
var elmlen=$(".clsinput12").not(".css_readonly,:hidden").length;//去掉只读和隐藏的元素,获取页面上的元素个数
if(index<elmlen){
if(evt.srcElement.tagName.toLowerCase()=="input"){
var len=evt.target.value.codeLength();
var pos=getPosition(evt.target);
if(pos==len){
$(".clsinput12").not(".css_readonly,:hidden")[index].focus();
}
}else {
$(".clsinput12").not(".css_readonly,:hidden")[index].focus();
}
}
});
//向左箭头按键
$(document).bind('keydown', 'left',function (evt){
var currentElement=evt.target;
var curId=currentElement.id;
var index=$(".clsinput12").not(".css_readonly,:hidden").index($("#"+curId)[0])-1;//获取前一个元素的index
if(index>-1){
if(evt.srcElement.tagName.toLowerCase()=="input"){
var pos=getPosition(evt.target);
if(pos==0){
//debugger;
$(".clsinput12").not(".css_readonly,:hidden")[index].focus();
}
}else { //if(evt.srcElement.tagName.toLowerCase()=="select") readonly="readonly"
$(".clsinput12").not(".css_readonly,:hidden")[index].focus();
}
}
});