【问题标题】:textarea not changing after inserting text插入文本后textarea没有改变
【发布时间】:2018-12-14 18:22:54
【问题描述】:

我有一个功能可以在达到 25 个字符时更改 textarea 的高度,并且在您编写文本时效果很好。

问题是,我需要一些预定义的回复,并且我在插入文本的模式上执行此操作,但该函数没有检测到并且不会调整大小。如果您插入文本然后写一个字母,它会扩展。

我的功能:

adjust() {

  let ionTextarea = document.getElementById('myInput');
  let textarea = ionTextarea.getElementsByTagName('textarea')[0];
  if (textarea) {
    if (textarea.value.length > 25) {
      textarea.style.overflow = 'scroll';
      textarea.style.height = '200px';
    } else {
  textarea.style.height = '20px';
}
}return;}

textarea 在两种情况下都返回相同的数据:写入和插入文本(因此样式应该可以工作),但在插入时它不会改变。

我尝试使用 (ionChange)="", (keyup)=""... 但不起作用。

<ion-textarea id="myInput" #chat_input placeholder="Mensaje" [(ngModel)]="editorMsg" rows="1" (ionFocus)="scrollToBottom()" (ionChange)="adjust()"></ion-textarea>

有人可以帮我吗?谢谢

Ps:我用的是离子框架

关闭popover时发送数据:

close(item) {
  let data = item;
  this.viewCtrl.dismiss(data);
}

用数据填充textarea(并调用resize函数):

popover.onDidDismiss(data => {
  this.editorMsg = data;
  this.adjust();
})

【问题讨论】:

  • 在插入文本的代码中添加对adjust 的调用。没有可以使用的简单事件,但由于您通过代码更改文本,您也知道何时调用adjust:那么就这样做吧。
  • 这是一个 hack,但也许(它在不同的上下文中对我有用)在您手动设置这些内容之后,您可以使用 sendkeys 发送一个空格和一个退格键,然后它会知道发生了一些变化

标签: javascript css typescript ionic-framework


【解决方案1】:

使用这个:

HTML:

<ion-textarea id="myInput" #chat_input placeholder="Mensaje" [(ngModel)]="editorMsg" rows="1" (ionFocus)="scrollToBottom()" (ionChange)="adjust()"></ion-textarea>

CSS:

#myInput {
    width: calc(100% - 10px);
    border: 0;
    border-radius: 0;
    background: transparent;
}

TS:

@ViewChild('myInput') myInput: ElementRef;


adjust() {
//let textarea: any = event.target;
let ionTextarea = document.getElementById('myInput');
let textarea = ionTextarea.getElementsByTagName('textarea')[0];

console.log(textarea);

if (textarea) {
  if (textarea.value.length > 25) {
    textarea.style.overflow = 'scroll';
    this.myInput.nativeElement.style.height = '200px';
  } else {
    this.myInput.nativeElement.style.height = '20px';
  }
}
return;}                

动态地和实时地改变(更好的方法),请执行以下操作:

HTML:

<textarea #myInput id="myInput" rows="1" maxLength="500" (keyup)="resize()" [(ngModel)]="myStuff"></textarea>

CSS:

#myInput {
    width: calc(100% - 10px);
    border: 0;
    border-radius: 0;
    background: transparent;
}           

TS:

@ViewChild('myInput') myInput: ElementRef;

resize() {
    this.myInput.nativeElement.style.height = this.myInput.nativeElement.scrollHeight + 'px';
}

更多信息请阅读this

【讨论】:

  • 感谢您的回答,但仍然无法正常工作。就好像它没有检测到文本区域的变化。当你写文本时它确实有效,但当我从弹出框插入它时它不起作用...... :(
  • @Daniel 你是如何从弹出框插入的?
  • @Daniel 将 [(ngModel)] 更改为 [ngModel]
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2010-10-31
  • 2017-01-16
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
相关资源
最近更新 更多