Вопрос по jquery, internet-explorer – IE 9 jQuery ошибка: «Объект не поддерживает…« включен »»?

5

Мне нужна помощь. Я получаю следующую ошибку в IE9. Код работает в FireFox:

SCRIPT438: Object doesn't support property or method 'on' 

Это поднято на следующий код:

$(function() {
    $(document).on('change', '#dropdownval select', function(event) {
        //logic function
    });
});
jQuery JavaScript Library v1.6.2 user1433824
Какую версию jQuery вы используете? Sarfraz
Какую версию Jquery вы используете? Rupesh Pawar
Обновление до 1.7. Kyle Yeo
Ты пыталсяalert(typeof $(document).on); прежде чем позвонить? Это скажет вам, существует ли он или нет. Niet the Dark Absol

Ваш Ответ

2   ответа
10

Works in Firefox, not IE?

Я хотел бы убедиться, что оба браузера загружают один и тот же источник. Честно говоря, Firefox практически невозможно использовать.on при использовании jQuery 1.6, поскольку этот метод не существует.

В вашей консоли (Инструменты разработчика F12 в IE и Firebug в Firefox) введите следующее:

jQuery.fn.jquery

Это должно перезапустить текущую версию jQuery, загруженную на этой конкретной странице. Например, на сегодняшний день выполнение этой команды здесь в StackOverflow приводит к"1.7.1", Во-вторых, чтобы проверить наличие.on метод, вы можете получить к нему доступ без скобок, используя двойное отрицание, чтобы привести его к истинному логическому значению:

!!jQuery.fn.on // True if .on is present, False otherwise

With jQuery 1.6, use .delegate rather than .on

Поскольку вы используете jQuery 1.6, у вас нет доступа к.on метод, который был введен в jQuery 1.7. Соответствующим запасным вариантом будет использование.delegate вместо этого, или вы можете обновить до последней версии jQuery (Microsoft CDN, Google CDN, JQuery CDN).

Синтаксис для.delegate следует за.on довольно близко:

$("#dropdownval").delegate("select", "change", function(event){
    alert( $(this).val() );
});

Скрипки:http://jsfiddle.net/jonathansampson/rMBn4/

If you decide to upgrade...

Вы были близки с вашим.on код, но вы не хотите связывать событие так далеко, какdocument объект - это будет означать, что событие должно пройти потенциально большое расстояние перед обработкой. Вместо этого, как мы сделали с.delegate Например, мы свяжемся с чем-то ближе к элементу select:

$("#dropdownval").on("change", "select", function(event){
    alert( $(this).val() );
});

Скрипки:http://jsfiddle.net/jonathansampson/rMBn4/1/

Вы заметите, что основным отличием между ними является порядок первых двух параметров в цепочечном методе. С.delegateселектор предшествует событию. С.onзаказ отменен.

Error: User Rate Limit ExceededjQuery.fn.jquery.
Error: User Rate Limit ExceededIE 9's Console.
Error: User Rate Limit Exceeded
7

Происходит одно из двух:

  1. $ is not jQuery, but a function defined elsewhere; or,

  2. $ is not the correct version of jQuery. on was introduced in 1.7.


Для jQuery 1.6 следующееon:

$(document).on('change', '#dropdownval select', ...)

может быть написано с помощьюdelegate (начиная с 1.4, устарела 1.7):

$(document).delegate('#dropdownval select', 'change', ...)

может быть написано с помощьюlive (начиная с версии 1.3, устарело):

$('#dropdownval select').live('change', ...) 

Пожалуйста, обратитесь к документации для получения дополнительной информации и предостережений.

С помощьюdelegate can прикрепить & quot; ниже & quot; тело (какon) в то время какlive всегда прикрепляется на уровне тела. Таким образом, вышесказанное можно было бы написать более эффективно, в зависимости от того, где находится цель.

Удачного кодирования.

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededonError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы