views:

36

answers:

2

This is a strange problem.

I have two html pop-up windows, just hidden divs that I make visible by removing a css class. One is launched from from the main page, the second is launched from the div that I make visible. This all works great. Then when I try to close them I do this: (from game_ui.js)

   setUpPopUp: function() {
       $(pop_up+" a").click(function(event) {
         event.stopPropagation();
         event.preventDefault();
         var el = event.target;
         if($(el).attr('href') == '#close') {
             $(pop_up).addClass('hidden');
             if(pop_up === pop_ups[1]) {
                 pop_up = pop_ups[0];
             }
         }
       });
   },

            ...

it doesn't work, BUT if I add an alert call:

  setUpPopUp: function() {
                alert(pop_up);//it could be 'alert anything...'
                $(pop_up+" a").click(function(event) {
                   ...

It DOES work. Why would this suddenly work when I put an alert box in? Any ideas on what my problem might be and how to fix it?

(from shop.js)

    var setUpDetail = function(id, item) {
    $('#pop-up').load('html_elements/shop.html #gameShopItem', function() {
        $('#gameShopItem h3').append(item.name+" Description");
        $('#gameShopItem p.itemDesc').append(item.description);
        $('#gameShopItem p.itemEffect').append(item.effect);            
        gameUi.setPopUpReference(0);                
        gameUi.showPopUp();
        gameUi.setUpPopUp();
        $("#purchaseButton").click(function(event){
            event.preventDefault();
            $('#pop-up2').load('html_elements/shop.html #gameShopItemPurchaseDialog');
            gameUi.setPopUpReference(1);                
            gameUi.showPopUp();
            gameUi.setUpPopUp();
            //jQT.goTo("#gameShopItemPurchaseDialog", 'slide');
            return false;
        });
    }); 

Link to project: http://www.1luckypixel.com/PA_js_troubles/index.html There is a decent amount of code that is spread out over multiple files before this pops up. I'm on a tight deadline at the moment, I have to provide a build by the end of the day so I uploaded the project to my webspace. Once the page loads click the triangle in the top right corner to open the nav menu, then click "shop", then click on any one of the items (this opens the first pop-up) and click "buy" to open the second. The buy button on that pop-up isn't set up, but the back button is. That is the anchor that is not firing.
(Note: there are currently several of json calls to a remote server that aren't set up to work, this doesn't effect the issue at hand).

A: 

Try to change var el = event.target; to var el = $(this);

And also remove event.stopPropogation() and preventDefault() - just add return false at the function end - this will follow jQuery style.

fantactuka
jQuery style is to use the w3c DOM Level 2 Event methods - http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture `stopPropagation()` and `preventDefault()` that are normalized across browsers in jQuery core
Russ Cam
still nothing. I just tested in safari and close button doesn't work at all there... even with the alert call.
JoeM05
@russ, I added the stopPropagation() in desperation. I do need the preventDefault though, yeah?
JoeM05
@JoeM05 - I think we need to see more of your code and how `setUpPopUp` gets called. Can you edit your question and post more of the code? Perhaps a demo page on http://jsbin.com or http://jsfiddle.net?
Russ Cam
I've posted a link as well as the code that launches the windows.
JoeM05
Also, I realize I could (and should) collapse the calls: gameUi.setPopUpReference(1); gameUi.showPopUp();gameUi.setUpPopUp();into one function, or at least make it only nessisary to call them all from one function, I just haven't gotten around to it.
JoeM05
A: 

For the record... This wasn't working because I wasn't adding the button functionality in the load call back function I was adding it to the click behavior of the button that opened the pop up.

I didn't even think to check that (I was particularly burnt out that day) mostly because it was working when I put an alert box in the click listener function... this should have been a tip off, the alert box was giving it time to load, but instead it lead me down a blind ally thinking there was something wrong in the even propagation...

    var setUpDetail = function(id, item) {
    $('#pop-up').load('html_elements/shop.html #gameShopItem', function() {
        $('#gameShopItem h3').append(item.name+" Description");
        $('#gameShopItem p.itemDesc').append(item.description);
        $('#gameShopItem p.itemEffect').append(item.effect);            
        gameUi.readyPopUp();        
        $("#purchaseButton").click(function(event){
            event.preventDefault();
                            // added the popup window functionality to the call back function.
            $('#pop-up2').load('html_elements/shop.html #gameShopItemPurchaseDialog', function () {
                gameUi.readyPopUp();        
                return false;
            });
        });
    });     
}
JoeM05