【发布时间】:2013-09-09 17:10:29
【问题描述】:
我是 jQuery 新手,所以我敢打赌我做错了什么,但我不知道为什么这个事件没有触发。由于正在接受数据的应用程序,我有一个 textarea 元素需要在提交之前删除任何中断空格。当它失去焦点时,我试图在文本区域中进行清理,因此使用模糊方法。不幸的是,它似乎没有在我的表单中触发。奇怪的部分是相同的代码在 jsFiddle 中工作,但只是在最初失去焦点时。对 textarea 的所有后续更改和失去焦点都不会触发该事件。我还在另一个答案中读到可能需要使用 delegate() 或 .on() 方法,但我不能 100% 确定如何正确执行此操作。(jQuery blur() not working?)代码如下,任何建议都会有所帮助.
<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,在解析回车符的textareas 上调用此方法时存在以下问题。问题是我需要确保将它们删除以验证该字段。
注意:目前,在 textarea 元素上使用
.val()会从浏览器报告的值中去除回车符。然而,当这个值通过 XHR 发送到服务器时,会保留回车(或由不包含在原始值中的浏览器添加)。可以使用 valHook 来解决此问题,如下所示:
$.valHooks.textarea = {
get: function( elem ) {
return elem.value.replace( /\r?\n/g, "\r\n" );
}
};
正如我之前提到的,我是 jQuery 新手,找不到太多关于如何在 google 和堆栈溢出之间正确使用 valHooks 的信息。如果有人能就我最初的问题对此有所了解,将不胜感激。
【问题讨论】:
-
事件正在触发,但您的正则表达式错误。
-
jsfiddle.net/75JF6/24 完美运行。
-
以后,请确保在您的事件中使用 alert('some message') 或 console.log('some message') 以确保它正在触发。当您的问题与正则表达式有关时,这可以避免您错误地询问有关事件的问题。
-
我在下面对某人的回答添加了评论,它在 IE10 中不起作用
标签: javascript jquery html forms textarea