我有一个直接的经典ASP页面,用户可以输入任何标准键盘键和Enter键(如果他们愿意,甚至可以输入特殊的ALT nnn值)
我的澄清是我需要在每个ONKEYUP上向用户显示准确的字符数。所以我需要知道是否按下了ENTER键(/ n),需要将其计为2个字符以及8个其他字符,如Tilde,Caret Left花括号等,也算作2个字符。最后,我需要验证每个ONKEYUP字符以确保它们是有效的SMS字符,如果不是它们需要在TextArea中替换为和Underscore(帐户仅为1个字符)
所以我需要做的是能够验证ONKEYUP上的每个字符,记住可以在TextArea中的任何位置插入char,可以从TextArea中删除现有的char,或者部分或整个文本可以删除随时粘贴
当前的HTML代码如下:
Enter your message - Characters left
<input type="text" name="chl" value="<%=Cclen%>" size=3 diabled readonly>
<br />
<textarea id="SMSmsg" name="SMSmessage" MAXLENGTH="600" rows=5 cols=35 onKeyUp="textCounter
(this)"></textarea>
<input type="text" name="chl" value="<%=Cclen%>" size=3 diabled readonly>
<br />
<textarea id="SMSmsg" name="SMSmessage" MAXLENGTH="600" rows=5 cols=35 onKeyUp="textCounter
(this)"></textarea>
JavaScript函数testcounter如下:
function textCounter() {
var extra = 0;
var nextra = 0;
var msgLength = 160 - (document.gs.SMSmessage.value).length - (document.gs.SMSbot.value).length;
var index = document.gs.SMSmessage.value.indexOf('\n');
while (index != -1) {
extra += 1;
index = document.gs.SMSmessage.value.indexOf('\n', index + 1);
}
Canam = nameCounter()
if (document.gs.SMSrequest.value == 'eml') {
extra = 0
nextra = 0
chnl = 999
} else {
if (document.gs.chnl.value > 0) {
nextra = 3
}
}
document.gs.chl.value = msgLength + extra - nextra;
Camsg = textWarning();
}
function nameCounter() {
var botLength = (document.gs.SMSbot.value).length;
document.gs.chnl.value = botLength;
}
function textWarning() {
var Ccwarn = " ";
if (document.gs.chl.value < -299) {
Ccwarn = "** Error ** - Extended text too long"
} else {
if (document.gs.chl.value < 0) {
if (document.gs.chex.value == 'N') {
Ccwarn = "** Error ** - Standard text too long"
} else {
Ccwarn = "** Warning ** - Extended text - Additional charge applied"
}
}
}
document.gs.chw.value = Ccwarn;
}
关于如何重新编写JS函数的任何建议都非常感谢,考虑到我对TextArea中用户操作的评论