可能重复:
Link Button on the page and set it as default button, work fine in IE but not in Mozila
如何在asp.net中将链接按钮设置为asp:panel的默认按钮?我知道按钮可以设置为默认值,但我的应用程序使用所有表单的链接按钮。任何建议如何做到。
修改
现在我试过这个, 它也适用于Firefox,但我的javascript验证(即)onclient点击我的链接按钮不起作用?
var __defaultFired = false;
function WebForm_FireDefaultButton(event, target) {
var element = event.target || event.srcElement;
if (!__defaultFired && event.keyCode == 13 && !(element && (element.tagName.toLowerCase() == "textarea"))) {
var defaultButton;
if (__nonMSDOMBrowser)
defaultButton = document.getElementById(target);
else
defaultButton = document.all[target];
if (defaultButton) {
if (typeof (defaultButton.click) != "undefined")
defaultButton.click();
else
eval(unescape(defaultButton.href.replace("javascript:", "")));
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
return true;
}
第二次编辑:
我能够使自定义链接按钮控件工作,但无法将OnClientClick挂钩到它。来源using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net。
我这样做了,
<%@ Register Namespace="App_Code" TagPrefix="ac" %>
<asp:Label runat="server" ID="lblHello" />
<asp:Panel runat="server" DefaultButton="lbHello">
First name: <asp:TextBox runat="server" ID="txtFirstName" />
<ac:LinkButtonDefault ID="lbHello" runat="server" Text="Click me"
OnClientClick="javascript:alert('hai');" OnClick="lbHello_Click" />
</asp:Panel>
我的客户端功能无效?任何建议。
答案 0 :(得分:9)
您可以采用添加属性的简单方法来处理文本框的onKeyPress
事件,而不是使用自定义控件。这正确处理从文本框中按 Enter 并触发LinkButton
的事件。这种方法的缺点是在Firefox中不会触发任何LinkButton
OnClientClick
事件,这与您链接到的博客文章中描述的问题有关。只有当用户用鼠标实际点击链接时才会触发它。但是,在IE中,它将从文本框和直接点击触发。
解决方案#1 - 添加属性的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
txtFirstName.Attributes.Add("onKeyPress",
"javascript:if (event.keyCode == 13) __doPostBack('" + lbHello.ClientID + "','')");
}
试一试,看看它是否符合您的需求。请记住我之前描述的限制。
现在,如果您希望上述限制消失,那篇博文中的one of the comments显示了一种似乎正常工作的方法。我修改它以摆脱StringBuilder
并将其转换为C#。
解决方案#2 - 添加功能并注册的代码如下:
protected void Page_PreRender(object sender, EventArgs e)
{
string addClickFunctionScript = @"function addClickFunction(id) {
var b = document.getElementById(id);
if (b && typeof(b.click) == 'undefined')
b.click = function() {
var result = true;
if (b.onclick) result = b.onclick();
if (typeof(result) == 'undefined' || result)
eval(b.getAttribute('href'));
}
};";
string clickScript = String.Format("addClickFunction('{0}');", lbHello.ClientID);
Page.ClientScript.RegisterStartupScript(this.GetType(), "addClickFunctionScript", addClickFunctionScript, true);
Page.ClientScript.RegisterStartupScript(this.GetType(), "click_" + lbHello.ClientID, clickScript, true);
}
页面标记 - 两种上述解决方案的页面标记相同:
<asp:Label runat="server" ID="lblHello" />
<asp:Panel ID="Panel1" runat="server" DefaultButton="lbHello">
First name:
<asp:TextBox runat="server" ID="txtFirstName" />
<asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click"
OnClientClick="javascript:alert('Hello, World!');"/>
</asp:Panel>
在这两种情况下,都不需要自定义控件来实现此类功能。保持简单。
答案 1 :(得分:1)
看看这个
<asp:Panel runat="server" DefaultButton="lbHello">
First name: <asp:TextBox runat="server" ID="txtFirstName" />
<asp:LinkButton ID="lbHello" runat="server" Text="Click me" OnClick="lbHello_Click" />
</asp:Panel>
其余的答案可以在这里找到。它显示了如何解决FireFox出现的问题 http://kpumuk.info/asp-net/using-panel-defaultbutton-property-with-linkbutton-control-in-asp-net/
答案 2 :(得分:1)
另一种方法可能是假冒这样的onclick事件。
jQuery(document).ready(function () {
jQuery('#<%= txtFirstName.ClientID %>').keypress(function (event) {
if (event.keyCode == 13) {
eval($('#<%=lbHello.ClientID %>').attr('href'));
}
});
});
缺点是你需要在制作默认按钮所需的所有地方使用它。
答案 3 :(得分:0)
见这个
Link Button on the page and set it as default button, work fine in IE but not in Mozila
虚拟按钮答案是最清洁的解决方案IMO。