如何在jQuery、AJAX和CI中重置textarea?我的代码中textarea重置失效
解决textarea无法通过reset()重置的问题
看起来你在尝试重置表单元素时遇到了textarea的问题,我来帮你分析下问题所在以及修复方案:
问题根源
你代码里犯了一个关键错误:HTML的<textarea>元素本身并没有reset()方法,只有<form>元素才拥有这个方法。所以你调用$('textarea[name=title]')[0].reset();和$('textarea[name=description]')[0].reset();这两行不仅无效,还会在控制台抛出错误,甚至可能中断后续代码的执行。
修复方案
根据你的场景,分两种情况处理:
情况1:textarea在form标签内部
如果你的textarea是某个form的一部分,那么只需要调用对应form的reset()方法就足够了,它会自动把textarea恢复到页面加载时的初始值(也就是<textarea>标签之间的默认文本)。
比如如果你的title和description textarea在#myForm里,那只需要保留:
$('#cleardata').click(function(){ $('#myForm')[0].reset(); // 其他独立表单的重置调用(如果需要的话) $('#codnumbering')[0].reset(); $('#newtitle')[0].reset(); $('#newdesc')[0].reset(); $('#company_id')[0].reset(); $('#location_id')[0].reset(); });
不需要单独处理textarea,form的reset会自动搞定所有内部表单元素。
情况2:textarea不在任何form内部
如果你的textarea是独立于form之外的,那只能通过设置val()来清空或者恢复初始值:
$('#cleardata').click(function(){ // 先处理其他表单的重置 $('#myForm')[0].reset(); $('#codnumbering')[0].reset(); $('#newtitle')[0].reset(); $('#newdesc')[0].reset(); $('#company_id')[0].reset(); $('#location_id')[0].reset(); // 清空textarea(或者设置为你需要的初始值) $('textarea[name=title]').val(""); $('textarea[name=description]').val(""); });
如果这时候val("")还是没生效,可以检查这几点:
- 确认textarea的
name属性确实是title和description,选择器没有写错 - 有没有其他JS代码监听了textarea的
input/change事件,强制覆盖了值 - 页面是否存在多个同名textarea,导致选择器选中了错误的元素
简化代码的小建议
你当前的代码有冗余无效的部分,比如同时调用了textarea的reset()(无效)和val(""),可以完全去掉那些无效的textarea.reset()调用,只保留有效的逻辑。另外建议打开浏览器开发者工具(F12)查看控制台,报错信息能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Khazlie Nemuel Lim
相关产品推荐
相关产品推荐

