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

AJAX动态插入的HTML代码中表单提交按钮无响应如何解决

问题根因与修复方案

1. 核心问题说明

你遇到的提交按钮失效问题主要有两个核心诱因:

  • 你的updatestatus.php返回的是完整HTML文档(包含<!DOCTYPE>、<head>、<body>标签),直接插入到主页面的div容器中会导致全局DOM结构混乱,浏览器解析异常
  • 你把<form>标签直接放在<tr>的同级位置,不符合HTML规范,浏览器会自动将错位的表单移到表格外部,导致表单没有包裹住输入框和提交按钮,点击提交自然没有响应

2. 修复步骤

步骤1:修正PHP返回内容结构

删除updatestatus.php中所有多余的HTML头部内容,只保留表格本身的代码,不需要重复引入jQuery、也不需要嵌套head、body标签。

步骤2:修正表单嵌套错误

用HTML5的form属性关联提交按钮和表单,不需要把表单嵌套在表格结构中,避免浏览器解析错位。

步骤3:优化AJAX刷新逻辑

增加内容变更判断,只有数据实际发生变化时才替换DOM内容,避免5秒强制刷新打断用户操作。

步骤4:修复代码潜在问题

  • SQL语句替换为预编译查询,避免注入风险
  • 修复mysqli_close()传参错误、多余引号、id重复等语法问题
修复后的代码示例

调整后的updatestatus.php代码

<?php
session_start();
$event = $_SESSION['event'];

set_include_path('./includes/');
include 'conn.inc';

$conn = new mysqli($servername, $username, $password, $dbname);
// 预编译查询防注入
$stmt = $conn->prepare("SELECT * from sags WHERE Complete='N' AND event=? ORDER BY bib");
$stmt->bind_param("s", $event);
$stmt->execute();
$result = $stmt->get_result();
?>
<table width='100%' border='1'>
    <tr>
        <td width='100%' height='45px' colspan='8' class='w3-center'>
            <button class='w3-button w3-blue w3-text-white w3-medium w3-padding-8' name='addnew' onclick='gotonewcall()'>ADD NEW REQUEST</button>
        </td>
    </tr>
    <tr>
        <td width='6%' class='w3-padding-small w3-small'><b>ID</b></td>
        <td width='14%' class='w3-padding-small w3-small'><b>NAME</b></td>
        <td width='6%' class='w3-padding-small w3-small'><b>BIB</b></td>
        <td width='12%' class='w3-padding-small w3-small'><b>CELL PHONE</b></td>
        <td width='24%' class='w3-padding-small w3-small'><b>CALL</b></td>
        <td width='18%' class='w3-padding-small w3-small'><b>LAST UPDATE</b></td>
        <td width='15%' class='w3-padding-small w3-small'><b>STATUS</b></td>
        <td width='5%'></td>
    </tr>
    <?php
        if($result->num_rows > 0){
        while($row=$result->fetch_assoc()){
            $status = $row['status'] == "ONLOCATION" ? "ON LOCATION" : $row['status'];
            // 生成唯一表单ID
            $formId = "edit_form_".$row['id'];
    ?>
        <tr>
            <td width='6%' class='w3-padding-small w3-small w3-text-black'>
                <b><?php echo $row['id'] ?></b>
                <form id="<?php echo $formId; ?>" action="editrequest.php" method="post">
                    <input type='hidden' name='id' value="<?php echo $row['id'] ?>">
                </form>
            </td>
            <td width='14%' class='w3-padding-small w3-small w3-text-black'><b><?php echo $row['fName'] ?></b></td>
            <td width='6%' class='w3-padding-small w3-small w3-text-black'><b><?php echo $row['bib'] ?></b></td>
            <td width='12%' class='w3-padding-small w3-small w3-text-black'><b><?php echo $row['cellphone'] ?></b></td>
            <td width='24%' class='w3-padding-small w3-small w3-text-black'><b><?php echo $row['sagrequest'] ?></b></td>
            <td width='18%' class='w3-padding-small w3-small w3-text-black'><b><?php echo $row['statstime'] ?></b></td>
            <?php
                $statusClass = match($status) {
                    "ON LOCATION" => "w3-text-white w3-red",
                    "ENROUTE" => "w3-text-black w3-yellow",
                    "NEW" => "w3-text-black w3-white",
                    "RECEIVED" => "w3-text-black w3-gray",
                    "TRANSPORTING" => "w3-text-white w3-purple",
                    default => ""
                };
                echo "<td width='15%' class='w3-padding-small w3-small {$statusClass}'><b>{$status}</b></td>";
            ?>
            <td width='5%' class='W3-center w3-tiny'>
                <input type="submit" value="OPEN" name="editentry" form="<?php echo $formId; ?>" class="w3-button w3-blue w3-center" style="width:100%; height:100%">
            </td>
        </tr>   
    <?php
            }
        } else {
            echo "<tr><td colspan='8' class='w3-center'><h3><b>NO ACTIVE CALLS</b></h3></td></tr>";
        }
        $conn->close();
    ?>
</table>

优化后的主页面AJAX代码

let lastContent = '';
const interval = setInterval(function() {
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function() {
    // 仅内容变更时更新DOM,避免无意义刷新打断用户操作
    if (this.responseText !== lastContent) {
      document.getElementById("unitstatus").innerHTML = this.responseText;
      lastContent = this.responseText;
    }
  }
  xhttp.open("GET", "updatestatus.php");
  xhttp.send(); 
}, 5000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:45:03