与区别?在线等。。。。

时间:2021-11-10 00:56:56
哪位知道这两种写法到底有什么区别?为什么我在调用JS文件里的函数combobox(document.all.textid,lav,lat)(其中textid是输入框的id)时,<asp:TextBox....>这种写法就会出错,而<input type=text ...>就完全正确。
如果必须用asp.net的组件<asp:TextBox...>,那么函数的调用应该怎么写?

23 个解决方案

#1


按理是正确的. 除非你是用的自定义用户控件.也就是后缀名为ascx的页面... 在JS中就不能直接使用页面显示的那个ID名了.

#2


js只与客户端的表单控件有关。
服务器控件最好都会转化成客户端控件。

分析js错误只管生成的HTML代码就行了。

#3


服务器控件最 都会转化成客户端控件。 

#4


属性:runat="server"

#5


最简单的办法是,运行出来看源文件,找到<asp:TextBox....>生成的<input type=text> 看看ID是什么,然后你再document.all.生成后的ID肯定没错

#6


<asp:TextBox...>是服务器控件
<input type=text...>是客户端控件
在JS里调用没必要用服务器控件

#7


<asp:TextBox id="TextBox1" runat="server'></asp:TextBox>
js:
combobox('<%=TextBox1.ClientID%>',lav,lat)

#8


看一下运行之后的HTML代码你就知道区别了.

#9


document.getElementById('textid.ClientID')

#10


combobox(document.all.<%=textid.clientId%>,lav,lat)

#11


wht6411 
顶了

#12


<asp:TextBox....>这种写法是你添加了一个asp.net的组件TestBox,<input type=text ...>这种写法是你添加了一个客户端的控件,<input>是Html的标记,你写的函数是在客户端找textid,所以<input type=text ...>这种写法就完全正确。

#13


12楼说的对,确实是js函数的问题,其他楼的方法我都试了,不管用。html运行后的代码完全一样,没区别。
不知在js函数里怎么找服务器端的textid?

#14


这是我的js代码
<!--Combobox-->
function combobox(sobj,al_v,al_t)
{

 var rmopo = window.createPopup();

 function rm(i,oct,h)
 {   
  var i2=eval(i);
  var oct=eval(oct);
  var w=eval(i).offsetWidth;
  var h=eval(h);
  var lefter = i2.offsetLeft-1; var topper = i2.offsetHeight;
  rmopo.document.body.innerHTML = oct.innerHTML;
  rmopo.document.body.style.border="1px solid #3162A6";
  rmopo.document.body.style.background="#F6F6F6";
  rmopo.show(lefter, topper, w, h, i2);
 }

 loadcombobox(sobj,al_v,al_t);

 function loadcombobox(obj,al_v,al_t)
 {
  var obj = eval(obj)
  theListArrayV = al_v;
  theListArrayT = al_t;

  var tempStr='<DIV id="'+obj.id+'showcombox" style="position:relative;visibility:hidden">'
    +'<DIV class="ac_menu" id="'+obj.id+'ListDiv" style="FONT-SIZE: 12px; Z-INDEX: 10; POSITION: absolute;OVERFLOW-Y:auto; WIDTH:expression('+obj.offsetWidth+'-1);">'
  for(var i=0;i<theListArrayV.length;i++)
   tempStr+='<DIV class="ac_menuitem" onmouseover="this.style.backgroundColor=\'#D6DEEC\';" onmouseout="this.style.backgroundColor=\'\';" onclick="this.selectedflag=1;parent.document.all.'+obj.id+'.value=this.value;parent.document.all.'+obj.id+'.blur();" style="cursor:default;" value="'+htmlEncode(theListArrayV[i])+'" textvalue="'+htmlEncode(theListArrayT[i])+'">'+htmlEncode(theListArrayT[i])+'</DIV>';
  tempStr+='</DIV></DIV>';

  obj.insertAdjacentHTML("afterEnd",tempStr);
  obj.onfocus=AC_OnFocus;
  obj.onclick=AC_OnFocus;
  obj.onblur=AC_OnBlur;
  obj.onkeydown=AC_OnKeyDown;
  obj.autoComplete="off";
  obj.onpropertychange=AC_OnPropertyChange;
 }

 function AC_OnFocus(obj)
 {
  if(obj==null) obj=event.srcElement;
  popmenu=eval(obj.id+"showcombox");
  rm(obj,popmenu,130);
  AC_OnPropertyChange(obj);
 }


 function AC_OnBlur(obj)
 {
  rmopo.hide();
 }

 function AC_OnPropertyChange(obj)
 {
  if(obj==null) obj=event.srcElement;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv
  if(theListDiv==null) return ;
  var theListDivChildren=theListDiv.children;

  theListDiv.selectedIndex=-1;
  var theFirstVisibleIndex=-1;

  var objValue=obj.value;

  for(var i=0;i<theListDivChildren.length;i++)
  {
   if(theListDiv.children[i].textvalue.indexOf(objValue)==0)
   {
    if(theFirstVisibleIndex==-1) theFirstVisibleIndex=i;
    theListDivChildren[i].style.backgroundColor="#F6F6F6";
    theListDivChildren[i].style.display="";
   }
   else
    theListDivChildren[i].style.display="none";
   if(theListDiv.selectedIndex==-1 && theListDiv.children[i].textvalue==objValue)
   {
    theListDiv.selectedIndex=i;
   }
  }
  if(theListDiv.selectedIndex==-1 && theFirstVisibleIndex!=-1) 
  {
   theListDiv.selectedIndex=theFirstVisibleIndex;
  }
  if(theListDiv.selectedIndex!=-1)
  {
   theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
  }
  adjustListDivScroll(obj);
 }

 function AC_OnKeyDown(obj)
 {
  if(obj==null) obj=event.srcElement;

  var AC_TAB = 9;
  var AC_ENTER = 13;
  var AC_UP_ARROW = 38;
  var AC_DOWN_ARROW = 40;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv
  if(theListDiv==null) return ;

  var keyCode=event.keyCode;
  if(keyCode==AC_ENTER) keyCode=event.keyCode=AC_TAB;

  if(keyCode==AC_TAB && theListDiv.selectedIndex!=-1) 
  {
   obj.value=theListDiv.children[theListDiv.selectedIndex].value;
   rmopo.hide() ;
  }
  
  if(keyCode==AC_UP_ARROW && theListDiv.selectedIndex!=-1)
  {
   for(var i=theListDiv.selectedIndex-1;i>-1;i--)
   {
    if(theListDiv.children[i].style.display!="none")
    {
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#F6F6F6";
     theListDiv.selectedIndex=i;
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
     adjustListDivScroll(obj);
     break;
    }
   }
  }
 
  if(keyCode==AC_DOWN_ARROW && theListDiv.selectedIndex!=-1)
  {
   for(var i=theListDiv.selectedIndex*1+1;i<theListDiv.children.length;i++)
   {
    if(theListDiv.children[i].style.display!="none")
    {
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#F6F6F6";
     theListDiv.selectedIndex=i;
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
     adjustListDivScroll(obj);
     break;
    }
   }
   return;
  }
 
 }

 function adjustListDivScroll(obj)
 {
  if(obj==null) obj=event.srcElement;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv

  if ( theListDiv==null || theListDiv.selectedIndex==-1 ) return ;
  var i=theListDiv.selectedIndex;
  if((theListDiv.children[i].offsetTop<theListDiv.scrollTop)||(theListDiv.children[i].offsetTop>theListDiv.scrollTop+120))
   theListDiv.scrollTop=theListDiv.children[i].offsetTop-85;
 }

 function htmlEncode(str)
 {
  if(str==null) return "";
  str=str.replace(/</ig,"&lt;")
  str=str.replace(/>/ig,"&gt;");
  str=str.replace(/"/ig,"&quot;");
  return str;
 }
}
<!--end-->

#15


其实就是被微软给封装了一下!其它的没有什么不同的!在服务器端运行的控件在客房端显示的ID是不可预测的!所果要用其ID写写clicentid才可以!

#16


<asp:TextBox...> 最终还是解析为<input type=text...> HTML

#17


自己顶,简单的问题

#18


document.getElementById("TEXTBOX的ID")

#19


前者為服務器端控件,后者為客戶端控件 !

#20


楼主还是先了解asp.net的概念先

#21


引用 20 楼 amandag 的回复:
楼主还是先了解asp.net的概念先

#22


赶紧搞清楚asp.net的机理

<asp:textbox>在页面的生命周期的最后一步是要render成html<input>的
因为浏览器只解析html语言的元素
只要你保证render后的html元素的id对应就可以

#23


引用 7 楼 chaoren1641 的回复:
<asp:TextBox id="TextBox1" runat="server'> </asp:TextBox>
js:
combobox(' <%=TextBox1.ClientID%>',lav,lat)


这个方法可以避免引用后id不一样的问题。
写程序时,如果能用客户端的,就不要用服务器端。

#1


按理是正确的. 除非你是用的自定义用户控件.也就是后缀名为ascx的页面... 在JS中就不能直接使用页面显示的那个ID名了.

#2


js只与客户端的表单控件有关。
服务器控件最好都会转化成客户端控件。

分析js错误只管生成的HTML代码就行了。

#3


服务器控件最 都会转化成客户端控件。 

#4


属性:runat="server"

#5


最简单的办法是,运行出来看源文件,找到<asp:TextBox....>生成的<input type=text> 看看ID是什么,然后你再document.all.生成后的ID肯定没错

#6


<asp:TextBox...>是服务器控件
<input type=text...>是客户端控件
在JS里调用没必要用服务器控件

#7


<asp:TextBox id="TextBox1" runat="server'></asp:TextBox>
js:
combobox('<%=TextBox1.ClientID%>',lav,lat)

#8


看一下运行之后的HTML代码你就知道区别了.

#9


document.getElementById('textid.ClientID')

#10


combobox(document.all.<%=textid.clientId%>,lav,lat)

#11


wht6411 
顶了

#12


<asp:TextBox....>这种写法是你添加了一个asp.net的组件TestBox,<input type=text ...>这种写法是你添加了一个客户端的控件,<input>是Html的标记,你写的函数是在客户端找textid,所以<input type=text ...>这种写法就完全正确。

#13


12楼说的对,确实是js函数的问题,其他楼的方法我都试了,不管用。html运行后的代码完全一样,没区别。
不知在js函数里怎么找服务器端的textid?

#14


这是我的js代码
<!--Combobox-->
function combobox(sobj,al_v,al_t)
{

 var rmopo = window.createPopup();

 function rm(i,oct,h)
 {   
  var i2=eval(i);
  var oct=eval(oct);
  var w=eval(i).offsetWidth;
  var h=eval(h);
  var lefter = i2.offsetLeft-1; var topper = i2.offsetHeight;
  rmopo.document.body.innerHTML = oct.innerHTML;
  rmopo.document.body.style.border="1px solid #3162A6";
  rmopo.document.body.style.background="#F6F6F6";
  rmopo.show(lefter, topper, w, h, i2);
 }

 loadcombobox(sobj,al_v,al_t);

 function loadcombobox(obj,al_v,al_t)
 {
  var obj = eval(obj)
  theListArrayV = al_v;
  theListArrayT = al_t;

  var tempStr='<DIV id="'+obj.id+'showcombox" style="position:relative;visibility:hidden">'
    +'<DIV class="ac_menu" id="'+obj.id+'ListDiv" style="FONT-SIZE: 12px; Z-INDEX: 10; POSITION: absolute;OVERFLOW-Y:auto; WIDTH:expression('+obj.offsetWidth+'-1);">'
  for(var i=0;i<theListArrayV.length;i++)
   tempStr+='<DIV class="ac_menuitem" onmouseover="this.style.backgroundColor=\'#D6DEEC\';" onmouseout="this.style.backgroundColor=\'\';" onclick="this.selectedflag=1;parent.document.all.'+obj.id+'.value=this.value;parent.document.all.'+obj.id+'.blur();" style="cursor:default;" value="'+htmlEncode(theListArrayV[i])+'" textvalue="'+htmlEncode(theListArrayT[i])+'">'+htmlEncode(theListArrayT[i])+'</DIV>';
  tempStr+='</DIV></DIV>';

  obj.insertAdjacentHTML("afterEnd",tempStr);
  obj.onfocus=AC_OnFocus;
  obj.onclick=AC_OnFocus;
  obj.onblur=AC_OnBlur;
  obj.onkeydown=AC_OnKeyDown;
  obj.autoComplete="off";
  obj.onpropertychange=AC_OnPropertyChange;
 }

 function AC_OnFocus(obj)
 {
  if(obj==null) obj=event.srcElement;
  popmenu=eval(obj.id+"showcombox");
  rm(obj,popmenu,130);
  AC_OnPropertyChange(obj);
 }


 function AC_OnBlur(obj)
 {
  rmopo.hide();
 }

 function AC_OnPropertyChange(obj)
 {
  if(obj==null) obj=event.srcElement;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv
  if(theListDiv==null) return ;
  var theListDivChildren=theListDiv.children;

  theListDiv.selectedIndex=-1;
  var theFirstVisibleIndex=-1;

  var objValue=obj.value;

  for(var i=0;i<theListDivChildren.length;i++)
  {
   if(theListDiv.children[i].textvalue.indexOf(objValue)==0)
   {
    if(theFirstVisibleIndex==-1) theFirstVisibleIndex=i;
    theListDivChildren[i].style.backgroundColor="#F6F6F6";
    theListDivChildren[i].style.display="";
   }
   else
    theListDivChildren[i].style.display="none";
   if(theListDiv.selectedIndex==-1 && theListDiv.children[i].textvalue==objValue)
   {
    theListDiv.selectedIndex=i;
   }
  }
  if(theListDiv.selectedIndex==-1 && theFirstVisibleIndex!=-1) 
  {
   theListDiv.selectedIndex=theFirstVisibleIndex;
  }
  if(theListDiv.selectedIndex!=-1)
  {
   theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
  }
  adjustListDivScroll(obj);
 }

 function AC_OnKeyDown(obj)
 {
  if(obj==null) obj=event.srcElement;

  var AC_TAB = 9;
  var AC_ENTER = 13;
  var AC_UP_ARROW = 38;
  var AC_DOWN_ARROW = 40;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv
  if(theListDiv==null) return ;

  var keyCode=event.keyCode;
  if(keyCode==AC_ENTER) keyCode=event.keyCode=AC_TAB;

  if(keyCode==AC_TAB && theListDiv.selectedIndex!=-1) 
  {
   obj.value=theListDiv.children[theListDiv.selectedIndex].value;
   rmopo.hide() ;
  }
  
  if(keyCode==AC_UP_ARROW && theListDiv.selectedIndex!=-1)
  {
   for(var i=theListDiv.selectedIndex-1;i>-1;i--)
   {
    if(theListDiv.children[i].style.display!="none")
    {
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#F6F6F6";
     theListDiv.selectedIndex=i;
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
     adjustListDivScroll(obj);
     break;
    }
   }
  }
 
  if(keyCode==AC_DOWN_ARROW && theListDiv.selectedIndex!=-1)
  {
   for(var i=theListDiv.selectedIndex*1+1;i<theListDiv.children.length;i++)
   {
    if(theListDiv.children[i].style.display!="none")
    {
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#F6F6F6";
     theListDiv.selectedIndex=i;
     theListDiv.children[theListDiv.selectedIndex].style.backgroundColor="#D6DEEC";
     adjustListDivScroll(obj);
     break;
    }
   }
   return;
  }
 
 }

 function adjustListDivScroll(obj)
 {
  if(obj==null) obj=event.srcElement;

  var dv = eval("rmopo.document.all['"+obj.id+"ListDiv']");
  theListDiv = dv

  if ( theListDiv==null || theListDiv.selectedIndex==-1 ) return ;
  var i=theListDiv.selectedIndex;
  if((theListDiv.children[i].offsetTop<theListDiv.scrollTop)||(theListDiv.children[i].offsetTop>theListDiv.scrollTop+120))
   theListDiv.scrollTop=theListDiv.children[i].offsetTop-85;
 }

 function htmlEncode(str)
 {
  if(str==null) return "";
  str=str.replace(/</ig,"&lt;")
  str=str.replace(/>/ig,"&gt;");
  str=str.replace(/"/ig,"&quot;");
  return str;
 }
}
<!--end-->

#15


其实就是被微软给封装了一下!其它的没有什么不同的!在服务器端运行的控件在客房端显示的ID是不可预测的!所果要用其ID写写clicentid才可以!

#16


<asp:TextBox...> 最终还是解析为<input type=text...> HTML

#17


自己顶,简单的问题

#18


document.getElementById("TEXTBOX的ID")

#19


前者為服務器端控件,后者為客戶端控件 !

#20


楼主还是先了解asp.net的概念先

#21


引用 20 楼 amandag 的回复:
楼主还是先了解asp.net的概念先

#22


赶紧搞清楚asp.net的机理

<asp:textbox>在页面的生命周期的最后一步是要render成html<input>的
因为浏览器只解析html语言的元素
只要你保证render后的html元素的id对应就可以

#23


引用 7 楼 chaoren1641 的回复:
<asp:TextBox id="TextBox1" runat="server'> </asp:TextBox>
js:
combobox(' <%=TextBox1.ClientID%>',lav,lat)


这个方法可以避免引用后id不一样的问题。
写程序时,如果能用客户端的,就不要用服务器端。