ASP.NET 2.0,在FF3和IE7中进行测试。
当我从文本框中点击“输入”按钮时,会触发页面中第一个ImageButton的相应“OnClick”事件。如果我删除该图像按钮,它将触发页面上的下一个ImageButton OnClick事件。
在FireBug控制台中,如果我使用JavaScript提交表单,则不会发生这种情况。但无论出于什么原因,从文本框中输入命令会触发无关的ImageButton事件。
我发现this question有类似的问题,但是由于ImageButtons没有“UseSubmitBehavior”属性,因此该解决方案的建议答案不起作用。
我不明白为什么这个事件会被解雇。如果我查看Request.Form,我可以看到__EVENTTARGET是空的,它实际上是发布整个表单内容(我的所有文本框),但也包括imageButton.x和imageButton.y键/值对。
这是为什么?我想我可以通过javascript检测来自这些文本框的“输入”按键,但我过去的经验是这种行为在浏览器之间变化很大。有什么建议吗?
答案 0 :(得分:6)
这是一个更优雅的解决方案
<asp:TextBox ID="TextBox1" runat="server"
onkeydown = "return (event.keyCode!=13);" >
</asp:TextBox>
阅读整篇文章here
答案 1 :(得分:3)
您可以尝试在asp面板或表单上设置默认按钮。这将允许您控制用户点击回车键时发生的情况。
答案 2 :(得分:3)
我的项目遇到了同样的问题。
导致此问题是因为ASP.NET 始终将假定从IButton
接口(Button和ImageButton)继承的第一个元素是页面中的默认按钮。
Hipoteticaly,如果你使用LinkButton而不是Button或ImageButton,这个问题就解决了。
您可以找到更多信息here on MSDN。
答案 3 :(得分:1)
您可以禁用Enter键,因此用户必须单击ImageButtons。只需将此javascript块粘贴到您的网页上即可:
<script type="text/javascript">
function stopRKey(evt) {
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
if ((evt.keyCode == 13) && (node.type=="text")) {return false;}
}
document.onkeypress = stopRKey;
</script>
答案 4 :(得分:1)
最近,我一直在客户端上做更多的Web服务和更少的回发。通过将我的控件移动到表单元素之外(或完全取消它),问题就消失了。它默认插入到aspx页面上,但直到最近才发生这种情况,我不需要这么做。
答案 5 :(得分:0)
它是在非文本区域中按回车按钮以回发表单的默认行为。您必须使用javascript方法处理它才能停止回发。
您只需要检查window.event.keyCode属性以查看它是否等于13.如果是,请将其重置为0.
function KeyPress()
{
if (window.event.keyCode == 13)
{
window.event.keyCode = 0;
}
}
答案 6 :(得分:0)
我想我可以通过javascript
检测这些文本框中的“输入”按键
这就是我为解决这种行为而采取的措施,它在IE7和FF3中运行良好。这有点不自然。
这是一个通用的例子:
function TextBox1_KeyDown(sender, e)
{
var key;
if(window.event)
key = window.event.keyCode; //IE
else
key = e.which; //firefox
if(key == 13 && $("#TextBox1").val() != "")
{
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("TextBox1", "", true, "", "", false, true));
}
return (key != 13);
}
我使用了WebForm_DoPostBackWithOptions,因为我需要验证器来触发。否则,您可能想要使用__DoPostBack。
以下是“原型”:
function __doPostBack(eventTarget, eventArgument)
function WebForm_PostBackOptions(eventTarget, eventArgument, validation, validationGroup, actionUrl, trackFocus, clientSubmit)
{
this.eventTarget = eventTarget;
this.eventArgument = eventArgument;
this.validation = validation;
this.validationGroup = validationGroup;
this.actionUrl = actionUrl;
this.trackFocus = trackFocus;
this.clientSubmit = clientSubmit;
}
function WebForm_DoPostBackWithOptions(options)
希望它有所帮助。
P.S。:我在这里使用了JQuery但是$ get会是一样的。
答案 7 :(得分:0)
这是我找到的一个优雅的解决方案,以防其他任何人遇到此问题(如果所有其他解决方案都不适合您,因为它们对我不起作用):
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Panel runat="server" DefaultButton="doNothingButton">
<ul id="shopping-list-ul">
</ul>
<asp:Button CssClass="invisible" runat="server" ID="doNothingButton" OnClientClick="return false;" />
</asp:Panel>
</ContentTemplate>
文本框iself在ul中(由javascript生成) 按回车将触发“doNothingButton”,这将在客户端返回false,导致根本没有回发!