Удалить события в элементе HTML - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть 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?

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Вы можете выполнить итерацию jQuery._data(<DOM element>, 'events') и удалить как делегированные, так и не делегированные события

$("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>
0 голосов
/ 05 февраля 2019

Вы можете отменить привязку () вместо выключения ()

$('#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');
});


$('#clinicalNotesEditable').on("keyup keydown keypress", function() {
  console.log('Key pressed on textarea by ID');
  //I see this in the CONSOLE
});
$('#clinicalNotesEditable').unbind()
<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>
0 голосов
/ 05 февраля 2019

На основе порядка кода, который у вас есть здесь, если вы перегруппируете код следующим образом:

$('#clinicalNotesEditable').on("keyup keydown keypress", function() {
  console.log('Key pressed on textarea by ID');
  //keyup keydown and keypress events are removed
});
$('#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');
});

события нажатия клавиши keyup keydown удаляются, и вы будетесм. текст «Нажмите на текстовое поле по идентификатору» в консоли.Я не уверен, что это то, что вы пытаетесь достичь.Я запустил код и смог добавить текст в textarea.

...