试图根据$ _GET变量淡化隐藏的div

时间:2013-04-23 15:26:57

标签: php javascript jquery jquery-animate

我试图在用户点击删除链接后使用Jquery显示一个确认框。单击删除链接时,它会将post_id发送到URL。只要设置了它并且它不为空,我就会触发动画,它将显示隐藏的确认框。

到目前为止,这是我目前无法正常工作的内容:

// if admin wants to delete a post check for post_id
if(isset($_GET['post_id']) && !empty($_GET['post_id'])){

    $delete_id = (int)$_GET['post_id'];
    $animate = true;

    echo '<script type="text/javascript">';
    echo 'var animate = '.$animate;
    echo '</script>';
}

GET变量设置正确。

在我的jquery文件中,我有:

$(document).ready(function(){
    if(animate == true){
        $("#delete_confirm").fadeIn('3000','swing');

    }
});

和确认箱:

<div id="delete_confirm">
                <p>Please confirm you want to delete this post.</p>
                <input type="button" id="delete" name="delete" value="confirm" />
            </div>

在样式表中设置了display:none;

为什么animate变量设置为true时不显示?

由于

4 个答案:

答案 0 :(得分:3)

<强>更新

试试,测试和工作:

<?php

if(isset($_GET['post_id']) && !empty($_GET['post_id'])){
    $delete_id = (int)$_GET['post_id'];
    $animate = true;
}

?>
<html>
<head>
<title>Simulation</title>
</head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript">

var prop = {
    animate: "<?php echo $animate; ?>"
};

$(document).ready(function(){

    if(prop.animate == 1){
        $("#delete_confirm").fadeIn('3000','swing');
    }

});
</script>
<body>
<div id="delete_confirm">
    <p>Please confirm you want to delete this post.</p>
    <input type="button" id="delete" name="delete" value="confirm" />
</div>
</body>
</html>

答案 1 :(得分:2)

您应该取消设置div上的display:none;属性,并在页面加载时调用.fadeOut(0),或在CSS文件中设置其opacity:0.0;

此外,您可以使用window.location对象的search属性来处理客户端上的GET参数检查,而不是包含所有此服务器端代码注入内容,然后检测特定参数设置正则表达式匹配。这样您就不必使用任何内联JavaScript。

var matches = window.location.search.match(/post_id/g);
if(matches && matches.length > 0)
{
// do animation
} else {
// do something else
}

这样的事情应该有效,而且我个人喜欢这样做而不是注入脚本标签和内联JavaScript。

答案 2 :(得分:0)

  

php检查是否设置了GET变量,如果设置了$ animate   为真。在此之后,Jquery检查animate变量,   如果它设置为true,则应该发生fadein。

对我来说,这非常令人困惑。让我试着再研究一下。

  • 您有一个包含确认框的页面。
  • 当用户按下删除按钮时,将使用jQuery脚本显示确认框(<div id="delete_confirm">)。
  • 用户按页面上的“删除”按钮。这里发生了什么?有两种选择:
    • 你做AJAX请求。
    • 您执行HTTP GET请求。

根据您的评论和代码,我猜你做了HTTP GET请求。在这种情况下,您重新加载页面。是的,PHP在$_GET['post_id']中获得了正确的值,并且帖子被删除了。

但是你得到了全新的HTML页面。在这个页面上,div <div id="delete_confirm">从一开始就是不可见的。这就是它没有显示和隐藏的原因。

当您查看源代码时,您可以找到JS脚本<script type="text/javascript">...,我请求代码$(document).ready(function(){...也可以。但是你可以在新加载的HTML页面上获得它。

如果我在这里弄错了,请纠正我。

我认为你想要隐藏你可能想要使用AJAX的确认框。但是,您可能还想通过更改页面来从页面中删除帖子。

答案 3 :(得分:-2)

引用jQuery文档:“The .fadeIn() method animates the opacity of the matched elements.

.fadeIn()将有效地将元素的css不透明度从0更改为1.

您已经声明在CSS中你的元素有display: none;所以你所做的只是改变1的不透明度(假设你没有将CSS中的内容设置为1,同时将显示设置为none ...所以它永远不会显示。

这似乎适用于.animate() 允许您“动画”显示类型(从“无”到“阻止” - 您使用不透明度) ...但不适用于.fadeIn() / .fadeOut() 执行允许您使用CSS display属性淡入/淡出一个块。

我的不好,我让两者感到困惑。