当您在 ASP.NET Panel
中声明一个 Button
用作 DefaultButton
时会发生什么?我知道 ASP.NET 会将面板的内容呈现为 div
并将一堆内容传递给 ViewState。 ViewState 中是否有 JavaScript 处理呈现的 Button 的点击事件?我认为 ViewState 就是关于状态的信息。它是如何工作的?
最佳答案
关于 ViewState,您是对的。它旨在保留页面和控件值。也就是说,他们的状态。你可以确认一下here .
关于默认按钮,没有魔法。将 javascript 添加到 div
以绑定(bind) ENTER 键事件。
让我们来看看吧!这段代码:
<asp:Panel ID="panel" runat="server" DefaultButton="button">
<asp:Button ID="button" runat="server" Text="this is the button" />
</asp:Panel>
呈现为:
<div id="panel" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'button')">
<input type="submit" name="button" value="this is the button" id="button">
</div>
此 javascript 是由 WebForms 引擎生成的,但如果您好奇的话,我们可以查找它:
function WebForm_FireDefaultButton(event, target) {
if (event.keyCode == 13) {
var src = event.srcElement || event.target;
if (!src || (src.tagName.toLowerCase() != "textarea")) {
var defaultButton;
if (__nonMSDOMBrowser) {
defaultButton = document.getElementById(target);
}
else {
defaultButton = document.all[target];
}
if (defaultButton && typeof(defaultButton.click) != "undefined") {
defaultButton.click();
event.cancelBubble = true;
if (event.stopPropagation) event.stopPropagation();
return false;
}
}
}
return true;
}
注意它如何测试当前获得焦点的控件是否是 textarea
。这是因为 textarea
中的 ENTER 主要是换行,而不是提交。
关于javascript - Panel 的 DefaultButton 属性如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17435964/