我是 jQuery 新手,所以我敢打赌我做错了什么,但我无法弄清楚为什么这个事件没有触发。由于正在接受数据的应用程序,我有一个 textarea 元素需要在提交之前删除任何中断空格。当它失去焦点时,我试图在文本区域中进行清理,因此使用模糊方法。不幸的是,它似乎没有在我的表单中触发。奇怪的部分是相同的代码在 jsFiddle 中工作,但只是在最初失去焦点时。对 textarea 的所有后续更改和失去焦点都不会触发该事件。我还在另一个答案中读到可能需要使用delegate()
or.on()
方法,但我不确定如何正确执行此操作。(jQuery blur() 不起作用?)代码如下,任何建议都会有所帮助。
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#comments").blur(function() {
var txt = $("#comments").html();
txt = txt.replace(/\n/g, ' ');
txt = txt.replace(/\s{3,}/g, ' ');
$("#comments").html($.trim(txt));
});
//$("#comments").trigger("blur"); added this to help fix the issue, but it didn't make a difference
});
</script>
HTML:
<textarea name="comments" id="comments" style="width: 100%; height:200px"></textarea>
这是 jsFiddle 链接:http: //jsfiddle.net/75JF6/17/
编辑:感谢所有快速响应。我已经查看了每个人的答案并听取了您的建议。我已经完成了 95%,但是仍然存在一个问题。切换到.val()
方法而不是.html()
执行此操作的更好方法,但根据 jQuery API,在textarea
解析回车符的 s 上调用此方法时存在以下问题。问题是我需要确保将它们删除以验证该字段。
注意:目前,
.val()
在 textarea 元素上使用会从浏览器报告的值中去除回车符。然而,当这个值通过 XHR 发送到服务器时,会保留回车(或由不包含在原始值中的浏览器添加)。可以使用 valHook 来解决此问题,如下所示:
$.valHooks.textarea = {
get: function( elem ) {
return elem.value.replace( /\r?\n/g, "\r\n" );
}
};
正如我之前提到的,我是 jQuery 新手,找不到太多关于如何在 google 和堆栈溢出之间正确使用 valHooks 的信息。如果有人可以就我最初的问题对此有所了解,将不胜感激。