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

如何调用disable函数,实现囚犯非Detained状态下禁用Add Visitor按钮?

解决「根据囚犯状态自动禁用Add Visitor按钮」的函数调用问题

你已经写好了判断状态的disable()函数,现在需要把它放在合适的位置确保页面加载时就能执行,或者在状态元素渲染后触发。下面是几个靠谱的放置方案:


方案1:放在页面底部(所有DOM元素加载完成后)

把你的<script>标签放在整个HTML页面的最底部,也就是</body>标签的上方。这样当浏览器执行这段JS时,页面里的prisonerstatus隐藏输入框和visitorbtn按钮已经被渲染出来了,能确保getElementById找到对应的元素。

示例代码结构:

<!-- 页面其他内容,包括PHP渲染的状态输入框、按钮 -->
<?php include "connect.php"; 
$idd =$_GET['id']; 
$result = $connect->query("SELECT * FROM prisoner INNER JOIN offensedata ON prisoner.prisoner_id = offensedata.prisoner_id INNER JOIN arrestdata on prisoner.prisoner_id = arrestdata.prisoner_id INNER JOIN booking ON prisoner.prisoner_id = booking.prisoner_id WHERE prisoner.prisoner_id = $idd") or die($connect->error); 
$rows1 = $result->fetch_all(MYSQLI_ASSOC); 
foreach ($rows1 as $row){ 
    $status = $row['status']; 
    echo "<input type = 'hidden' value = '$status' id = 'prisonerstatus'/>"; 
    echo "<div class='col-lg-3'>Status: $status </div>"; 
} 
?>

<input type = "button" class="call_modal" style="cursor:pointer;margin-top:1%;" value = "Add Visitor" id = 'visitorbtn'>

<!-- 把JS脚本放在这里 -->
<script language = "javascript" type = 'text/javascript'> 
function disable(){ 
    if(document.getElementById('prisonerstatus').value == "Detained"){ 
        document.getElementById("visitorbtn").disabled= false;
    } else{ 
        document.getElementById("visitorbtn").disabled= true; 
    } 
};
// 别忘了调用函数!
disable();
</script>
</body>
</html>

注意:一定要在函数定义后加上disable();来主动调用它,不然函数只是定义了不会自动执行。


方案2:使用DOMContentLoaded事件监听

如果不想把脚本放在底部,可以把脚本放在<head>里,但要包裹在DOMContentLoaded事件里,确保DOM加载完成后再执行函数:

<head>
<script language = "javascript" type = 'text/javascript'> 
function disable(){ 
    if(document.getElementById('prisonerstatus').value == "Detained"){ 
        document.getElementById("visitorbtn").disabled= false;
    } else{ 
        document.getElementById("visitorbtn").disabled= true; 
    } 
};

// 等待页面DOM加载完成后调用函数
document.addEventListener('DOMContentLoaded', function() {
    disable();
});
</script>
</head>

这个方法的好处是脚本位置灵活,不用特意放在底部,适合页面结构比较复杂的情况。


方案3:直接在PHP渲染完状态后立即调用

还可以在PHP输出完prisonerstatus输入框之后,直接输出一个<script>标签调用disable()函数。比如在你的PHP循环结束后加上:

<?php
// 之前的PHP代码...
foreach ($rows1 as $row){ 
    $status = $row['status']; 
    echo "<input type = 'hidden' value = '$status' id = 'prisonerstatus'/>"; 
    echo "<div class='col-lg-3'>Status: $status </div>"; 
} 
// 直接调用disable函数
echo "<script>disable();</script>";
?>

这时候你的disable()函数需要提前定义(比如放在<head>里),这样PHP输出完状态元素后,立刻执行函数就能正确获取到值了。


额外提醒

  • 确保你的prisonerstatus隐藏输入框的id是唯一的,因为页面里如果有多个相同id的元素,getElementById只会找到第一个,可能导致判断出错。
  • 你提到后续会处理SQL注入问题,这里提前给个小提示:可以用预处理语句来替代直接把$_GET['id']拼进SQL里,比如用mysqli_prepare和bind_param,能有效防范注入~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:41:16