【问题标题】:2 stage button in jQueryjQuery中的2阶段按钮
【发布时间】:2014-09-16 11:14:38
【问题描述】:

我是 jQuery 新手,所以请不要对我评价太苛刻!

我正在制作一个列出视频的页面,每个视频下都有一个投票按钮。该按钮分两个阶段工作,首先单击它展开按钮,然后第二次单击应使用 PHP/Ajax 确认投票。如果您在提交之前单击另一个按钮,则应重置第一个按钮。

我将下面的内容放在一起尝试完成,第一部分是展开按钮,然后是提交投票。它有点工作,但我注意到,如果您单击一个按钮,然后单击另一个按钮,然后返回到第一个按钮,它会提交投票。关于如何让这个工作的任何想法?还是更好的工作方式?

提前致谢!

<script>
$(window).load(function(){
    $("ul li .button").click(function() { 
        $("ul li .button").removeClass("active-button");    
        $("ul li .button").text("Vote for this");
        $(this).addClass("active-button");
        $(this).text("Submit vote");
        stop;
    });
});

$(document).on("click", "ul li .button", function () {
     if ( $(this).hasClass( "active-button" ) ) {
        $("ul li .active-button").click(function()
            {
            var id = $(this).attr("id");
            var name = $(this).attr("name");
            var dataString = 'id='+ id ;
            var parent = $(this);

            if (name=='up')
                {
                    $.ajax({
                        type: "POST",
                        url: "up_vote.php",
                        data: dataString,
                        cache: false,

                        success: function(html)
                        {
                        parent.html(html);
                        }
                    });
                }
        });
     }
});
</script>


<ul class="videos clearfix">
    <?php include('config.php');
        $sql=mysql_query("SELECT * FROM messages LIMIT 4");
        while($row=mysql_fetch_array($sql))
            {
                $msg=$row['msg'];
                $mes_id=$row['mes_id'];
                $up=$row['up'];
                $title=$row['title'];
    ?>

            <li>
                <h2><?php echo $title; ?></h2>
                <?php echo $msg; ?>
                <div id="<?php echo $mes_id; ?>" name="up" class="button vote">Vote for this</div>    
            </li> 

    ?php } ?>

</ul>  

【问题讨论】:

    标签: php jquery voting


    【解决方案1】:

    不要有两个单独的点击处理程序,将它们合并为一个:

    $(document).on("click", "ul li .button", function () {
         if ( $(this).hasClass( "active-button" ) ) {
                var id = $(this).attr("id");
                var name = $(this).attr("name");
                var dataString = 'id='+ id ;
                var parent = $(this);
    
                if (name=='up')
                    {
                        $.ajax({
                            type: "POST",
                            url: "up_vote.php",
                            data: dataString,
                            cache: false,
    
                            success: function(html)
                            {
                            parent.html(html);
                            }
                        });
                    }
    
         }else{
               $("ul li .button").removeClass("active-button");    
               $("ul li .button").text("Vote for this");
               $(this).addClass("active-button");
               $(this).text("Submit vote");
        }    
    });
    

    【讨论】:

    • 这就像一个魅力。我不能感谢你!我没有足够的声誉,无法将答案标记为有用。
    • @Matt 没问题,很高兴我能帮上忙。任何您都应该能够将此答案标记为正确的答案(打勾)。有 15 分钟的延迟,但现在已经过去了。
    • 啊,我现在明白了。对于发现这有帮助的任何人,该按钮需要在第二阶段双击,因为 $("ul li .active-button").click(function(),我删除了它,一切正常!
    猜你喜欢
    • 2017-03-22
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 2021-09-28
    • 2014-04-23
    相关资源
    最近更新 更多