【发布时间】:2023-03-11 09:04:01
【问题描述】:
我正在尝试做一些应该很简单的事情。我找到了shortcut.js 并使用它来满足请求。当他们按下/键入 CTL-S 时,我需要保存页面。正常的 odl school 同步调用就可以了。
[是的,CTL-S 通常会将 HTML 页面保存到文件中。]
首先我将解释这个问题,然后我将详细介绍。 这里是绑定快捷方式的js sn-p。只需调用按钮单击事件...
shortcut.add("F11", function(){
$('#ctl00$cp1$btnSave').click();
}
);
在调用快捷方式时,会捕获击键并触发保存按钮。我后面的代码被调用。
似乎 HTTP 请求中的 FORM 值没有映射到控制变量。我可能说得不太对……考虑一下: 这里 ctl00$cp1$txtname 是 textBox 控件的 uniqueId。
request('ctl00$cp1$txtname') = "newValue"
txtname.text = "oldvalue"
如果我返回并单击鼠标按钮,相同的按钮,相同的表单......
request('ctl00$cp1$txtname') = "newValue"
txtname.text = "newvalue"
form.load 就是这种情况。因此,每当这种映射发生/未发生时,它都处于页面生命周期的早期。 这不是特定控件所独有的。所有控件都遇到相同的问题。
这是设计时的保存按钮
<asp:Button ID="btnSave" runat="server"
Text="Save" class="submit" CssClass="buttonblue" UseSubmitBehavior="false" />
这是渲染时的样子
<input type="button" name="ctl00$cp1$btnSave" value="Save" onclick="javascript:__doPostBack('ctl00$cp1$btnSave','')" id="ctl00_cp1_btnSave" class="buttonblue">
我注意到在 DOM 级别的思考中,鼠标单击应该会触发 __doPostBack。不多也不少。所以我改变了快捷方式代码来做同样的事情
shortcut.add("F11", function(){
__doPostBack('ctl00$cp1$btnSave', '');
}
);
这并不能解决问题。 同样,这是客户端的东西,没有什么真正棘手的事情。查看页面源代码显示 __doPostBack 是以这种方式呈现的
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
虽然我在做,但我也在尝试
shortcut.add("F11", function(){
$('#aspnetForm').submit();
}
);
这也不能解决问题。
我不想做任何聪明的事情,甚至是异步的,我只是想让表单通过 JS 提交。
我的主要问题是:为什么 asp.net 的行为不符合我的预期。 具体来说,为什么不将 request.form 值映射到控制变量。
我认为 a) 点击按钮 b) 调用 (#btn).click() c) 调用 __doPostback (与点击使用的参数完全相同)
会产生相同的结果。
这里有些东西我没听懂。
一个有趣的数据点是,我通过调用 ('#form').submit() 得到了相同的不需要的行为
【问题讨论】:
标签: javascript jquery asp.net vb.net