在textarea元素Angularjs中触发oncontextmenu事件

Posted

技术标签:

【中文标题】在textarea元素Angularjs中触发oncontextmenu事件【英文标题】:Trigger oncontextmenu event in textarea element Angularjs 【发布时间】:2017-06-14 09:24:24 【问题描述】:

我正在使用来自 here 的 Angularjs 打包库。它工作正常,但我发现当我点击它时我无法编辑 textarea 内容。在花了一些时间之后,当我右键单击 textarea 元素时,我能够使其可编辑,但如果我单击它仍然无法工作。因此,现在我尝试在单击 textarea 时手动触发右键单击事件,以便使元素可编辑。

这是代码

<packery ng-model="files" gutter="12" style="border:0px solid black;width:710px;" >

       <packery-object ng-init="user_text='Write something ...';" class="large text sans-font medium-font box-border-raduis">
             <div class="hidden-overflow sans-font medium-font" style="clear: both; border: 0px solid purple; 
                         background: white; border-top: 6px solid #00a2d3; padding: 10px; "> 
                    <textarea id="Mytextarea" contenteditable="true"  style="margin: 0px;" 

                            ng-click="click();"
                            >user_text
                     </textarea> 
             </div>
       </packery-object>
</packery>

这是试图触发 oncontextmenu(右键单击)事件的 click() 函数:

 $scope.click = function()
          console.log('clicked!');
          var e = angular.element(document.querySelector('#Mytextarea'));
          console.log(e);
          angular.element(e).triggerHandler("oncontextmenu");

        ;

但这个解决方案似乎不起作用。我究竟做错了什么?

【问题讨论】:

我认为 fiddle 对那些非常熟悉 Angular 但对 packery 不太熟悉的人来说真的很有帮助。 【参考方案1】:

我肯定会建议找出阻止您专注于 textarea 的原因,因为单击它并聚焦是默认行为,但是,您可以尝试使用 'for ' 属性是 textarea 的 id 例如:

<label for="Mytextarea" class="hidden-overflow sans-font medium-font" ...>
        Textarea here
</label>

我通常不会接受这一点,因为 label 是一个内联元素,而 textarea 是一个块元素,但在你的情况下它可能会对你有所帮助。

为了跟踪阻止您集中注意力的原因,我建议右键单击 textarea > 检查元素,然后在 Chrome 开发工具的元素选项卡上查找“事件侦听器”选项卡(应该在窗口)应该能够看到已绑定到该元素的所有侦听器,并可能帮助您跟踪问题的根源。

【讨论】:

以上是关于在textarea元素Angularjs中触发oncontextmenu事件的主要内容,如果未能解决你的问题,请参考以下文章

angularjs textarea 剩余字数统计

AngularJS 无法设置值 textarea

AngularJS模板中的元素仍未触发jQuery委托事件

AngularJS禁用密钥的方法

使用 Laravel 在 AngularJS 的 textarea 中追加文本

如何使用angularjs在html中获取textarea行数?