一、 Js 设置默认按钮
function document.onkeydown()
{
var e=event .srcElement;
if (event .keyCode==13)
{
document.getElementById("btnSearch" ).focus();
return true ;
}
}
二、 在 Form 标签中设置 defaultbutton 属性
< form id ="form1" runat ="server" defaultbutton =" 默认按钮 ID">
三、 DefaultButton.js 文件内容
for (i=0;i<Form1.elements.length;i++)
{
if (Form1.elements[i].type == "submit" )
{
fstsubmit = Form1.elements[i]
fstsubmit.attachEvent("onmouseup" , changeEvent)
//break; 这一句应该去掉
}
}
function changeEvent()
{
__doPostBack(event .srcElement.id, '' )
}
四、 控件方法
自己写一个控件继承 TextBox ,增加一个 SubmitControl 属性用来指定此文本框上按回车时由哪个按钮来响应。再做一个 Converter 增加设计时支持,就是在设计时可以用下拉框选择提交按钮。 目前只考虑了button 、LinkButton 和ImageButton 作为提交按钮,当然继承它们的控件也可以。
ufoTextBox 控件:
public class ufoTextBox : TextBox
{
[TypeConverter(typeof (SubmitableControlConvertor)), DefaultValue("" ), Category("Behavior" )]
public string SubmitControl
{
get
{
object ret = this .ViewState["SubmitControl" ];
if (ret != null )
{
return (string )ret;
}
return string .Empty;
}
set
{
this .ViewState["SubmitControl" ] = value ;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base .AddAttributesToRender(writer);
if (this .SubmitControl.Length > 0)
{
Control con = FindControl(SubmitControl);
if (con != null )
{
string script = "if(event.keyCode == 13){document.getElementById('" + con.ClientID + "').click();event.returnValue=false;}" ;
writer.AddAttribute("onkeydown" , script);
}
}
}
}
SubmitableControlConvertor 类
public class SubmitableControlConvertor : StringConverter
{
private object [] GetControls(IContainer container)
{
ComponentCollection components = container.Components;
ArrayList ret = new ArrayList ();
foreach (IComponent control in components)
{
if (!(control is Button || control is LinkButton || control is ImageButton ))
{
continue ;
}
Control button = (Control )control;
if ((button.ID != null ) && (button.ID.Length != 0))
{
ret.Add(string .Copy(button.ID));
}
}
ret.Sort(Comparer .Default);
return ret.ToArray();
}
public override System.ComponentModel.TypeConverter .StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
if ((context != null ) && (context.Container != null ))
{
object [] controls = this .GetControls(context.Container);
if (controls != null )
{
return new TypeConverter .StandardValuesCollection (controls);
}
}
return null ;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return false ;
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true ;
}
}