2011-11-23 52 views
0

我想根据条件显示并隐藏div(对于本示例中的facebook)。 这是我使用的代码,但由于某种原因,警报工作,但它仍然显示div。 有人可以帮助调试。谢谢。在jquery中显示/隐藏div

<?php 
     // call the function to parse the signed request 
$sr_data = mySignedRequest(); 

// check like status 
if ($sr_data->page->liked==1) { 
    echo '<script language="javascript"> 
     alert("Hello You Are a Fan");  
      document.getElementById("header").style.display = "block"; 
     </script>'; 
} else { 
    echo '<script language="javascript"> 
     alert("You are not a fan");  
      document.getElementById("header").style.display = "none"; 
     </script>'; 
} 

?> 
<div id="header"> 

Hello You Are a Fan 
</div><!-- #header --> 
+0

我认为如果你写出你的脚本标签,就像你在你的div下面和脚本标签内部做类似'alert('<?php echo $ sr_data-> page-liked == 1?“你好......”:“你是......”;?>');'这会为你节省一堆代码。我知道这不是问题,但我只是说;) – mraaroncruz

+0

或更类似于maxedison的低于 – mraaroncruz

回答

5

这是一个典型的代码尝试访问元素,虽然他们还不存在的例子。你只是用getElementById获取元素,但是元素仅在之后的所有JavaScript代码中定义了。您可以使用$(document).ready。此外,jQuery有.hide.show所以你不需要getElementByIdstyle.display

echo '<script language="javascript"> 
    alert("Hello You Are a Fan"); 

    $(document).ready(function() { // only run when all elements are available 
     $("#header").show(); 
    }); 
    </script>'; 
3

这不是在JS代码运行的时间,因为工作,#header尚不存在于页面上。如果您将PHP(因此JS)移到#header div下面,它将起作用。

更好的方法是按照pimvdb的建议将JS打包在$(document).ready()调用中。

然而,我不认为这会给你一个好的结果,因为#header实际上会短暂可见,然后消失。要解决这个特定的情况下,最好的办法是做这样的事情:

<?php 

if ($sr_data->page->liked==1) { 
    $display = 'block'; 
} else { 
    $display = 'none'; 
} 

?> 

<div id="header" style="display:<?php echo $display ?>"> 

Hello You Are a Fan 
</div> 

通过嵌入与DIV正确的风格的行内,它永远不会当它不应该出现。

+0

+1的JavaScript实际上是在这里矫枉过正。 – pimvdb

+0

也可以。我不能检查两件事......我猜。感谢这个替代解决方案。 – kidA

+0

你不能检查2件东西吗? – maxedison

-1

更改document.getEle ...以下:

$(document).ready(function() {  
    $("#header").show(); 
}); 

$(document).ready(function() {  
    $("#header").show(); 
}); 
+0

nope。正如其他人已经指出的那样,'#header'还不存在。 – maxedison

+0

谢谢 - 我忽略了这一点。答案已更新。 – Joshua

1

改变代码块的顺序:先显示HTML

<div id="header"> 

Hello You Are a Fan 
</div><!-- #header --> 
<?php 
     // call the function to parse the signed request 
$sr_data = mySignedRequest(); 

// check like status 
if ($sr_data->page->liked==1) { 
    echo '<script language="javascript"> 
     alert("Hello You Are a Fan");  
      document.getElementById("header").style.display = "block"; 
     </script>'; 
} else { 
    echo '<script language="javascript"> 
     alert("You are not a fan");  
      document.getElementById("header").style.display = "none"; 
     </script>'; 
} 

?> 

因为当JS乳宁, #header dom不是退出。