【问题标题】:Tab inside textarea element in Typescript/AngularTypescript / Angular中textarea元素内的选项卡
【发布时间】:2021-06-21 13:35:29
【问题描述】:

我在文本区域内的选项卡中找不到我的问题的解决方案。每次我使用点击按钮时,它都会跳转到另一个文本区域。现在我遇到了一个解决方案,但是,它是用 Javascript 编写的(我发现另一个是用 jQuery 编写的) - 但不幸的是我找不到 Typescript 的解决方案。

这是我现在得到的(用js写的):

    document.getElementById('textbox').addEventListener('keydown', function (e) {
       if (e.key == 'Tab') {
         e.preventDefault();
         var start = this.selectionStart;
         var end = this.selectionEnd;
         this.value = this.value.substring(0, start) + '\t' + this.value.substring(end);
         this.selectionStart = this.selectionEnd = start + 1;
       }
    });

        <textarea pInputTextarea tabindex="0" (keydown)="handleKeydown($event)" onFocus="this.select();" (input)="setOkayButtonMode()"
            [rows]="10" [cols]="75" maxlength="255">
        </textarea>

我真的找不到任何东西,而 Stackoverflow 是我的问题的最后一个停靠点。也许你们中的一个可以帮助我:)

非常感谢前面!!

好极了 朱利安

【问题讨论】:

  • 这能回答你的问题吗? Use tab to indent in textarea
  • 嘿哈伦,这是我从那里得到代码 sn-p 的。但不幸的是它没有回答我的问题:(
  • Angular 使用 @HostListener 代替 addEventListener。尽可能避免访问 TS 中的 DOM 元素通常被认为是“最佳实践”。这就是你要找的意思吗?
  • @daddygames 感谢您的回答-您能给我举一些 HostListener 的例子吗?有没有要添加的模块?
  • 我想到了一种没有 HostListener 的更简单的方法。希望我的回答对您有所帮助。

标签: javascript angular typescript tabs textarea


【解决方案1】:

Angular 提供了一个keydown 事件,可以在 HTML 元素上使用。将此添加到您的 &lt;textarea&gt; 元素并传递在 keydown 上触发的事件。

<textarea (keydown)="handleKeydown($event)"></textarea>

在组件的 TS 文件中,创建 handleKeydown 函数。这将接受 event 作为传入对象。 event.target 是对触发事件的元素的引用。在这种情况下,&lt;textarea&gt; 元素。

代码与 JS 大体相同,但不是使用this,而是使用event.target

handleKeydown(event:any) {
    if (event.key == 'Tab') {
        event.preventDefault();
        var start = event.target.selectionStart;
        var end = event.target.selectionEnd;
        event.target.value = event.target.value.substring(0, start) + '\t' + event.target.value.substring(end);
        event.target.selectionStart = event.target.selectionEnd = start + 1;
    }
}

【讨论】:

  • 太棒了!非常感谢。它有效 :-) 好好休息一天。
  • 抱歉再次询问。 handleKeydown 函数运行良好!选项卡终于在文本区域内,但它总是跳到下面的下一个按钮。你知道有什么解决办法吗? :-)
  • 有趣。我一直在尝试重新创建您的问题,但没有看到它。您可能需要使用相关的 HTML 代码更新您的问题,以帮助确定问题的原因。
  • 我已将 HTML 代码添加到我上面的问题描述中。它位于一个 div 标签和一个来自我公司的标签中 - 无法向您展示更多代码,但我希望它能让您更清楚地看到!
  • event.stopPropagation();那是丢失的。现在工作正常!!感谢您的帮助:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2019-03-08
相关资源
最近更新 更多