我是 jQuery 新手,所以我打赌我做错了什么,但我不明白为什么这个事件没有触发。我有一个 textarea 元素,由于正在接受数据的应用程序,需要在提交之前删除所有分隔符。我试图在文本区域失去焦点时进行清理,因此采用模糊方法。不幸的是,它似乎没有在我的表单中触发。奇怪的部分是相同的代码在 jsFiddle 中工作,但仅在最初失去焦点时才工作。对文本区域的所有后续更改和失去焦点都不会触发该事件。我还在另一个答案中读到delegate()
or .on()
可能需要使用方法,但我不是 100% 确定如何正确执行此操作。(jQuery 模糊() 不起作用? https://stackoverflow.com/questions/8290180/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/ 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 和 stack Overflow 之间正确使用 valHooks 的信息。如果有人能就我最初的问题阐明这一点,我将不胜感激。