Uncaught TypeError: Object [object Object] has no method 'on'

73,893

Solution 1

You must use bind instead of on, as on was only introduced in 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);           
    })
})

Solution 2

You could use delegate(), for example:

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

This is equivalent to the following code written using on():

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

Solution 3

You must use jQuery version 1.7+ to use on(). bind() is deprecated.

Share:
73,893
dvlden
Author by

dvlden

Hi, my name is written above, but the artist within me is called dvL. I'm full-stack developer & designer, but also more than "just" that... 💻 🤘

Updated on November 01, 2020

Comments

  • dvlden
    dvlden over 3 years

    Can anyone help me to figure this out ?

    When I use the latest (or a newish) version of jQuery, the small script below works fine. However, when I use older versions of jQuery, my script says that the on function does not exist.

    Here is my script that doesn't work with older versions of 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);           
        })
    })
    

    Any kind of help is appreciated.