首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何限制文本区中每行的字符数?

如何限制文本区中每行的字符数?
EN

Stack Overflow用户
提问于 2018-07-24 14:22:28
回答 5查看 3.9K关注 0票数 10

我有一个Ext JS TextArea。在这里,我希望将每行的字符限制在15个字符以内,并且总行数不应超过10个。

我在这里要做的是

代码语言:javascript
复制
function(){
    var myValue = this.getValue();
    var myValueData = myValue.split(/\r*\n/);
    myValueData.length = 10;    
}

理想情况下,它应该省略第10行之后的所有行,但并没有发生这种情况。另外,如何限制每行最多15个字符?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-28 03:01:51

你可以试一试,虽然不是很完美,但应该是可行的。

也许使用更改侦听器,覆盖组件上的setValue或setRawValue函数会更好。

https://fiddle.sencha.com/#view/editor&fiddle/2js1

代码语言:javascript
复制
   {
                xtype: 'textareafield',
                grow: true,
                name: 'message',
                fieldLabel: 'Message',
                anchor: '100%',
                listeners: {
                    change: function (cmp, newVal, oldVal) {
                        var arrayForEachLine = newVal.split(/\r\n|\r|\n/g);
                        var newVal = [];
                        Ext.Array.each(arrayForEachLine, function (line, index) {
                            if (line.length >= 10) {
                                offset = line;
                                while (offset.length > 0) {
                                    newVal.push(offset.substring(0, 10));
                                    offset = offset.substring(10);
                                }

                            } else {
                                newVal.push(line);
                            }
                            if (index === 10) return false;
                            if (newVal.length >= 10) {
                                newVal = newVal.slice(0, 10);
                                return false;
                            }
                        });
                        cmp.suspendEvent('change');
                        cmp.setValue(newVal.join('\n'));
                        cmp.resumeEvent('change');
                    }
                }
            }
票数 5
EN

Stack Overflow用户

发布于 2018-07-27 03:22:15

这可以通过使用change listener来实现。我已经创建了一个demo (fiddle)。请看一下小提琴,因为那里的代码很整洁,也有注释。请看下面我的更改监听器代码:

代码语言:javascript
复制
listeners: {
                change: function () { 
                    var myValue = Ext.getCmp('myField').getValue(); 
                    var lines = myValue.split("\n"); 
                    if (lines.length > 10) { 
                        alert("You've exceeded the 10 line limit!"); 
                        Ext.getCmp('myField').setValue(textAreaValue); 
                    } else { //if num of lines <= 10
                        for (var i = 0; i < lines.length; i++) { /
                            if (lines[i].length > 15) { /
                                alert("Length exceeded in line " + (i+1)); 
                                Ext.getCmp('myField').setValue(textAreaValue); 
                            } else if (lines[i].length <= 15 && i == lines.length - 1) { 
                                textAreaValue = myValue; 
                            }

                        }
                    }

                }
            }

如果此答案解决了您的问题,请将此答案标记为一个答案,因为这也将在将来帮助其他人。如果这个答案有任何错误,请在评论中让我知道。如果有什么问题,我很抱歉,因为我不是extjs专家。但我还是试过了。

票数 3
EN

Stack Overflow用户

发布于 2018-07-27 21:43:25

要限制文本区域的字符长度,可以使用以下属性maxlength。

代码语言:javascript
复制
<textarea maxlength="50">

截断截断字符串或数字

代码语言:javascript
复制
text_truncate = function(str, length, ending) {
if (length == null) {
  length = 100;
}
if (ending == null) {
  ending = '...';
}
if (str.length > length) {
  return str.substring(0, length - ending.length) + ending;
} else {
  return str;
}
};

你可以这样调用它

代码语言:javascript
复制
text_truncate(yourContentToTruncate,15);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51491767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档