【问题标题】:Textarea with max number of lines and max characters per line具有最大行数和每行最大字符的文本区域
【发布时间】:2018-10-02 17:01:20
【问题描述】:

我面临一个问题,我需要开发textarea,其中行数必须为 10,每行最大字符 - 15。一旦输入第 16 个字符,它必须移动到下一行。

我们也不能输入超过 10 行。这就是我想要做的。

Onchange 监听器。我试图限制用户输入 15 个字符,但它没有发生。下面是我的代码。任何建议都会有所帮助。

Ext.create('Ext.form.FormPanel', {
    title      : 'Sample TextArea',
    width      : 400,
    bodyPadding: 10,
    renderTo   : Ext.getBody(),
    items: [{
        xtype     : 'textareafield',
        grow      : true,
        name      : 'message',
        fieldLabel: 'Message',
        anchor    : '100%',
        listeners : {
            change : function(val,b){
                debugger;
                var text = val.getValue();
                var lines = text.split(/(\r\n|\n|\r)/gm); 
                 for (var i = 0; i < lines.length; i++) {
                    if (lines[i].length > 10) {
                        lines[i] = lines[i].substring(0, 10);
                    }
                }
                     text = lines.join('');
                //alert(val.value)
            }
        }
    }]
});

在这里,我询问了每行的字符数,行数是文本区域。

【问题讨论】:

标签: javascript extjs extjs6


【解决方案1】:

作为免责声明,这种类型的解决方案(关于更改侦听器)容易出现复杂的问题:输入内容的方式有很多,例如将内容拖放到文本字段中、复制/粘贴等。但在这里是一些 cmets 的某种可行的解决方案:

Ext.create('Ext.form.FormPanel', {
    title      : 'Sample TextArea',
    width      : 400,
    bodyPadding: 10,
    renderTo   : Ext.getBody(),
    items: [{
        xtype     : 'textareafield',
        grow      : true,
        name      : 'message',
        fieldLabel: 'Message',
        anchor    : '100%',
        numLines : 15,
        numCharsPerLine: 10,
        listeners : {
            change : function(val,b){
                var text = val.getValue();
                //console.log(text);
                var lines = text.split(/\r\n|\n|\r/); 
                 for (var i = 0; i < lines.length; i++) {
                    if (lines[i].length > this.numCharsPerLine) {
                        lines[i] = lines[i].substring(0, this.numCharsPerLine);
                    }
                }
                if(lines.length < this.numLines && lines[lines.length-1].length == this.numCharsPerLine) lines[lines.length-1] += "\n" ;
                lines = lines.slice(0,this.numLines); // limit line number
                 text = lines.join('\n');
                 //console.log(text);
                 this.setRawValue(text)
                //alert(val.value)
            }
        }
    }]
});

【讨论】:

  • 感谢您的回答。这工作正常,但最后我的光标将转到第 16 行。 (行尾)让我知道我们是否可以限制这一点。如果我们不能也请告诉我。
  • @David 我在添加换行符之前添加了新检查。另外,我不确定您是需要 10 行,每行 15 个字符还是 15 行,每行 10 个字符,所以我创建了变量 numLines 和 numCharsPerLine 以便更容易控制/更改
猜你喜欢
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
相关资源
最近更新 更多