Uncaught TypeError: Object [объект Object] не имеет метода 'on'

Может ли кто-нибудь помочь мне разобраться в этом?

Когда я использую последнюю (или новую) версию jQuery, небольшой скрипт ниже работает нормально. Однако, когда я использую более старые версии jQuery, мой сценарий сообщает, что функция on не существует.

Вот мой сценарий, который не работает со старыми версиями jQuery:

$(document).ready(function () {
    $(".theImage").on("click", function(){
        // In the event clicked, find image, fade slowly to .01 opacity
        $(this).find("img").fadeTo("slow", .01).end()
        // Then, of siblings, find all images and fade slowly to 100% opacity
               .siblings().find("img").fadeTo("slow", 1);           
    })
})

Любая помощь приветствуется.


person dvlden    schedule 06.06.2012    source источник


Ответы (4)


Вы должны использовать bind вместо _ 2_, поскольку on был введен только в jQuery 1.7.

$(document).ready(function () {
    $(".theImage").bind("click", function(){
        // In the event clicked, find image, fade slowly to .01 opacity
        $(this).find("img").fadeTo("slow", .01).end()
        // Then, of siblings, find all images and fade slowly to 100% opacity
        .siblings().find("img").fadeTo("slow", 1);           
    })
})
person Aelios    schedule 06.06.2012
comment
Ого, это был быстрый человек ... 12 минут, пока я не смогу принять ответ. Проверю как правильно ... отлично работает! - person dvlden; 06.06.2012
comment
@Christoph пользователь спрашивает, почему его код (с .on()) не работает со старой версией jQuery ... так что этот ответ в порядке - person Fabrizio Calderan; 06.06.2012
comment
Но bind ведет себя иначе, чем .on, поэтому op предположительно использовал .on, а не .click? .live - альтернатива - person Alex; 06.06.2012
comment
@Alex - в этом случае bind и on работают одинаково. В on не передается селектор, из-за чего он мог бы делегировать обработчик событий. - person James Allardice; 06.06.2012
comment
@ F.Calderan Ответ вообще не касается почему, хотя вопрос никогда конкретно не спрашивает почему. Он просто говорит, что это исправление, без объяснения, в чем заключалась исходная проблема; Я позволю людям решить для себя, является ли это полным ответом. - person Anthony Grist; 06.06.2012
comment
конечно каждый выбирает для себя :) мне это нормально, потому что решает проблему - и это был ответ на удаленный комментарий - person Fabrizio Calderan; 06.06.2012

Вы можете использовать delegate(), например:

$("table").delegate("td", "click", function() {
  $(this).toggleClass("chosen");
});

Это эквивалентно следующему коду, написанному с использованием on():

$("table").on("click", "td", function() {
  $(this).toggleClass("chosen");
});
person raycchan    schedule 14.03.2013
comment
Хотя эквиваленты, которые вы описываете в своем ответе, верны, delegate() не эквивалентен использованию OP on() в вопросе (он присоединяет элемент непосредственно к .theImage, тогда как вы делегируете другому элементу). - person Matt; 21.04.2013
comment
К вашему сведению: начиная с jQuery 1.7 delegate() был заменен on() - person JSmyth; 24.11.2013

Для использования on() необходимо использовать jQuery версии 1.7+. bind() устарел.

person Mohammad Rahmani    schedule 27.02.2013
comment
Спасибо, не знаю, почему люди проголосовали против, но я поставил 1,7, и это сработало! - person Faizan; 18.05.2013

Измените функцию on на bind:

.children().on("click",function()
по
.children().bind("click",function()

person Devendra Bhandari    schedule 21.04.2013