以前没注意过输入法的全角和半角,今天有个需求是文本框中不能全角输入。据此需求,用js实现了这个功能!以下是一个Demo的整个aspx页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="限定半角输入.aspx.cs" Inherits="Test.OtherTest.限定半角输入" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function CheckInput(obj) {
var inputStr = obj.value;
if (inputStr.match(/[\uff00-\uffff]/g)) {
alert("不能全角输入,请切换到半角输入!");
//获取光标位置
var range = document.selection.createRange();
range.moveStart("character", -obj.value.length);
cursorPosition = range.text.length;
if (inputStr.length > cursorPosition) { //全角输入在字符串中
obj.value = inputStr.substring(0, cursorPosition - 1) + inputStr.substring(cursorPosition, inputStr.length);
SetCursorPosition(obj, cursorPosition - 1); //将光标定位到刚才全角输入的位置
}
else {
obj.value = inputStr.substring(0, cursorPosition - 1); //全角输入在字符串末尾
}
}
}
function SetCursorPosition(textbox, pos) { //设置光标位置
try {
var r = textbox.createTextRange();
r.moveStart('character', pos);
r.collapse(true);
r.select();
}
catch (e) {
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txt" runat="server" οnkeyup="CheckInput(this);" οnkeydοwn="CheckInput(this);"></asp:TextBox>
</div>
</form>
</body>
</html>
js实现的功能是:当全角输入时,首先获取光标的位置,如果光标在输入的字符串中并且继续输入时,则将光标前一个字符删除(即:全角输入的一个字符),并提示不能全角输入;如果光标在已经输入的字符串尾部,则直接将光标前一个字符删除,并提示不能全角输入!
总结:写的不对的地方,望各位大神不吝指教!