Javascript 无法调用在同一父函数(DOM)中声明的函数
问题解决了。它与函数无关,只是CSS优先级问题。 我在分配给window.onload的匿名函数中声明了一个名为alternateTableColor()的函数。此功能可更改网页上表格的颜色。当它在没有嵌套到任何其他函数的情况下被调用时,它可以正常工作。但是当它嵌套在同一环境中声明的另一个函数中时,它就不起作用了。你能帮忙吗Javascript 无法调用在同一父函数(DOM)中声明的函数,javascript,dom,Javascript,Dom,问题解决了。它与函数无关,只是CSS优先级问题。 我在分配给window.onload的匿名函数中声明了一个名为alternateTableColor()的函数。此功能可更改网页上表格的颜色。当它在没有嵌套到任何其他函数的情况下被调用时,它可以正常工作。但是当它嵌套在同一环境中声明的另一个函数中时,它就不起作用了。你能帮忙吗 函数my$(id){ 返回文档.getElementById(id); } 函数deleteTr(oTr){ oTr.parentNode.removeChild(oTr
函数my$(id){
返回文档.getElementById(id);
}
函数deleteTr(oTr){
oTr.parentNode.removeChild(oTr);
}
设currentId=2;
让oTable=document.getElementsByTagName('table')[0];
设aAs=oTable.tBodies[0].getElementsByTagName('a');
函数alternateTableColor(){
for(设i=0;i
Javascript按函数作用域变量
function a() {
var b = 1;
function c() {
}
}
// b is undefined
// c is also undefined
请注意,function c(){}
相当于var c=function(){};
function a () {
function b() {
console.log('b');
}
function c() {
console.log('c');
b();
}
c();
}
a(); // prints c then b
您可以将函数调用为您的有意位置
window.onload = function() {
let oTable = document.getElementsByTagName('table')[0];
window.alternateTableColor = function(){
for (let i = 0; i < oTable.tBodies[0].rows.length; i++) {
if(i % 2) {
oTable.tBodies[0].rows[i].style.backgroundColor = 'lightgrey';
} else {
oTable.tBodies[0].rows[i].style.backgroundColor = '';
}
}
}
alternateTableColor(); // it works here
let oBtn = document.getElementById('reset-color');
oBtn.onclick = function(){;
console.log('testing'); // console.log successfully
alternateTableColor(); // you can call!!!!
}
}
window.onload=function(){
让oTable=document.getElementsByTagName('table')[0];
window.alternateTableColor=函数(){
for(设i=0;i
这是JavaScript的词法范围。
您可以研究此添加的HTML代码。感谢您的点名。我添加了为表着色的其他代码。如果我重置,颜色不会返回。我重新发布了整个脚本。抱歉,我试图缩短代码,但留下了一些痕迹。谢谢,问题现在可以重现:)不幸的是,我认为这归结为键入错误。请检查您的控制台:在页面加载时,您将看到
uncaughttypeerror:无法将属性'onclick'设置为null
指向行my$('clear-color').onclick=alternateTableColor;
。但是没有ID为clear color
的元素;该按钮的ID为reset color
。如果解决了这个问题,它就会按预期工作。我不认为是这样。代码更像这样:函数b()和函数c()都在a()中声明,但c()不能调用b()成功。alternateTableColor
在OP的代码中正确地定义了范围。我的观点是,在c中它可以成功地调用b-顺序不重要。哪怕重新阅读上面的评论都是我如何理解你的问题的。也许如果你重新表述这个问题,你会得到更好的答案。我知道词汇范围是如何工作的…Which正是我提出这个问题的原因,因为它在这里不起作用。@CarolJin触发器onClick处理程序的上下文是window。但是alternateTableColor的上下文是onload处理程序的this。所以您要绑定(this)或定义window上下文