在aspx页面内,如何做到按钮控件的焦点控制顺序(不使用鼠标,用回车键)?

时间:2021-12-06 18:20:37
有一个问题哪位高手能回答:
在 .aspx页面里,所有的控件都集中在一个form里面,比如,在页面的上部我设置了一个textbox控件(id为textbox1)和一个button1,在页面的底部我也设置了一个textbox(id为textbox2)和一个button2,现在,如何才能实现以下功能?
当我在textbox1里输入完文字后,直接敲回车(不是用鼠标),就使焦点转移到button1上,而当我在textbox2里输入完文字后,直接敲回车就会把焦点转移到button2上。
就比如在sohu.com里,首页上部是信箱的登陆按钮,当你在文本框里输入直接敲回车时,它就自动的转到信箱登陆页面。而当你在搜索引擎的文本筐里输入文字,直接敲回车就回自动转到搜索引擎页面。
 
一般的,如果一个页面两个以上按钮时,你直接敲回车它都回自动默认你是点击第一个按钮。

19 个解决方案

#1


1.javascript:
function EnterToTab()
{with(window.event)if(srcElement.type=='text'&&keyCode==13)keyCode=9}

2.<body onkeydown="EnterToTab()" >

#2


zhenwang () 何苦呢?
我觉得你得思路不一定符合大家的习惯

#3


我这样的思路正是为了迎合用户的习惯。

不知道大家有没有用纯asp.net和c#在vs.net里开发过网站,一般的,网站首页都是由很多的用户自定义控件组合而成,比如我上面讲的问题,在网站的首页上,很可能有“站内搜索”和“用户登陆”两个需要获取用户输入的控件,而为了模块的独立性,这两个部分都分别在不同的用户控件内,如一个在head.ascx,一个在left.ascx,那么现在我提的那个问题就出现了,这样生成的页面,在我们使用时,如果你在左边用户登陆里输入用户名和密码后,一般的人肯定都是直接敲回车,而不是用鼠标点选“登陆”按钮,但是,直接敲回车后,由于“站内搜索”处于页面的顶部,所以,页面会转到“站内搜索”页面,而不是我们所希望的“登陆”页面。
一种很容易想到的办法就是在客户端使用javascript控制焦点,但是这些页面上的按钮使用的全部是web控件而不是html控件,且在不同的用户自定义控件内,所以不能直接引用控件的id
。期待着其他解决方案。

#4


你的textbox的id顺序一定要按序排列,这样,焦点就自动根据id号走!

#5


怎么给id排序?id号是可以随便取的啊,难道要把id号都取成textbox1,textbox2才算是按顺序吗

#6


在代码里:
textbox1.Attributes("onkeydown") = "javascript:SetFocus(button1);"
textbox2.Attributes("onkeydown") = "javascript:SetFocus(button2);"
....

在aspx页面:
<script language="javascript">
function SetFocus(element)
{
  if(event.keyCode==13)
    { 
    eval("document.Form1."+element).focus();
    }
    return false;
 }
</script>

#7


.attributes是一个属性,这样设置会出现错误

#8



{with(window.event)if(srcElement.type=='text'&&keyCode==13)keyCode=9}

#9


似乎没有必要,如果控件多的话,是很难控制的,而且写起来很麻烦

#10


看来这个问题是没有人能够解决的了,好象.net的web控件就是不支持焦点控制啊,如果是这样的话,这算不算是web控件的一个不足之处呢?
diaopeng:你认为在一个网页里就一个搜索框和一个用户登陆框算“控件多”吗?呵呵

#11


同意leal() 
textbox1.Attributes.Add("onkeydown","SetFocus(button1);"
textbox2.Attributes.Add("onkeydown","SetFocus(button2);"

#12


我试了,怎么不行啊?我的这几个button都分别处于不同的usercontrol里面,直接用document.form1引用是不行的。。。
对了,只记得技术问题了,忘了感谢各位高手给予的指点了,先谢谢大家了,希望高手们再努力一下,帮小弟这个问题解决,我再调整我的分值!!

#13


try:
在代码里:
textbox1.Attributes("onkeydown") = "javascript:SetFocus(UserControl1_button1);"
textbox2.Attributes("onkeydown") = "javascript:SetFocus(UserControl2_button2);"
....

其中SetFocus的参数是"usercontrol的id"+"_"+"在usercontrol里要获取焦点的控件id"

在aspx页面:
<script language="javascript">
function SetFocus(element)
{
  if(event.keyCode==13)
    { 
    eval("document.all."+element).focus();
    }
    return false;
 }
</script>

#14


leal(),你误解我的意思了,我的textbox1和button1是位于同一个用户自定义控件里面,textbox2和button2位于一个自定义控件里面,而这个自定义控件是没有id 的啊,它只是一个.ascx控件文件,有个文件名,在引用时在homepage.aspx页面顶部有个register,注册一下就行了。
希望大家在写代码以前最好能在自己的机器上先运行一下试试,上面的代码都不用试,因为usercontrol没有id,attributes是个属性,只能用addributes.add才行,另外,那个try段代码是放在哪个页面里,是homepage.aspx还是用户控件页.ascx。

#15


服了你,海阔天空说的已经很明白了,是你方法不对,或是没有用好。

'看来这个问题是没有人能够解决的了,好象.net的web控件就是不支持焦点控制啊'这是什么话啊,你好像还没有明白web控件和html控件之间的关系,控件焦点是客户端的事,和服务器端没有关系啊,所有的web控件到了客户端还不是生成html??要不IE怎么解释,在客户端控制就是使用脚本!和什么服务器端控件没有关系啊。
上边的人的方法大多可行,好好试试

#16


给控件设置TableIndex顺序就OK了

#17


alf7927,我都试过了,你们只是凭空想象这样应该行,那样应该行,有谁真正的模拟过我说的那种情况吗?不信你照上面的方法试试看行不行,在说一次,我的textbox1和button1是位于同一个用户自定义控件(left.ascx)里面,textbox2和button2位于一个自定义控件(top.ascx)里面,而要显示的页面是homepage.aspx,

#18


基本思路是这样的,程式是要变通的,我知道你的控件没有ID或是ID不可确定,但是你可以把你这个控件放在一个Table中啊,给这个table一个id
然后可以在客户端看到Table中生成的代码一定会有一个button和一个text,它们分别是这个table的Row(index).cell(index)的children(0),或children(1),然后根据以上思路即可。这是客户端的事情啊。和什么控件没有关系。
<script language="javascript">
function SetFocus()
{
  if(event.keyCode==13)
    { 
    document.all.tableid.rows(1).children(x).focus();
    }
    return false;
 }
</script>

#19


得到大家的启示,我已经解决了这个问题,谢谢各位高手!

#1


1.javascript:
function EnterToTab()
{with(window.event)if(srcElement.type=='text'&&keyCode==13)keyCode=9}

2.<body onkeydown="EnterToTab()" >

#2


zhenwang () 何苦呢?
我觉得你得思路不一定符合大家的习惯

#3


我这样的思路正是为了迎合用户的习惯。

不知道大家有没有用纯asp.net和c#在vs.net里开发过网站,一般的,网站首页都是由很多的用户自定义控件组合而成,比如我上面讲的问题,在网站的首页上,很可能有“站内搜索”和“用户登陆”两个需要获取用户输入的控件,而为了模块的独立性,这两个部分都分别在不同的用户控件内,如一个在head.ascx,一个在left.ascx,那么现在我提的那个问题就出现了,这样生成的页面,在我们使用时,如果你在左边用户登陆里输入用户名和密码后,一般的人肯定都是直接敲回车,而不是用鼠标点选“登陆”按钮,但是,直接敲回车后,由于“站内搜索”处于页面的顶部,所以,页面会转到“站内搜索”页面,而不是我们所希望的“登陆”页面。
一种很容易想到的办法就是在客户端使用javascript控制焦点,但是这些页面上的按钮使用的全部是web控件而不是html控件,且在不同的用户自定义控件内,所以不能直接引用控件的id
。期待着其他解决方案。

#4


你的textbox的id顺序一定要按序排列,这样,焦点就自动根据id号走!

#5


怎么给id排序?id号是可以随便取的啊,难道要把id号都取成textbox1,textbox2才算是按顺序吗

#6


在代码里:
textbox1.Attributes("onkeydown") = "javascript:SetFocus(button1);"
textbox2.Attributes("onkeydown") = "javascript:SetFocus(button2);"
....

在aspx页面:
<script language="javascript">
function SetFocus(element)
{
  if(event.keyCode==13)
    { 
    eval("document.Form1."+element).focus();
    }
    return false;
 }
</script>

#7


.attributes是一个属性,这样设置会出现错误

#8



{with(window.event)if(srcElement.type=='text'&&keyCode==13)keyCode=9}

#9


似乎没有必要,如果控件多的话,是很难控制的,而且写起来很麻烦

#10


看来这个问题是没有人能够解决的了,好象.net的web控件就是不支持焦点控制啊,如果是这样的话,这算不算是web控件的一个不足之处呢?
diaopeng:你认为在一个网页里就一个搜索框和一个用户登陆框算“控件多”吗?呵呵

#11


同意leal() 
textbox1.Attributes.Add("onkeydown","SetFocus(button1);"
textbox2.Attributes.Add("onkeydown","SetFocus(button2);"

#12


我试了,怎么不行啊?我的这几个button都分别处于不同的usercontrol里面,直接用document.form1引用是不行的。。。
对了,只记得技术问题了,忘了感谢各位高手给予的指点了,先谢谢大家了,希望高手们再努力一下,帮小弟这个问题解决,我再调整我的分值!!

#13


try:
在代码里:
textbox1.Attributes("onkeydown") = "javascript:SetFocus(UserControl1_button1);"
textbox2.Attributes("onkeydown") = "javascript:SetFocus(UserControl2_button2);"
....

其中SetFocus的参数是"usercontrol的id"+"_"+"在usercontrol里要获取焦点的控件id"

在aspx页面:
<script language="javascript">
function SetFocus(element)
{
  if(event.keyCode==13)
    { 
    eval("document.all."+element).focus();
    }
    return false;
 }
</script>

#14


leal(),你误解我的意思了,我的textbox1和button1是位于同一个用户自定义控件里面,textbox2和button2位于一个自定义控件里面,而这个自定义控件是没有id 的啊,它只是一个.ascx控件文件,有个文件名,在引用时在homepage.aspx页面顶部有个register,注册一下就行了。
希望大家在写代码以前最好能在自己的机器上先运行一下试试,上面的代码都不用试,因为usercontrol没有id,attributes是个属性,只能用addributes.add才行,另外,那个try段代码是放在哪个页面里,是homepage.aspx还是用户控件页.ascx。

#15


服了你,海阔天空说的已经很明白了,是你方法不对,或是没有用好。

'看来这个问题是没有人能够解决的了,好象.net的web控件就是不支持焦点控制啊'这是什么话啊,你好像还没有明白web控件和html控件之间的关系,控件焦点是客户端的事,和服务器端没有关系啊,所有的web控件到了客户端还不是生成html??要不IE怎么解释,在客户端控制就是使用脚本!和什么服务器端控件没有关系啊。
上边的人的方法大多可行,好好试试

#16


给控件设置TableIndex顺序就OK了

#17


alf7927,我都试过了,你们只是凭空想象这样应该行,那样应该行,有谁真正的模拟过我说的那种情况吗?不信你照上面的方法试试看行不行,在说一次,我的textbox1和button1是位于同一个用户自定义控件(left.ascx)里面,textbox2和button2位于一个自定义控件(top.ascx)里面,而要显示的页面是homepage.aspx,

#18


基本思路是这样的,程式是要变通的,我知道你的控件没有ID或是ID不可确定,但是你可以把你这个控件放在一个Table中啊,给这个table一个id
然后可以在客户端看到Table中生成的代码一定会有一个button和一个text,它们分别是这个table的Row(index).cell(index)的children(0),或children(1),然后根据以上思路即可。这是客户端的事情啊。和什么控件没有关系。
<script language="javascript">
function SetFocus()
{
  if(event.keyCode==13)
    { 
    document.all.tableid.rows(1).children(x).focus();
    }
    return false;
 }
</script>

#19


得到大家的启示,我已经解决了这个问题,谢谢各位高手!

#20