You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery如何实现仅自动重复点击最后一次按下的按钮?

问题原因

你当前的代码每次点击按钮都会在AJAX成功回调中创建一个新的定时器,且没有清除之前创建的定时器,导致多个定时器同时运行,同时触发不同按钮的点击事件。另外直接在定时器中触发按钮点击,会再次进入点击回调的成功逻辑重复创建定时器,还会造成不必要的逻辑嵌套。

解决方案

修改后的完整代码如下,核心是新增全局定时器变量统一管理、抽离公共刷新逻辑、统一绑定事件:

<?php
    $query_first = "SELECT * FROM apply WHERE cgemail='$email' ";
    $results_first = mysqli_query($conn, $query_first);
    while($row = mysqli_fetch_assoc($results_first)){
        $cremail=$row['email'];
        $query_first2 = "SELECT * FROM users_cr WHERE email='$cremail' ";
        $results_first2 = mysqli_query($conn, $query_first2);
        $row2 = mysqli_fetch_assoc($results_first2);

        $acc=$row['accept'];
        if($acc==0){$show=_45;}else{$show='<b class="text-success">'._44.'</b>';}
        echo'
            <div class="mb-5">
                <div class="mb-4 just">
                    <span class="fs-4 fw-bold">'.$row['title'].'</span>&nbsp;<span class="text-muted">'.$row['timesubmit'].'</span><span class="color_orange float-end pr-3 pt-3">'.$show.'</span>
                    <br><br>
                    <b class="text-success fw-bold">'._CARERECEIVER2.' : '.$row2['name'].'</b><br>
                    '.$row['description'].' 
                    <br>
                </div><br><br>
                <button data-id="'.$row['id'].'" data-requestid="'.$row['requestid'].'" class="btn btn-primary float-end chat-btn">'._46.'</button>
            </div>
            <hr>                                        
        ';
    }                                               
?>
<script>
// 全局变量存储当前运行的定时器ID
let globalChatInterval = null;

// 抽离独立的聊天刷新逻辑,避免重复触发点击事件
function refreshChat(btnId, requestId) {
    $.ajax({
        type: "POST",
        url: "fetch_one_chat.php",
        data: {bla2:btnId,bla3:requestId},
        success: function (msg) {
            $("#one").html(msg);
        }
    });
}

$(document).ready(function(){
    // 统一绑定所有聊天按钮的点击事件
    $(".chat-btn").click(function(){
        // 点击新按钮先清除上一个定时器,保证仅最后一次点击的定时器运行
        if(globalChatInterval) {
            clearInterval(globalChatInterval);
        }
        // 从按钮自定义属性获取参数
        const currentId = $(this).data('id');
        const currentRequestId = $(this).data('requestid');
        // 首次点击直接加载聊天内容,无需等定时器触发
        refreshChat(currentId, currentRequestId);
        // 启动新的定时器,存入全局变量
        globalChatInterval = setInterval(() => {
            refreshChat(currentId, currentRequestId);
        }, 3000);
    });
});
</script>
核心修改点
  • 新增全局globalChatInterval变量管理定时器,每次点击新按钮前先清除旧定时器,避免多定时器同时运行
  • 把刷新聊天逻辑抽为独立函数,不再通过触发按钮点击刷新,避免重复进入点击回调创建多余定时器
  • 按钮参数通过data-*自定义属性存储,统一绑定点击事件,无需循环输出重复JS代码,减少页面冗余
  • 首次点击直接加载聊天内容,无需等待3秒定时器首次执行才加载

示例图

内容的提问来源于stack exchange,提问作者pooya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:06