使用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
相关产品推荐
相关产品推荐

