2014-04-01 199 views
0

我对JavaScript有点新鲜。我试图做到这一点,以便点击一个页面上的图像将您带到一个新页面,并在该新页面上显示特定的div,因此我使用sessionStorage来记住和布尔值以跟踪哪个图像被点击。现在,代码总是执行第一个if语句,而不管哪个图像被点击。此代码在正常的java中工作正常,所以我无法弄清楚为什么我的if语句在javascript中被忽略。我还尝试在最后添加'else',并尝试了===。这是我的javscript,谢谢!JavaScript忽略if语句

sessionStorage.clickedLeft; 
sessionStorage.clickedMiddle; 
sessionStorage.clickedRight; 

     function openedProjectFromGallery() { 
    if(sessionStorage.clickedLeft) { 
     $(".left-project-pop-up").show(); 
    } else if (sessionStorage.clickedMiddle) { 
     $(".middle-project-pop-up").show(); 
    } else if (sessionStorage.clickedRight) { 
     $(".right-project-pop-up").show(); 
      } 
    sessionStorage.clickedLeft = false; 
    sessionStorage.clickedMiddle = false; 
    sessionStorage.clickedRight = false; 
} 

    $("document").ready(function() { 


    $(".pop-up .x-button").click(function(){ 
    $(".pop-up").hide(); 
}); 

    $(".project-description .x-button").click(function(){ 
    $(".project-pop-up").hide(); 

}); 

$(".left-project-thumb img").on("click", ".left-project-thumb img", function(){ 
    sessionStorage.clickedLeft = true; 
    sessionStorage.clickedMiddle = false; 
    sessionStorage.clickedRight = false; 
    openedProjectFromGallery(); 
}); 

$(".profile-left-project img").click(function(){ 
    $(".left-project-pop-up").show(1000); 

}); 

$(".middle-project-thumb img").on("click", ".middle-project-thumb img", (function(){ 
    sessionStorage.clickedMiddle = true; 
    sessionStorage.clickedLeft = false; 
    sessionStorage.clickedRight = false; 
    openedProjectFromGallery(); 

}); 

$(".profile-middle-project img").click(function(){ 
    $(".middle-project-pop-up").show(1000); 

}); 

$(".right-project-thumb img").on("click", ".right-project-thumb img", (function(){ 
    sessionStorage.clickedRight = true; 
    sessionStorage.clickedLeft = false; 
    sessionStorage.clickedMiddle = false; 
    openedProjectFromGallery(); 

}); 

$(".profile-right-project img").click(function(){ 
    $(".right-project-pop-up").show(1000); 

}); 


    }); 
+1

控制台中是否有错误? – 11684

+3

显然你在加载脚本文件时调用'openedProjectFromGallery',这是在发生任何点击事件之前。 – njzk2

+0

请创建一个[** fiddle **](http://jsfiddle.net/)! – Shef

回答

1

您在document.ready中定义了函数openedProjectFromGallery()。在document.ready之外定义它,并且如果没有用某个值初始化或者它们是空的,也可以在代码的顶部给三个布尔值作为初始值。我希望这会有所帮助。

0

从我可以看到的openProjectFromGallery只在文档加载调用。

将调用添加到每个事件处理函数中,或使用jQuery's delegate function将事件处理分配给每个图像。

1

它没有真正回答你的原单的问题,与你的代码的主要问题是,作为@ njzk2说,这openProjectFromGallery才会被调用一次,而不是每一个事件,但是我希望把我的两个硬币上这段代码的外观如何。

这是很好的例子,其中自定义事件,应使用

$(document).on('showPopup', function(e, popup) { 
    $('.'+popup + '-project-pop-up').show() 
}) 

$(document).on('hidePopup', function(e) { 
    $('.popup').hide() 
}) 

$('.left-project-thumb img').on('click', function(e) { 
    $(document).trigger('showPopup', ['left']) 
}) 

$('.right-project-thumb img').on('click', function(e) { 
    $(document).trigger('showPopup', ['right']) 
}) 

我觉得你的想法。

另一方面,使用事件委托以及许多类似的事件以及dom数据总是很好的。

<div class='popup' data-popup='left'> 
    <img /> 
</div> 

$(document).on('click','.popup', function(e) { 
    $(document).trigger('showPopup', [$(this).data('popup')]) 
})