Javascript 元素id不可访问

Javascript 元素id不可访问,javascript,Javascript,我有以下代码。在这里,在声明所有函数之前,我将变量的所有元素id声明为全局的。但是这些变量是由函数获取的 以下是示例: var ddlpf=document.getElementById('<%=ddlpf.ClientID%>'); var disp_msg=document.getElementById('<%=disp_msg.ClientID%>'); function btn_proceed_Click() { var ses='<%

我有以下代码。在这里,在声明所有函数之前,我将变量的所有元素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;  
如果我在pos_valid()中声明变量“ddlpf”,在message()中声明变量“disp_masg”,那么它会工作。 代码如下所示:

function pos_valid()      
{        
    var ddlpf=document.getElementById('<%=ddlpf.ClientID%>');      
    //code    
}

function message()       
{    
    var disp_msg=document.getElementById('<%=disp_msg.ClientID%>');     
    //code    
}    
功能位置有效()
{        
var ddlpf=document.getElementById(“”);
//代码
}
函数消息()
{    
var disp_msg=document.getElementById(“”);
//代码
}    
但是这些id是5个函数的公共id。不仅是这两个。我有20个id,这是5个大功能的共同点。这就是我在函数之外声明它们的原因


我应该做什么更改?

我猜您正在将脚本放在HTML页面的顶部。因此,页面尚未完成加载,您甚至在document.body准备就绪之前就试图访问
document.getElementById
。因此,当您在函数中访问它们时,变量值将
未定义
=>您的问题

这样试试看

var ddlpf;  
var disp_msg;  

window.onload = function(){
    ddlpf=document.getElementById('<%=ddlpf.ClientID%>');  
    disp_msg=document.getElementById('<%=disp_msg.ClientID%>');  
}
var-ddlpf;
var disp_msg;
window.onload=函数(){
ddlpf=document.getElementById(“”);
disp_msg=document.getElementById(“”);
}

这样,你就可以把代码放在任何地方。

据我所知,你的问题和你想知道的代码


  • 为什么全局变量似乎不起作用
    ddlpf和disp\u msg在pos\u valid和message函数中不起作用
您必须确保在任何函数使用全局变量之前声明它们。另一个选择是传入变量

在我的中,您可以看到它是有效的。这个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>
元素id不可访问
1.
2.
3.
继续
这个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;  
}
var-ddlpf=document.getElementById('ddlpf');
var disp_msg=document.getElementById('disp_msg');
功能btn\u继续\u单击()
{     
if(pos_valid()==true)
{
var btn=document.getElementById('btn');
btn.innerHTML='success';
};
}
函数pos_valid()
{  
var pos_valid=false;
变量ses、ccy、ccy1、ccy2、as11costbud;
var selectedIndex=ddlpf.selectedIndex

如果(selectedIndex ddlpf和disp_msg在pos_valid和message函数中不起作用您为什么使用奇怪的id?实际上我有另外4个使用这些id的函数我有5个使用相同重复id的大函数。这就是为什么我要将它们声明为全局变量,以便我可以在所有函数中访问它们。)ns,无需再次声明,再次检查控制台后,可能会出现一些错误消息?请注意,如果在相关元素存在之前声明全局变量,则以后不会自动更新变量。要回答“问题”,我们需要更多的信息:你预期会发生什么?会发生什么而不是预期的结果?你是如何将你的脚本放到页面上的?是的,aravind,现在我把相同的代码放在底部。它很有效。我很感激你help@Soombinakundi如果阿拉文给出了答案,请接受它,这样其他人就不会试图回答你已经解决的问题.谢谢。我已将脚本放在页面顶部。现在我根据aravind的想法更改了代码。它很有效。如果您发现我的脚本有用,我将非常感谢您的帮助。
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;  
}