需要有关自定义文本区域最大长度功能的建议
Need suggestion regarding customizing textarea max length function
>我正在使用一个限制文本区域长度的函数。虽然函数表现良好,但我想问一下我是否以正确的方式调用函数?
在这里
<h:inputTextarea id="questionInputTextArea"
value="#{faqAddUpdate.question}"
cols="50"
rows="3"
disabled="#{faqAddUpdate.buttonState}"
onkeypress="limitTextArea(this, 400)"
style="overflow: auto;">
<f:validateLength maximum="200" />
</h:inputTextarea>
这是函数
function limitTextArea(element, limit) {
var $textArea = $(element); //casting to jQuery so we can use jQuery functions on it
($textArea).keypress(function(event){
if (event.which < 0x20) {
// e.which < 0x20, then it's not a printable character
// e.which === 0 - Not a character
return; // Do nothing
}
if ($textArea.val().length == limit) {
event.preventDefault();
} else if ($textArea.val().length > limit) {
// Maximum exceeded
$textArea.val() = $textArea.val().substr(0, limit);
}
}); //end of keypress
} //end of function()
让我感到困惑的是,我在我的jsf代码中使用onkeypress,并且在函数中我也说($textArea(.keypress(function(event((。如何优化此功能?还是我做得对?
谢谢
每次按下某个键时,您都会附加一个新的按键事件侦听器。这是没有道理的。您需要直接在属性中指定它onkeypress
或者在文档准备就绪后通过 jQuery 手段附加它。此外,对函数val()
赋值毫无意义,您需要将新值作为其参数传递。这不可能是"表现良好"。最后,我还建议使用 keyup
而不是 keypress
,以便仅在更新 textarea 的值后调用该函数,从而导致 limit 函数的行为更加理智。这样,您也不需要检查不可打印的字符范围。
总而言之,它可以看起来像这样:
function limitTextArea(element, limit) {
var $textArea = $(element);
if ($textArea.val().length > limit) {
$textArea.val($textArea.val().substr(0, limit));
}
}
要注册为
<h:inputTextarea ... onkeyup="limitTextArea(this, 400)" />
如果你真的需要通过jQuery keyup()
函数附加它,那么你必须自己在函数中指定限制。
例如
<h:inputTextarea ... styleClass="limit" />
跟
$("textarea.limit").keyup(function() {
var $textarea = $(this);
var limit = 400;
if ($textarea.val().length > limit) {
$textarea.val($textarea.val().substr(0, limit));
}
});
(您在$(document).ready(function() {...})
或$(function() {...});
期间执行(
或者,您可以将限制指定为类名的一部分,并相应地提取它:
<h:inputTextarea ... styleClass="limit_400" />
用这样的东西
$("textarea[class*=limit_]").each(function(i, textarea) {
var classNames = textarea.className.split(' ');
var limit = 0;
for (var i = 0; i < classNames.length; i++) {
if (classNames[i].indexOf("limit_") == 0) {
limit = parseInt(classNames[i].split("_")[1]);
break;
}
}
if (limit) {
$(textarea).keyup(function() {
var $textarea = $(this);
if ($textarea.val().length > limit) {
$textarea.val($textarea.val().substr(0, limit));
}
});
}
});
顺便说一下,400
的限制与您在服务器端<f:validateLength>
验证器中的限制不匹配。
相关文章:
- 谷歌电子表格的自定义xml解析功能
- 为什么获胜'我的自定义功能工作
- 自定义HTML5视频控件-退出按钮不会启动全屏切换功能
- 如何通过悬停或点击谷歌电子表格中的单元格来运行自定义功能
- 将自定义Google Sheets功能转换为附加组件
- 使用html 5对元素执行自定义表单验证功能
- 具有onclick功能的自定义复选框在实际切换复选框之前执行功能
- 如何使用自定义功能覆盖时间轴对象.js时间轴对象的_repaintMinorText
- CKEditor-自定义单词或短语插入功能
- 通过单向绑定的过滤功能提高自定义角度下拉菜单中的角度性能
- 角度:ui选择.具有“刷新”功能的自定义标记
- 从对象旋转对象.带有自定义动画功能的trix.setrotationfromleuler
- 在PhpStorm中创建自定义语言,扩展所有html语言功能
- "键未定义”;在AngularJS'的自定义筛选功能
- Wordpress自定义程序具有页面编辑功能
- 自定义滑块-寻找额外功能的指导
- 通过自定义JS功能激活Sencha Touch选项卡
- 使用Ryan Fait的“自定义表单元素”时的“全选”功能
- 如何在初始功能之外以适当的 AMD 方式使用自定义 Dojo 模块
- 自定义打印功能,打印内容未显示在第一个事件触发器上