javascriptjqueryclicktwitter-bootstraphtml5boilerplate

jQuery is not catching click on some content loaded


I'm using jQuery 1.7.2 with Zoomy and jmpress plugins. Also I'm using boilerplate+bootstrap downloaded from initializr.com

I'm trying to create a "game" like [Waldo/Wally] when you have to find some character in a photo. Each photo has a different character to find.

I'm using jmpress as a presentation plugin to go from one photo to another every time the character is found. jmpress loads the content trough ajax (and I need that behavior) because I want a pretty fast load of the web.

Problem: The .on("click") event is not being caught on one of the elements that exist inside the content loaded.

As an example, I'll explain my problem with one of this characters (just taking parts of code).

I have in my index.html some divs to load the characters, I'll take the nurse character:

<div id="nurse" class="step container" data-src="women/nurse.html" data-x="7500">
  Loading...
</div>

The jmpress load the data-src (women/nurse.html) trough ajax when the user is near to that div (step). It loads great.

This is the code of nurse.html

<script type="text/javascript">
    new Image().src = "img/nurse_big.jpg";
</script>
<div class="descripcion">
    <p>Bla, bla, bla.</p>
</div>
<div class="imagen">
    <a href="img/nurse_big.jpg" class="zoom"> <img src="img/nurse.jpg" alt="Find the nurse" /> </a>
</div>

As you can see, I have two divs loaded inside the #nurse div (that has .step class).

I have this code on my js/script.js file when I try to catch the click event:

$(".step").on("click", function(event){
    console.log(event.target);
});

I'm also trying with "body" tag to see what happens

$("body").on("click", function(event){
    console.log(event.target);
});

If you check the console while the message is showing (div.descripcion) it catch the event and print. But, after the div.descripcion is removed and the image appears, it dosen't. Like if that div.imagen or even elements inside it dosen't exist. The click event is not catched. I tried to catch mousemove event and It does.

Why is not catching the click? any idea?

You can see a working version: [Removed]

And the not working version: [Removed]

UPDATE: I forgot, if I use .on("click") it dosen't work. But if I use .on("mousemove") for example, it works. That's the weird part. .on() is working, but not for the click event.

UPDATE 2: I have removed the links of the live examples because they where dev versions. I'll publish the link to the final work when is published. Thanks to all of you for taking the time. Specially to @Esailija that gives me the answer.


Solution

  • The zoomy plugin you are using does this:

     'click': function () {
        return false;
    }
    

    Since the element you are clicking when you are on the image, is actually the zoomy elements, those get to handle the events first. They handle it by returning false, which means doinge.stopPropagation() as well as e.preventDefault(). So the event won't even come to .imagen.

    There is also unterminated multi-line comment in your code, not sure what that does but it can't be good. Consider just deleting code instead of commenting it out.

    Anyway, clearing everything like this:

    $.cache = {}; //Can also do $("*").off() I think
    

    And then doing:

    $(".step").on("click", ".imagen", function(event){
        console.log(event.target);
        event.preventDefault();
    });
    

    And it works fine. You might wanna edit the plugin to do this instead:

    'click': function (e) {
        e.preventDefault();
    }
    

    Alternatively you could look for a plugin that is developed by someone who knows what the hell they are doing or write it yourself.