Почему IE не поддерживает мой скрипт блокирования специальных символов в моих полях ввода? - PullRequest
0 голосов
/ 22 ноября 2010

Мой скрипт такой:

var emailmask = /^[a-z0-9.]/g;

function restrictCharacters(myfield, e, restrictionType) {
if (!e) var e = window.event
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
if (code==27) { this.blur(); return false; }
if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) {
    if (character.match(restrictionType)) {
        return true;
    } else {
        return false;
    }

}
}

Ввод:

<input type="text" name="fx_username" value="asd" id="username" class="normal email need" onkeypress="return restrictCharacters(this, event, emailmask);"/>

Он просто не работает с IE, но FF, chrome - это нормально.Не могли бы вы помочь мне в этом случае, пожалуйста?

Редактировать: не работает означает, он не удаляет специальные символы, такие как @ {} ¤ $ ß.

Ответы [ 2 ]

1 голос
/ 22 ноября 2010

Ваша функция не всегда имеет возвращаемое значение.
Если это условие:

if (!e.ctrlKey && code!=9 && code!=8 && code!=36 && code!=37 && code!=38 && (code!=39 || (code==39 && character=="'")) && code!=40) 

не совпадает, ничего не вернется. Похоже, поведение отличается в браузерах. В MSIE я думаю, что это как-то не оценивается как ложное.

Решение: добавьте это в конце функции:

return false;
1 голос
/ 22 ноября 2010

Эта функция неверна в нескольких отношениях.

  1. Вы не должны использовать var в параметре "e" в первой строке. Обычный способ написать это

    e = e || window.event;

    Однако, в этом случае он все равно не будет работать должным образом, потому что код в значении вашего атрибута "onkeypress" предполагает , что он может использовать window.event. Это неверно и не будет работать в Firefox.

  2. Вы не определили «код» как локальную переменную с var.

  3. Код предполагает, что элементу будет присвоено this, тогда как фактически первый параметр («myfield») является единственным, относящимся к элементу.

  4. Если этот длинный, длинный "if" тест не пройден, функция возвращает undefined.

  5. Неверное регулярное выражение. Он соответствует любому символу в начале строки, потому что у вас есть «.» в скобках. Кроме того, модификатор "g" не нужен. (исправлено) (хотя я бы предложил вместо этого использовать "regexp.test (string)", потому что это, вероятно, немного быстрее)

Трудно сказать, что вы хотите, чтобы код делал здесь, но пока все эти ошибки не будут исправлены, нет четкого способа сказать, как его улучшить.

...