元素id无法访问javascript

时间:2014-03-22 07:07:17

标签: javascript

我有以下代码。在这里,我在声明所有函数之前将变量的所有元素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大功能共有的。这就是为什么我在功能之外宣布它们。

我应该做出什么改变?

2 个答案:

答案 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,我们可以提供更好的帮助。