MVC应用中重复页面点击Start按钮时弹出定时器已运行提示的实现
解决方案:避免重复启动定时器并弹出提示
方法一:基于后端状态的即时判断
直接在Start按钮的点击事件中加入状态校验,利用后端传递的BIsSetupRunning字段判断定时器是否已在运行:
修改ISetupStatus=0时的Start按钮
<button class="btn production-btn" type="button" style="width:135px;background-color:green;" onclick="javascript: if (@Model.BIsSetupRunning) { alert('定时器已经在运行'); } else { UpdateProductionStatus(@Model.IJobID,1,true,false); }">Start</button>
修改ISetupStatus=2时的Start按钮
<button class="btn production-btn" type="button" style="width:135px;background-color:green;" onclick="javascript: if (@Model.BIsSetupRunning) { alert('定时器已经在运行'); } else { UpdateProductionStatus(@Model.IJobID,1,true,false); }">Start</button>
这种方式简单直接,依赖后端返回的实时状态,适用于页面状态与后端同步的场景。
方法二:前端维护运行状态(适配页面复制场景)
如果存在页面复制后前端状态与后端不同步的情况,通过前端全局变量跟踪定时器运行状态,判断更可靠:
1. 定义全局状态变量
在页面的<script>区块中添加:
// 从后端初始化状态,转为布尔值 let isSetupTimerRunning = @Model.BIsSetupRunning.ToString().ToLower();
2. 更新UpdateProductionStatus函数
修改该函数,在状态变更时更新全局变量:
function UpdateProductionStatus(jobId, status, param1, param2) { // 标记定时器状态 if (status === 1) { isSetupTimerRunning = true; // 启动定时器 } else if (status === 2 || status === 3) { isSetupTimerRunning = false; // 停止或完成定时器 } // 保留原函数的业务逻辑(AJAX请求、定时器启动等) }
3. 修改Start按钮点击事件
将两个Start按钮的onclick替换为:
onclick="javascript: if (isSetupTimerRunning) { alert('定时器已经在运行'); } else { UpdateProductionStatus(@Model.IJobID,1,true,false); }"
这样即使页面被复制,前端也能根据自身维护的状态判断,避免重复启动定时器并弹出提示。
内容的提问来源于stack exchange,提问作者Hercule
相关产品推荐
相关产品推荐

