этот скрипт ломается в Internet Explorer - PullRequest
0 голосов
/ 14 ноября 2010

Мы написали этот скрипт.По сути, он ограничивает ввод в поле формы только цифрами.

Однако мы получаем то есть.ошибка 'value' равна нулю или не является объектом.Любые предложения относительно исправления, пожалуйста.

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"

Не уверен, что то есть не нравится.

Ответы [ 3 ]

2 голосов
/ 14 ноября 2010

Вы отправляете «this.form.limitedtextfield» в функцию limitText, а затем пытаетесь получить доступ к свойству «value», на основании моего тестирования вы получите ошибку, которую вы описали, если в поле ввода нет идентификатора «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);
    }
}
0 голосов
/ 14 ноября 2010

Хорошо, мы исправили это:

Спасибо, ребята.

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"/
0 голосов
/ 14 ноября 2010

Вы установили значение переменной decimal?Я вижу, где на него ссылаются, но не там, где он установлен.

Добавлено: Неважно, это параметр функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...