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

使用onblur事件保存textarea内容到数据库,模板页面失效空白页正常求助

解决textarea的onblur事件在模板布局中失效的问题

以下是针对问题的具体排查方向和修复方案:

1. 修正jQuery加载顺序

原代码中myFunction依赖jQuery,但jQuery脚本在函数定义之后加载,模板环境下可能因加载顺序导致$未定义,触发函数时报错。

修复代码:

<td class="text-center">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <textarea onblur="myFunction(this)" name="notepad" id="notepad" data-id="notepad">
        <?php
        $stmt = $dbh->prepare("SELECT * FROM *** WHERE `***` = '".$_SESSION['***']."'");
        $stmt->execute();
        $result = $stmt;
        foreach($result as $row) {
            echo $row['evidence'];
        }
        ?>
    </textarea>
    <script type='text/javascript'>
        function myFunction(elm){
            console.log('textarea blur'+elm.value);
            var notepadVal = elm.value; 
            var id = elm.id; 

            $.ajax({
                type: "POST",
                url: "***.php",
                data: {notepad:notepadVal,id:id},
                success: function(msg) {
                    // $('#notepad-' + id).val(msg);
                }
            });
        }
    </script>
</td>

2. 避免重复ID冲突

如果表格包含多行数据,每个textarea都使用id="notepad"会违反DOM唯一ID规则,导致事件绑定或选择器失效。

修复代码(结合数据库行ID生成唯一ID):

<td class="text-center">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <?php
    $stmt = $dbh->prepare("SELECT * FROM *** WHERE `***` = '".$_SESSION['***']."'");
    $stmt->execute();
    $result = $stmt;
    foreach($result as $row) {
        echo '<textarea onblur="myFunction(this)" name="notepad" id="notepad-'.$row['id'].'" data-id="notepad-'.$row['id'].'">'.$row['evidence'].'</textarea>';
    }
    ?>
    <script type='text/javascript'>
        function myFunction(elm){
            console.log('textarea blur'+elm.value);
            var notepadVal = elm.value; 
            var id = elm.id; 

            $.ajax({
                type: "POST",
                url: "***.php",
                data: {notepad:notepadVal,id:id},
                success: function(msg) {
                    // $('#notepad-' + id).val(msg);
                }
            });
        }
    </script>
</td>

3. 改用事件委托替代内联事件

模板布局可能存在动态渲染或事件覆盖问题,内联事件易被干扰,使用jQuery事件委托更稳定。

修复代码:

<td class="text-center">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <textarea name="notepad" class="notepad-input" data-id="notepad">
        <?php
        $stmt = $dbh->prepare("SELECT * FROM *** WHERE `***` = '".$_SESSION['***']."'");
        $stmt->execute();
        $result = $stmt;
        foreach($result as $row) {
            echo $row['evidence'];
        }
        ?>
    </textarea>
    <script type='text/javascript'>
        $(document).on('blur', '.notepad-input', function(){
            var elm = $(this);
            console.log('textarea blur'+elm.val());
            var notepadVal = elm.val(); 
            var id = elm.data('id'); 

            $.ajax({
                type: "POST",
                url: "***.php",
                data: {notepad:notepadVal,id:id},
                success: function(msg) {
                    // $('#notepad-' + id).val(msg);
                }
            });
        });
    </script>
</td>

4. 移除无效HTML属性

原textarea标签中多余的textarea属性属于无效标记,可能影响浏览器解析,需删除:

<!-- 错误写法 -->
<textarea onblur="myFunction(this)" textarea name="notepad" id="notepad" data-id="notepad">

<!-- 修复后 -->
<textarea onblur="myFunction(this)" name="notepad" id="notepad" data-id="notepad">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:40:30