相关疑难解决方法(0)

你能在不使用 document.write() 的情况下销毁文档元素和事件监听器吗?

在下面的例子中:

  • 如果您右键单击该文档,它会告诉您它正在收听。
  • 如果您单击 m1,它将替换文档元素,但右键单击该文档仍会通知您它正在侦听。您必须在顶部附近单击鼠标右键,因为该文档没有内容。
  • 如果您单击 m2,它将覆盖文档内容,并且在顶部附近单击鼠标右键不再执行任何操作。检查开发工具中的文档可验证事件处理程序是否已消失。
  • 按下一个按钮后,您必须再次“运行代码片段”以尝试下一个,因为此演示具有破坏性。

有了这些信息。是否有一种不同的方法可以销毁文档并将其替换为新文档,从而在不使用函数的情况下销毁事件处理程序document.write()

document.write()容易出错,“强烈不鼓励”使用它,但我仍然希望能够销毁文档及其事件侦听器。

document.addEventListener('contextmenu', function (e) {
  alert('still listening');
  e.preventDefault();
})

function m1() {
  var doc = document.implementation.createHTMLDocument();
  document.replaceChild(
    document.importNode(doc.documentElement, true),
    document.documentElement
  );
}
function m2() {
  document.close();
  document.write('<html></html>');
}
Run Code Online (Sandbox Code Playgroud)
<button onclick="m1()">m1</button>
<button onclick="m2()">m2</button>
Run Code Online (Sandbox Code Playgroud)

需要明确的是,按钮/函数“m1”未能实现我的目标,因为尽管替换了文档元素,但出于某种原因保留了前一个文档元素的事件处理程序。我想实现 m2 实现的目标,但不使用document.write并且document.close不推荐使用。

附录:

这个问题是为了更好地理解语言和实现它们的引擎的限制。请不要尝试在字里行间阅读或解决某些替代目标。这只是一个事情是否可能的问题。

我不需要知道如何删除事件侦听器或管理事件侦听器,或删除文档的所有子元素。我想知道是否有可能销毁文档元素本身,不留下任何<html>标签,也不留下任何事件侦听器。这是可能的,document.write()但我只是想知道是否有其他方法可以实现这个确切的目标,而不是任何其他假设的目标。

html javascript document.write

5
推荐指数
1
解决办法
371
查看次数

JS eventListener点击消失

我创造了简单的fidlle

var cnt = 1;
function add() {
    var root = document.getElementById('root')    
    root.innerHTML += '<br /><a id= "a_' +cnt + '" href="#">click</a>'
    var a = document.getElementById("a_"+cnt)
    a.addEventListener('click', function(event) {
        alert('click:a_'+cnt)
    })
    cnt++
}
Run Code Online (Sandbox Code Playgroud)

添加新链接后单击"添加"按钮,单击此链接后会出现警报.

当使用"添加"按钮添加更多链接时,只有最后一个链接有效(其他链接根据开发工具没有单击事件侦听器).

为什么只有最后一个链接工作,如何使所有链接工作?

javascript

4
推荐指数
1
解决办法
1127
查看次数

如何删除$(document).on点击事件?

这是添加事件的代码

   $(document).on({
      click: function() {
        $(this).hide();
        $('#form_name').removeClass('hide');
        $('#form_template_name')
          .attr('placeholder', $(this).text())
          .focus();
      }         
    }, '.form-template-name');
Run Code Online (Sandbox Code Playgroud)

对于某些情况,我不希望触发此事件.所以我尝试的是

$('.form-template-name').off();
$('.form-template-name').unbind();
Run Code Online (Sandbox Code Playgroud)

但似乎没有任何效果.我错过了什么吗?

javascript jquery

3
推荐指数
1
解决办法
6870
查看次数

删除元素是否也会删除其事件侦听器?

如果您还删除了元素,则删除与项目关联的事件removeChild()?即使用简单的项目删除项目this.innerHTML =''?这同样适用于与此类内联元素关联的事件<div onclick="/*this event*/"> </div>?提前致谢.

html javascript

2
推荐指数
2
解决办法
4065
查看次数

标签 统计

javascript ×4

html ×2

document.write ×1

jquery ×1