日期:2014-05-18  浏览次数:20423 次

回车跳转问题,急!
有2个控件,。imagebutton textbox
我想输入完textbox的内容后回车自动执行 imagebutton
我的情况是 当我输完内容 用鼠标点imagebutton控件后,可以完成跳转和内容显示
但是 当我输完内容,回车 ,就出现索引出界的错误!
郁闷了 ,什么原因哦,我用断点调试过,执行步骤也对的,但就是最后会弹出一个错误。

textbox我是这么改的  
 onkeypress="if(event.keyCode == 13) document.getElementById('ibSearchWish').click();"


focus也试过。。没用

------解决方案--------------------
在.cs文件的 pageload 方法中 用比request大的作用域将textbox的值保存起来,保存之前先判断textbox的值为空时不要保存,然后在取值.不然就会索引越界!
因为回车键相当于提交表单,而ID为ibSearchWish的imagebutton肯定是服务器控件,所以在textbox中按回车键,相当于提交了两次表单,当第一次尚未提交完成时,这时textbox的值刚好为空,紧接着又提交了一次,所以在textbox中按回车键提交时,取到textbox的值应该为空.所以最好用Session将textbox的值的提交时保存起来
------解决方案--------------------
textbox改
onkeypress="if(event.keyCode == 13) {document.getElementById('ibSearchWish').click();event.returnValue=false;}" 

1 由于textbox有焦点的时候,html标准默认有回车信号就postback,而这个时候的产生的postback是不含有button的和postback有关的信息的。
2 假如在你开始的js语句基础上在click()后面加上一个alert语句,你会发现实际上按钮的后台代码执行了也执行了跳转,但是最后还是回到了起始页面。
3 不加alert语句则不执行按钮点击后台代码

由此我推论出

1 假如不加alert语句可以认为按钮点击的产生postback和输入框默认的postback同时发生,而ie可能只认输入框的postback,而忽略了按钮的postback。
2 由于后加的alert语句将输入框产生的回传滞后了,使得其回传晚于按钮点击产生的回传,因此就会产生两次回传,因此程序会先执行跳转,然后执行输入框的postback,并将最后postback的请求响应返回给客户端。而后者不会执行if(!IsPostback)里面的东西。