javascript - 使用 .off() 删除事件处理程序的 jQuery 问题

标签 javascript jquery event-handling

我尝试使用 .off() 删除事件处理程序,但它不起作用。

我想从某个输入中删除所有事件处理程序:

<input type="file" id="file_upload" name="file_upload" size="50" />

这是我尝试过的:

$('#form').on('keyup change', ':input', function() {
    registerChange();
});
$('#form input[name=file_upload]').off();
$('#file_upload').off();

最佳答案

您可以为文件上传按钮使用一个not选择器

$('#form').on('keyup change', 'input:not([name=file_upload])',  function() {
  registerChange($(this).val());
});

function registerChange(value) {
  // notice that typing into the upload textbox does not log anything to the console
  console.log(value);
}

$('#form').on('click', 'input[name=file_upload]', function () {
  alert('In Click Event Handler, Now Removing Myself');
  // here is how you can remove an event handler
  $('#form').off('click', 'input[name=file_upload]');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form id="form">
  <input type="text" />
  <input type="text" />
  <!-- just changeing this to a textbox for demo -->
  <input type="text" id="file_upload" name="file_upload" size="50" value="Choose file" />
</form>

打开控制台窗口(CTRL+SHIFT+J 在 chrome 中)并在所有文本框中键入。请注意前 2 个文本框是如何写入控制台的。另请注意,最后一个文本框定义了一个点击处理程序,然后将其删除,这就是警报只显示一次的原因。

关于javascript - 使用 .off() 删除事件处理程序的 jQuery 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29318187/

相关文章:

javascript - 无法使用 webpack-dev-server 获取/

javascript - 审查员无法批准我的 Tizen 应用程序,因为他们无法在我的应用程序播放器中播放 HLS

javascript - Jquery:ajax循环

javascript - PHP Mailer,在发送电子邮件时阻止整个服务器执行

javascript - 当我从表单中显示/隐藏一些 HTML 时,CHANGE 事件阻止 SUBMIT 事件

javascript - 粘贴事件修改内容并在原处返回

javascript - 将车向前移动至旋转方向

javascript - 函数不会在分离函数中触发

GWT : Celltable Multiselection , MouseDown 事件?

C# 取消 Windows 关机