我目前正在学习JavaScript,并且当用户点击将输出鼠标点击坐标的文档时,我能够编写一个事件处理程序。
然而我遇到的问题是它只会一次。我认为如果事件处理程序正在等待“点击”,如果它有一个,它将唤起函数getCords。
var x = document;
x.addEventListener("click", getCords, false);
function getCords(event){
x.writeln(event.clientX, ",", event.clientY)
}
答案 0 :(得分:4)
在MDN上:
document.writeln
与document.write
相同,但添加换行符。
所以,let's look at document.write
:
写入已经加载但未调用的文档
document.open()
将自动执行document.open调用。一旦 你写完了,建议你拨打document.close()
, 告诉浏览器完成加载页面。你写的文字是 解析成文档的结构模型。在上面的例子中, h1元素成为文档中的节点。
这是什么意思?
这意味着您的代码真的如下所示:
var x = document;
x.addEventListener("click", getCords, false);
function getCords(event){
x.open(); // <-------- new
x.writeln(event.clientX, ",", event.clientY)
}
第一个要做的修复(也会使页面显示为永久“加载”)是按照建议添加document.close()
调用:
var x = document;
x.addEventListener("click", getCords, false);
function getCords(event){
x.open(); // <-------- new
x.writeln(event.clientX, ",", event.clientY)
x.close(); // <-------- new
}
现在更清楚的是 - 我们在这里创建一个新文档流。您现有的文件内容被覆盖;事件处理程序不再存在。
事实上,the DOM standard says this explicitly about open
:
打开文档流进行编写。 如果目标中存在文档,则此方法会清除它。
并且您的新文档不包含您的脚本,因此即使在回调中重新分配事件处理程序也行不通。
最好不要使用document.write
(和document.writeln
);将文本指定为某些div
或span
节点的内容。