javascript - 删除 HTML 元素上的事件

标签 javascript jquery dom-events

我有一个 textarea 元素。在这堆遗留代码的某个地方,我相信注册了一个事件,阻止我在文本区域中输入文本。我试过下面的代码。

$('#clinicalNotesEditable').off("keyup keydown keypress change blur");

$('#clinicalNotesEditable').on("click", function() {
  $(this).attr('disabled', false);
  $(this).attr('readonly', false);
  console.log('Click on textarea by ID');
  // I can see the CLICK event is captured.
});


$('#clinicalNotesEditable').on("keyup keydown keypress", function() {
  console.log('Key pressed on textarea by ID');
  // I do not see this message.
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="noteseditable" id="clinicalNotesEditable" style="width: 370px !important; vertical-align: middle; display: inline-block; -ms-overflow-y: scroll;" placeholder="click here to enter a note" rows="8"></textarea>

我唯一能想到的是我没有正确使用.off()。如何从 clinicalNotesEditable 元素中删除所有事件?

最佳答案

你可以迭代jQuery._data(<DOM element>, 'events')并删除委托(delegate)和非委托(delegate)事件

$("body").on('click', '#clinicalNotesEditable', function() {
  console.log('delegated');
});

$("body").on('click', function() {
  console.log('not delegated');
});

$('#clinicalNotesEditable').on("click", function() {
  $(this).attr('disabled', false);
  $(this).attr('readonly', false);
  console.log('Click on textarea by ID');
});


$('#clinicalNotesEditable').on("keyup keydown keypress", function() {
  console.log('Key pressed on textarea by ID');
  //I see this in the CONSOLE
});

var selector = '#clinicalNotesEditable';

$.each([$(window), $(document), $("*")], function(key, value) {
  $.each(value, function(k, v) {
    var event = $._data(v, "events");
    if (event !== undefined) {
      $.each(event, function(a, b) {
        if (b[0].selector === selector) {
          $(v).off(a, '**');
        } else {
          if ('#' + v.id === selector) {
            $(selector).off(a);
          }
        }
      });    
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<textarea class="noteseditable" id="clinicalNotesEditable" style="width: 370px !important; vertical-align: middle; display: inline-block; -ms-overflow-y: scroll;" placeholder="click here to enter a note" rows="8"></textarea>

关于javascript - 删除 HTML 元素上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523574/

相关文章:

javascript - onClick 在第一次点击时不起作用

javascript - 如何自动预选(不仅仅是设置值)billing_state下拉列表与shipping_state下拉列表相同

javascript - 如何在 Highcharts 中强制显示 x 轴标签?

javascript - 如何使用 UrlFetchApp() 获取图像信息?

javascript - "TV"背景容器内的响应式 youtube 视频?

javascript - 当使用 jQuery 单击父元素时,如何使子元素切换?

javascript - 为什么我的 .ogg 文件只能在本地播放?

javascript - Virtuemart 2.6.6 加入购物车后返回同一页面

javascript - 如果元素的不透明度=1 不工作

javascript - react 路由器: ignore hashchange