我对此代码没有任何问题,但我很好奇为什么下面的函数似乎需要在其名称中使用下划线。
function _clear()
{
document.getElementById("test").innerHTML = "";
}
函数_clear()仅在函数名称包含下划线时单击按钮后执行。
<button type="submit" onClick="_clear()">Clear</button>
答案 0 :(得分:2)
根据MDN,clear()是Document对象的一种方法,可以通过编写document.clear()
来调用它。但是,由于这种方法已被弃用,因此根本不应该调用它。实际上,在HTML5中,该方法不执行任何操作(请参阅HTML5 spec)。
因此,在实际从Document对象中删除此方法之前,可能会得出结论,如果用户定义的函数与Document的方法具有相同的名称,则存在潜在的冲突。也就是说,使用谷歌浏览器(版本49.0.2623.112米),以下代码运行正常:
var d = document;
d.g = d.getElementById;
function clear()
{
d.g("test").innerHTML = "";
}
var test = d.g("test");
test.onmouseover=clear;
请参阅demo
clear()和document.clear()之间不太可能存在冲突。我写了一个用户定义的函数,它使用与另一个文档方法相同的名称,代码运行完美;见here。
显然,当onclick事件属性被赋予用户定义的函数“clear()”时,clear()与document.clear()
相关联会产生某种混淆;请参阅here并阅读官方答复中的优秀解释。简而言之,问题归结为“...... Document对象位于Window对象(...)之前的作用域链中”(参见JavaScript: The Definitive Guide)。
如果由于某种原因你确定代码可以工作,那么这里是如何指定正确的上下文:
HTML:
<div id="test">a test to see if this will clear</div>
<button id="but" onclick="window.clear()">Clear</button>
因此,用户定义的函数实际上成为Window对象的一个方法,与window.open()之类的内置函数一起,允许代码执行;见here。
注意,发生点击事件时发生操作的最佳方法是将此行放在JavaScript代码中,并给出id为“but”的按钮:
but.addEventListener('click',clear);
请参阅demo。
答案 1 :(得分:0)
那是因为{{1}}是JavaScript中已存在的函数。您还可以将下划线添加到末尾或添加另一个c或执行任何操作以使该函数具有不同的名称。