In unserem ExtJs5.1.2 Projekt Linie mit Zeilenumbruch paßt wollen wir ein TextArea- haben, die die Zeile mit einem Zeilenvorschub bricht nach x Zeichen eingegeben.TextArea- die nach x Zeichen
z.B. Die Zeile sollte max. 5 Zeichen lang sein, wenn 12345 eingegeben wird, bleibt in einer Zeile und bei Eingabe von 6 steht eine neue Zeile mit 6 im Textfeld.
12345
6
So, wenn der Benutzer kontinuierlich Text eingibt, wird der Text autoamtically zu einer Leitungslänge von 5.
12345
67890
12345
6...
angepasst Ich versuchte es mit der folgenden erweitern von dem Text, aber es funktioniert nicht wie erwartet. Die Funktion adaptLines
formatiert den Wert entsprechend auf eine Zeilenlänge von 5, aber es wird nicht in den Textbereich selbst eingetragen.
Ext.define('LineAdaptTextField', {
extend: 'Ext.form.field.TextArea',
_removeNewLineRegEx: /\n/g,
_lineAdaptRegEx: /(.{1,5})/g,
// called when text is entered, but no effect of value in the textfield
processRawValue: function(value) {
value = this.callParent([value]);
var processed = this.adaptLines(value);
console.info('processRawValue("%s") to "%s"', value, processed);
return processed;
},
// never be called when entering text
transformRawValue: function(value) {
value = this.callParent([value]);
var transformed = this.adaptLines(value);
console.info('transformRawValue("%s") to "%s"', value, transformed);
return transformed;
},
// is called but no effect on the textfield
valueToRaw: function (value) {
value = this.callParent([value]);
var rawValue = this.adaptLines(value);
console.info('valueToRaw("%s") to "%s"', value, rawValue);
return rawValue;
},
// never be called when entering text
rawToValue: function (rawValue) {
rawValue = this.callParent([rawValue]);
var value = this.adaptLines(rawValue);
console.info('valueToRaw("%s") to "%s"', rawValue, value);
return value;
},
// add linefeed after 5 characters
adaptLines: function(value){
var noNewLines = value.replace(this._removeNewLineRegEx, '');
return noNewLines.replace(this._lineAdaptRegEx, '$1\n').replace(/\n$/, '');
}
});
Für das Problem dieser Fiddle sehen auszuprobieren.
Ich habe es versucht und es funktioniert, wie Sie ausdrückten, aber das Änderungsereignis wird nur ausgelöst, wenn der Text eingegeben wird beendet. So sieht der Benutzer, wenn er einen Schlüssel hält, dass er danach formatiert wird. Gibt es eine andere Möglichkeit, die Formatierung auszuführen, bevor der Text in der Textarea sichtbar ist? –
Sorry, ich glaube nicht, dass das möglich ist (nicht in meinem kleinen Wissen). Denn wenn der Benutzer einen Schlüssel hält, wird während dieser Zeit auch die Funktion "rawToValue" nicht aufgerufen. Nach meinem Verständnis können wir die Eingabe erst nach Eingabe des Benutzers und nicht während der Schlüsselhaltezeit verarbeiten. –