Фон: наше веб-приложение использует плагин jquery.constrain.js для обработки ввода данных в некоторых текстовых полях, позволяя добавлять только допустимые символы. Этот плагин допускает различные ограничения на данные, используя регулярные выражения, символы «белый список/черный список» и т. Д. До сегодняшнего дня мы запускали версию 1.0 этого модуля без изменений.JQuery Плагин «Constrain» - Weird Javascript Error
Я заметил несколько дней назад, что некоторые текстовые поля по-прежнему допускают недопустимый ввод данных. Например, текстовое поле с числовым значением допускало альфа-символы и т. Д. Оно также отображало ошибку javascript «Объект не поддерживает это свойство или метод». Я отследил его до следующей функции в плагине jquery.constrain.
function match(item, input, e) {
var arr = item.chars.split("");
for (var i in arr) {
var token = arr[i];
if (token.charCodeAt(0) == e.which) {
return true;
}
}
if (item.regex) {
var re = new RegExp(item.regex);
if (re.test(String.fromCharCode(e.which))) {
return true;
}
}
return false;
};
отладки через этот блок кода, я определил следующее:
- элемент представляет собой объект с двумя свойствами: строковых символов и регулярное выражение
- item.chars - пустая строка ("") во время сбоя.
- arr, результат item.chars.split (""), как и ожидалось, пустой массив.
Вот где это странно. Хотя arr - пустой массив, цикл for присваивает действительное значение i. Значение «remove». Итак, мы заглядываем в петлю. token, очевидно, null, потому что arr ["remove"] имеет значение null. Итак, token.charCodeAt (0) throws.
я исправил ошибку, добавив, если заявление вокруг для цикла следующим образом:
if (arr.length > 0) {
for (var i in arr) {
var token = arr[i];
if (token.charCodeAt(0) == e.which) {
return true;
}
}
}
Однако я совершенно сбит с толку, почему это было даже необходимо - разве это ошибка IE , ошибка в плагине, или я просто задерживаю дыхание, когда компилирую приложение?
Да, это был он. JQuery изменяет Array.prototype, а затем мы добавили к нему еще несколько. Я дам автору плагина знать и исправить нашу локальную версию. – GalacticCowboy