此脚本在Internet Explorer中中断

时间:2010-11-13 23:19:04

标签: javascript internet-explorer

我们写了这个脚本。从本质上讲,它将输入限制为表单字段,仅限于数字。

然而我们得到一个ie。 'value'的错误为null或不是对象。有任何关于修复的建议请。

function numbersonly(e, decimal) {
var key;
var keychar;

if (window.event) {
   key = window.event.keyCode;
}
else if (e) {
   key = e.which;
}
else {
   return true;
}
keychar = String.fromCharCode(key);

if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) {
   return true;
}
else if ((("0123456789").indexOf(keychar) > -1)) {
   return true;
}
else if (decimal && (keychar == ".")) { 
  return true;
}
else
   return false;
}
function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } else {
        limitCount.value = limitNum - limitField.value.length;
    }
}

表单元素是:

input id="landprice" name="landprice" size="50" type="text" class="medium" onKeyPress="return numbersonly(event, false)" onKeyDown="limitText(this.form.limitedtextfield,this.form.countdown,8);" 
onKeyUp="limitText(this.form.limitedtextfield,this.form.countdown,8);" maxlength="8"

不确定ie不喜欢什么。

3 个答案:

答案 0 :(得分:2)

您正在向limitText函数发送“this.form.limitedtextfield”,然后尝试访问属性“value”,根据我的测试,如果没有输入字段为id“limitedtextfield”,您将收到错误消息页。

根据评论编辑: 试试这样:

<input id="countdown"/>
<input id="landprice" name="landprice" size="50" type="text" class="medium" onKeyPress="return numbersonly(event, false)" onKeyDown="limitText(this,this.form.countdown,8);" 
onKeyUp="limitText(this,this.form.countdown,8);" maxlength="8"/>

编辑2: 如果您不需要计数器,请更改limitText函数,如下所示:

function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    }
}

答案 1 :(得分:0)

您是否设置了变量decimal的值?我看到它被引用的位置,但不是它被设置的位置。

补充:没关系,它是函数的一个参数。

答案 2 :(得分:0)

好的我们修好了:

谢谢你们。

function numbersonly(e, decimal) {
var key;
var keychar;

if (window.event) {
   key = window.event.keyCode;
}
else if (e) {
   key = e.which;
}
else {
   return true;
}
keychar = String.fromCharCode(key);

if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) {
   return true;
}
else if ((("0123456789").indexOf(keychar) > -1)) {
   return true;
}
else if (decimal && (keychar == ".")) { 
  return true;
}
else
   return false;
}
function limitText(limitField, limitCount, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    }
}

表单字段更改为:

input id="landprice" name="limitedtextfield" size="50" type="text" class="medium" onKeyPress="return numbersonly(event, false)" onKeyDown="limitText(this.form.limitedtextfield,this.form,8);" 
onKeyUp="limitText(this.form.limitedtextfield,this.form,8);" maxlength="8"/