#jquery #internet-explorer-8
#jquery #internet-explorer-8
Вопрос:
Я получаю ошибку jquery в отладчике IE8, но я не уверен, какая функция является ее причиной. Я видел здесь целую кучу сообщений, в которых говорится, что IE8 не поддерживает встроенную trim () , но я не (я не думаю) использую встроенную версию (я унаследовал этот код; это не то, что я написал с нуля.)
Вот фрагмент, который вызывает проблемы — это часть функции click:
greenlight = false;
link = $(this);
href = $(this).attr("href");
row = $(this).parent().parent();
if ($(":text", row).exists()) {
new_email = jQuery.trim($(":text", row).val());
//do stuff here
}
Ошибка, которую я получаю в отладчике, находится в строке, начинающейся с new_email; ошибка «Объект не поддерживает это свойство или метод».
Кто-нибудь может помочь мне выяснить 1) какое свойство или метод IE8 не поддерживает, и 2) что я могу сделать, чтобы это исправить? Я никоим образом не эксперт по jquery; Я на 99% на стороне сервера.
Код действительно работает в Chrome, Safari и Firefox.
Комментарии:
1. Нам было бы намного проще помочь вам, если бы вы могли воспроизвести проблему на общедоступной странице или на jsfiddle.net . Кроме того, номера строк в ошибках IE JavaScript часто вводят в заблуждение, попробуйте запустить свой код с помощью отладчика IE Developer Tools и установите точку останова.
2. Я запустил код с помощью инструментов разработчика и установил несколько точек останова — одну в строке непосредственно перед той, на которую ссылается ошибка, и одну в строке после нее. Он прошел мимо первого и взорвался перед вторым. И я понимаю необходимость кода в целом, но это часть огромного сайта на Drupal, где повсюду разбросаны фрагменты кода. Нет простого способа извлечь что-либо, что могло бы повлиять на ситуацию.
Ответ №1:
Обновление: Из-за новой информации, я думаю, вы столкнулись с проблемой с IE, где у вас будет конфликт, когда у вас есть переменная и элемент, идентифицированный с тем же именем, это вызовет конфликты и запутанные сообщения об ошибках о том, что функциональность не завершается. Смотрите эту ссылку для более подробного объяснения. http://www.karlstanley.net/blog/?p=5
Оригинальный ответ: Если у вас возникли проблемы с отладкой одной сложной строки, разделите ее на части,
var tempValue = $(":text", row).val();
new_email = jQuery.trim(tempValue);
Комментарии:
1. Хорошо, я попробовал это и использовал консоль. войдите в систему, чтобы распечатать значение tempValue. Он отображает то, что ожидалось. Тем не менее, я все еще получаю ошибку в следующей строке. И самое смешное, что в нем говорится, что ошибка связана с символом 4, который является подчеркиванием. Действительно ли IE может взорваться при подчеркивании в имени переменной?
2. По-видимому, это так; я просто изменил имя переменной с new_email на newEmail , и оно работает правильно. Я немного напуган, поскольку в этом приложении есть десятки функций, которые содержат переменные с подчеркиванием в именах.
3. Может быть, вы столкнулись с конфликтом именования между элементами dom и переменными javascript в IE? karlstanley.net/blog/?p=5
4. @Robert — ДА!!! Вот и все! Большое вам спасибо — я знал, что я не сумасшедший. Как я уже сказал, я унаследовал этот код, и есть фрагменты, с которыми я не так хорошо знаком, и действительно есть поле, скрытое далеко внизу огромной формы, с именем new_email .
5. @Роберт, если ты хочешь опубликовать этот комментарий в качестве ответа, я могу принять его, чтобы ты получил оценку…
Ответ №2:
Изменить:
$(":text", row).exists()
Для:
$(":text", row).length > 0
Насколько я знаю, в библиотеке jQuery нет exists()
функции (пробовал искать ссылку на API).
Комментарии:
1. Я попробую, но почему это должно работать в других браузерах, если это так?
2. Хм, ход моих мыслей заключался в том, что в прототипе объекта или массива была определена
exists
функция, а IE ее не реализовал, что совершенно неверно и не соответствует действительности. Остальная часть кода выглядит нормально, это была единственная сомнительная часть, я не могу объяснить, почему это работает в FF, потому чтоtypeof $(':text').exists
возвращает ‘undefined’3. Нет, я попробовал ваше изменение и все еще получаю ту же ошибку в той же строке. Так что проблема не в exists() (или не только в этом).)
4.
exists()
это определенно не метод в jQuery. Даже если это не устранило проблему, сохраните изменения!