和C/S一样,我需要在商品编号输入框中输入若干数字,按下回车后,跳出一个网页对话框,里面是和商品编号有关的GridView,选中后关闭网页对话框,将信息带回原来的页面。
//这段代码用来定义弹出对话框
if (!Page.IsClientScriptBlockRegistered("clientScript"))
{
String strScript = "<script>/r/n";
strScript += "function OpenWinDDH(){/r/n";
strScript += "document.aspnetForm.ctl00_ContentPlaceHolder1_HiddenCONTROL.value='NOSELECT'/r/n";
strScript += "var str=window.showModalDialog('PingCaiGouJiHuaShouHuoCommonPage.aspx?ID=DDH',document.aspnetForm.ctl00_ContentPlaceHolder1_TextBoxDingDanHao.value,'dialogHeight:600px;dialogWidth:1000px')/r/n";
strScript += "if(str!=null) document.aspnetForm.ctl00_ContentPlaceHolder1_HiddenCONTROL.value=str/r/n";
strScript += "}/r/n";
strScript += "</script>";
Page.RegisterClientScriptBlock("clientScript", strScript);
}
ButtonSearch.Attributes.Add("onclick", "OpenWinDDH()");
//这段代码用来定义输入框回车后执行的操作
if (!IsPostBack)
{
TextBoxDingDanHao.Attributes.Add("onkeypress", "EnterTextBoxAtDDH('ctl00_ContentPlaceHolder1_TextBoxDingDanHao','ctl00_ContentPlaceHolder1_ButtonSearch')");
......
//和上面相关的JavaScript
function EnterTextBoxAtDDH(textbox,button)
{
if(event.keyCode == 13)
{
var buff=document.all[textbox].value;
event.returnValue = false;
if(buff.length>5)
{
document.all[button].focus();
document.all[button].click();
}
}
}
上述代码不包括红色代码,在以前简单的页面中使用正常,但在这次界面很复杂的情况下发生了问题,
输入框回车弹出对话框再关闭后,如果再次输入按回车,则失效了,没有对话框弹出。同时界面上其他的输入回车的功能也不正常。多次测试后加入了红色代码成功了,这个时候的特点是ButtonSearch周围一直有个黑框。我估计是因为弹出对话框关闭后当前页面没有获得客户端意义上的焦点,而document.all[button].focus();就解决了这个问题。另外如果不用AJAX的UpdatePanel是没有这个问题的。