100分求教:焦点和光标等问题

cnlyl 2003-06-05 09:39:15
这是我写的一个脚本的缩减版(实际上表单中的text很多,主要输入数字,用onblur检查数字的有效性,如数字正确,数字居右)。我的问题有3个:
1、输入到某个text,结果出现非法数字串,alert()出来报错,按确定按钮,回到出错text框,等待修改,这时,如果我想按"清空重输"按钮,alert()又出来报错,既然我想清空,就没必要去纠正以前输入的错误!(使用什么事件能解决这个问题?注:我用过onchange事件,出错后,如不修改,能从出错text走掉而漏网,为防止漏网,我在CheckNumber函数中,将输入不合法的text对象保存,再为每个text增加onfocus事件,检查是否存在错误的text,如果存在就将焦点给错误哪个text,可错误text焦点又重入onfocus事件程序,控制起来太麻烦!!!)
2、由于我是加前导空格使之居右,如果想修改,须要用onkey事件和粘贴事件控制,如原来为" 1234567",我要在5后面出入数字,每输入一个数字,就要将前面的空格去一个(当然要考虑Insert键状态和插入位置等等);如果粘贴,就要用onbeforepaste事件检查clipboard上数据的长度。光标控制我看到大家都用Range对象和selection.createRange,createTextRange、moveStart、collapse等方法;粘贴要用到clipboardData对象,那位大侠能将这些对象的属性和方法比较详细地介绍一下?
3、其实有c语言的底子,学javascript一点不难,我感到困难的是不知道javascript有那些对象和方法(M$的哪个JavaScript.chm中对象和方法缺少的太多!!!)!那位大侠
有全面一点的javascript对象和方法的资料,公布一下连接地址或给我发邮件(cnlyl@sina.com)。谢谢大家!!!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Test</title>
<script language="JavaScript" type="text/JavaScript">

/********************
/ 判断输入数值串的合法性,如果正确在 Field.value 加前导空格使之居右
*********************/
function CheckNumber ( Field ) {
Field.value = AllTrim ( Field.value );
lNumberOk = /^(|-?(0|([1-9]\d*)|((0|([1-9]\d*))?\.\d{1,})){1,1})$/.test ( Field.value );
if ( ! lNumberOk ) {
alert ( "错误:输入非法数字串!" );
Field.focus(); }
else if ( Field.value != "" )
Field.value = Space ( Field.size - Field.value.length ) + Field.value;

return ( lNumberOk );
}

/********************
/ 压缩字符串首尾空格
*********************/
function AllTrim ( cString ) {
return ( cString.match( /^\s*(.*?)\s*$/ )[1] );
}

/********************
/ Space 函数:返回长度为nSPace空字符串
*********************/
function Space ( nSpace ) {
for ( var cSpace = "", i = 0; i < nSpace; cSpace += " ", i ++ );
return ( cSpace );
}

</script>

</head>

<body>
<form name="form1" method="post" action="">
<input type="text" name="field1" size="12" onblur="CheckNumber(this)" tabindex="1">
<input type="text" name="Field2" size="12" onblur="CheckNumber(this)" tabindex="2">
<input type="text" name="Field3" size="12" onblur="CheckNumber(this)" tabindex="3">
<input type="text" name="Field4" size="12" onblur="CheckNumber(this)" tabindex="4">
<p>
<input type="button" value="检查数据" name="B1" onclick="ValidateForm(theForm)" tabindex="33">
<input type="reset" value="清空重输" name="B2" onclick="ResetData()" tabindex="35">
<input type="button" value="提交数据" name="B3" onclick="CheckSubmit()" tabindex="36">

</form>
</body>
</html>


...全文
74 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlyl 2003-06-08
  • 打赏
  • 举报
回复
silentlamb(silent)的方法成功地解决了第一个问题(我自己也看到过activeElement,但我以为是激活对象,没有用。M$的参考连个象activeElement都找不到!!)。谢谢!!!(其他方法都不行)。
javascript对象和方法的资料还是难找!去msdn看,只是简单的说明,M$好象就怕别人会用它的东西似的!!!
我要揭贴了,谢谢大家!!!
silentlamb 2003-06-06
  • 打赏
  • 举报
回复
onblur的srcElement还是那个文本框,sandyuk(冰の沙隆) 的方法不行吧?
silentlamb 2003-06-06
  • 打赏
  • 举报
回复
如果CheckNumber()只在onblur中调用,加上一个判断应该就可以了:
function CheckNumber ( Field ) {
var currObj=window.document.activeElement;
if(!(currObj && currObj.type && currObj.form && currObj.form==Field.form && currObj.type == "reset")){
Field.value = AllTrim ( Field.value );
lNumberOk = /^(|-?(0|([1-9]\d*)|((0|([1-9]\d*))?\.\d{1,})){1,1})$/.test ( Field.value );
if ( ! lNumberOk ) {
alert ( "´íÎó£ºÊäÈë·Ç·¨Êý×Ö´®£¡" );
Field.focus(); }
else if ( Field.value != "" )
Field.value = Space ( Field.size - Field.value.length ) + Field.value;

return ( lNumberOk );
}
}
孟子E章 2003-06-06
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/3/304/2002/8/15/942792.htm

各类参考手册
sandyuk 2003-06-06
  • 打赏
  • 举报
回复

在onblur后用event.srcElement判断鼠标是否点按钮,否则alert();
var Id = event.srcElement.id;
alert(Id);
cnlyl 2003-06-06
  • 打赏
  • 举报
回复
fason(阿信) :我的问题是解决按reset button 而<input onblur="alert()">中的onblur事件在前,非让你改错才能reset,既然我想清空,就没必要去纠正以前输入的错误。谢谢!
fason 2003-06-05
  • 打赏
  • 举报
回复
try:
<form>
<input onblur="alert()"><input type=button value=reset onmousedown="reset()">
</form>


MSDN

87,987

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧