我有三个函数,它们是按照这个顺序触发的示例:
function editmatch(){
defaultstyling();
$('.all_cons').css({display: 'none'});
$('.confirm_button'+id).css({display: 'inline'});
storecontents();
isediting = true;
$(document).find("td[id^='hero_column"+id+"']").html('<input id="select_hero" type="text" name="select_hero">');
$(document).find("td[id^='result_column"+id+"']").html("<select name='winloss'><option value='Win'>Win</option><option value='Loss'>Loss</option></select>");
$(document).find("td[id^='gamemode_column"+id+"']").html('<select name="gamemode"<option value="All Pick">All Pick</option><option value="Captains Mode">Captains Mode</option><option value="Captains Draft">Captains Draft</option></select>');
$(document).find("td[id^='mmr_column"+id+"']").html('<input id="input_mmr" type="text" name="input_mmr">');
}
摘要:函数将单元格内的文本更改为“表单”(仍未完成)。在更改单元格内的文本之前,将触发storecontents()
函数。就在这里:
function storecontents(){ //HOLDS CONTENTS OF ROW
var herotemp = document.getElementById("hero_column"+id).innerHTML;
var resulttemp = document.getElementById("result_column"+id).innerHTML;
var gametemp = document.getElementById("gamemode_column"+id).innerHTML;
var mmrtemp = document.getElementById("mmr_column"+id).innerHTML;
alert(herotemp);
}
此函数在更改单元格之前将文本存储在单元格内。请注意,这些变量是在我的编码页面顶部全局定义的。此警报显示herotemp
为其之前的html:“Rubick”。
然后,按钮会触发此代码(如有必要)以将内容更改回原始代码:
function abandonedit(){
alert(herotemp);
$(document).find("td[id^='hero_column"+id+"']").html(herotemp);
$(document).find("td[id^='result_column"+id+"']").html(resulttemp);
$(document).find("td[id^='gamemode_column"+id+"']").html(gametemp);
$(document).find("td[id^='mmr_column"+id+"']").html(mmrtemp);
}
但是,上述函数中的警报显示herotemp
变量(以及所有其他变量)为空。我认为全局声明的变量可用于所有函数?我做错了什么或者我误解了吗?
答案 0 :(得分:1)
如果你在函数中使用 var ,这将只在 这个函数中声明这个变量。如果您将变量声明为具有相同名称的全局变量。
生成全局变量或使用全局变量只需删除 var
答案 1 :(得分:0)
如果您声明变量usin var herotemp
,您将拥有一个名为herotemp
的本地(函数范围)变量,该变量会阻止您访问全局变量herotemp
。
这应该将您的代码修复为预期的行为。
function storecontents(){ //HOLDS CONTENTS OF ROW
/*var*/ herotemp = document.getElementById("hero_column"+id).innerHTML;
var resulttemp = document.getElementById("result_column"+id).innerHTML;
var gametemp = document.getElementById("gamemode_column"+id).innerHTML;
var mmrtemp = document.getElementById("mmr_column"+id).innerHTML;
alert(herotemp);
}
有时候想要名为x
的本地(函数范围)变量以及名为x
的全局变量。为了实现这一目标,您必须执行以下操作:
var x = 3;
function useX() {
var x = 5;
alert(x, window['x']);
}
或者:
var x = 3;
function useX(x) {
alert(x, window['x']);
}