我有以下代码。在这里,我在声明所有函数之前将变量的所有元素id声明为全局变量。但这些变量是由函数采用的 以下是样本:
var ddlpf=document.getElementById('<%=ddlpf.ClientID%>');
var disp_msg=document.getElementById('<%=disp_msg.ClientID%>');
function btn_proceed_Click()
{
var ses='<%=Session("hcur").toString %>';
if(pos_valid()==true)
alert('success');
}
function pos_valid()
{
var pos_valid=false;
var ses;
var ccy;
var ccy1;
var ccy2;
var as11costbud;
ses='<%=Session("hcur").toString %>';
var bm='<%=Session("benchmark").toString %>';
var dtsheet='<%=Session("dtsheet").toString %>';
var ratedis='<%=Session("ratedis").toString %>';
if(ddlpf.selectedIndex <= 0)
{
message("Please select the Portfolio");
return;
}
pos_valid=true;
return pos_valid;
}
function message(msg)
{
disp_msg.innerHTML=msg;
var modalPopupBehaviorCtrl = $find('modalpop');
modalPopupBehaviorCtrl.set_PopupControlID("poppan");
modalPopupBehaviorCtrl.show();
}
如果我在message()中的pos_valid()和“disp_masg”中声明变量“ddlpf”,它就可以工作。 代码是这样的:
function pos_valid()
{
var ddlpf=document.getElementById('<%=ddlpf.ClientID%>');
//code
}
function message()
{
var disp_msg=document.getElementById('<%=disp_msg.ClientID%>');
//code
}
但这些id对5个函数是通用的。不仅仅是这两个。我有20个id,这是5大功能共有的。这就是为什么我在功能之外宣布它们。
我应该做出什么改变?
答案 0 :(得分:1)
我猜您将脚本放在HTML页面的顶部。所以页面还没有完成加载,你甚至在document.body准备好之前就试图访问document.getElementById
。因此,当您在函数中访问它们时,变量值将为undefined
=&gt;你的问题
以这种方式试试,
var ddlpf;
var disp_msg;
window.onload = function(){
ddlpf=document.getElementById('<%=ddlpf.ClientID%>');
disp_msg=document.getElementById('<%=disp_msg.ClientID%>');
}
这样,您可以将代码放在任何地方。
答案 1 :(得分:1)
据我了解你的问题和所提供的代码,你想知道
ddlpf and disp_msg is not working inside pos_valid and message functions
您必须确保在使用任何函数之前声明全局变量。另一种选择是传递变量。
在我的 demo on codepen 中,您可以看到它有效。这个html
<h2>Element id is not accessible</h2>
<select id="ddlpf">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
<button onclick=btn_proceed_Click()>proceed</button>
<div id="disp_msg">
</div>
和这个javascript
var ddlpf=document.getElementById('ddlpf');
var disp_msg=document.getElementById('disp_msg');
function btn_proceed_Click()
{
if(pos_valid()==true)
{
var btn = document.getElementById('btn');
btn.innerHTML='success';
};
}
function pos_valid()
{
var pos_valid=false;
var ses, ccy, ccy1, ccy2, as11costbud;
var selectedIndex = ddlpf.selectedIndex
if(selectedIndex <= 0)
{
message("Please select the Portfolio. Your selection:" + selectedIndex);
return;
}
message("Your selection" + selectedIndex);
pos_valid=true;
return pos_valid;
}
function message(msg)
{
disp_msg.innerHTML=msg;
}
如果您提供更多信息erromessages from chrome dev tools
,我们可以提供更好的帮助。