【发布时间】:2016-11-08 17:06:02
【问题描述】:
在达到最大行数后,我目前很难按 Enter 键来停止在我的文本区域中创建新行。行数在我制作的组件中作为参数传递。我的 textarea 是一个 Redactor 编辑器,新行由换行符分隔。
我有一个计算出的 observable,它根据文本中的换行数确定行数,并返回正确的值:
self.numberOfRows = ko.computed(function () {
return self.value().split(/<br>/).length;
}, this);
在我的 Redactor 设置中,我有一个 keydownCallback 函数,该函数将行数与最大行数进行比较,并且在达到或超过最大值时应该防止 enter 键创建新行:
keydownCallback: function (e) {
if (e.keyCode > 48 || e.keyCode === 32) {
if (self.remainingCharacters() <= 0) {
e.preventDefault();
}
} else if (e.keyCode === 13) {
if (self.maxRows != null) {
if (self.numberOfRows() >= self.maxRows) {
e.preventDefault();
}
}
}
},
回调函数的第一部分限制了字符数并且工作正常,但是回车键仍然创建新行。我也试过“return false;”而不是 preventDefault 我也尝试过在 preventDefault 之前 stopPropagation,但没有运气。我不关心用户将值粘贴到 textarea 中,也不关心自动换行。有什么建议吗?
单独的回调:
enterCallback: function(e) {
if (self.maxRows != null) {
if (self.numberOfRows() >= self.maxRows) {
return false;
}
}
},
keydownCallback: function (e) {
if (e.keyCode > 48 || e.keyCode === 32) {
if (self.remainingCharacters() <= 0) {
e.preventDefault();
}
}
},
【问题讨论】:
-
分离成单独的回调,现在使用回车回车,当达到或超过最大行时仍然进入新行。 enter 回调中的 if 语句被正确执行。当我按下回车键并达到最大行数时,我能够在控制台中显示一条消息。
标签: javascript knockout.js redactor