如何调用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
相关产品推荐
相关产品推荐

