因此,作为记录,如果我将在您的问题中看到的代码准确地粘贴到文件中并将其保存为 test.html 或其他内容,然后在浏览器中打开它就可以了。我现在看到的代码是:
<input type="Radio" name="text" onClick="black();">B<br/>
<input type="Radio" name="text" onClick="white();">W
<textarea id="text" placeholder="Explanation (Optional)"></textarea>
<script>
function black() {
document.getElementById("text").style.color="#000000";
}
function white() {
document.getElementById("text").style.color="#ffffff";
}
</script>
所以我想在你的真实代码中,这些函数声明实际上是在closure 中。在这种情况下,函数将在事件处理程序调用它们的范围内未定义。例如,当单击单选按钮时,以下内容会在控制台中引发未定义的错误,因为 white 和 black 超出范围。
<input type="Radio" name="text" onClick="black();">B<br/>
<input type="Radio" name="text" onClick="white();">W
<textarea id="text" placeholder="Explanation (Optional)"></textarea>
<script>
(function() {
function black() {
document.getElementById("text").style.color="#000000";
}
function white() {
document.getElementById("text").style.color="#ffffff";
}
})()
</script>
您可以通过在window 上声明一个全局变量并将值分配给适当的函数来确保这些函数可用于处理程序。例如:
<input type="Radio" name="text" onClick="black();">B<br/>
<input type="Radio" name="text" onClick="white();">W
<textarea id="text" placeholder="Explanation (Optional)"></textarea>
<script>
(function() {
window.black = function() {
document.getElementById("text").style.color="#000000";
}
window.white = function() {
document.getElementById("text").style.color="#ffffff";
}
})()
</script>
这将是确保您的函数在全局范围内可用的显式方法,但您也可以简单地从变量名前面删除window.。
另外,请理解,如果您要在闭包中声明这些变量(如 var black = function() { ...),那么您将回到开始的地方,因为函数超出了点击处理程序的范围。
最后,这一切通常都很丑陋。在全局window 级别分配变量通常是一个坏主意,尤其是对于white 和black 这样的通用名称。它们很容易与代码中的另一个变量发生冲突。以下将是执行此类 IMO 的更好方法。
<input type="Radio" name="text" id="black-radio">B<br/>
<input type="Radio" name="text" id="white-radio">W
<textarea id="text" placeholder="Explanation (Optional)"></textarea>
<script>
(function() {
var black = function() {
document.getElementById("text").style.color="#000000";
}
var white = function() {
document.getElementById("text").style.color="#ffffff";
}
document.getElementById('black-radio').addEventListener('click', black);
document.getElementById('white-radio').addEventListener('click', white);
})()
</script>