绕过 ASP 事件处理程序
circumvent asp event handlers
我想通过在 VB.Net 页面中更改某些javascript中的"window.location"的值来引起浏览器重定向。 当我单击"Go"按钮时,下面的代码可以正常工作:出现警报,浏览器已成功重定向。如果我从文本内部按"输入",也会发生同样的情况,框这不起作用。我确实看到了警报,但浏览器保持在同一页面上。
如果我删除对 ASP 母版页的引用,"enter"功能就会开始工作,所以也许其中的某些东西正在处理按键事件并杀死重定向指令?
顺便说一句,我最初是使用 .Net 组件"正常"执行此操作,并在单击提交按钮时进行回发。 但这很奇怪地导致目标页面加载两次,导致页面闪烁并且通常效率低下。 无论如何,我认为没有任何理由涉及所有这些 .Net 开销,因此我希望使用简单的客户端脚本来做到这一点。
有谁知道如何在 .Net 干扰的情况下让"输入"键功能正常工作? 还是我吠错了树,应该回到常规的 .Net 回发?
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script type="text/javascript">
function clickHandler() {
var dropdown = document.getElementById("dropdown");
var entityID = document.getElementById("textOne").value;
var destination = dropdown.options(dropdown.selectedIndex).value + entityID;
alert(destination);
location = destination;
}
function goIfEnterPressed() {
if ((event.which && event.which != 13) || (event.keyCode && event.keyCode != 13)) {
return false;
}
clickHandler();
}
</script>
</asp:Content>
<asp:Content ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<select id="dropdown">
<option value="Page1.aspx?typeOneID=">One</option>
<option value="Page2.aspx?typeTwoID=">Two</option>
<option value="Page3.aspx?typeThreeID=">Three</option>
</select>
<br />
<input id="textOne" onkeypress="goIfEnterPressed()"/>
<br />
<input type="button" value="Go" onclick="clickHandler()" />
</asp:Content>
您的 enter 事件可能被 .Net javascript 的内容捕获。 通常在这种情况下,我会在工作之前阻止事件的默认行为。 我不知道你是否使用jQuery,但代码是这样的:
$('#buttonid').keydown(function(e) {
if (e.keyCode == 13) {
e.preventDefault();
//do whatever you want here.
}
});
母版页的内容中是否有按钮?这听起来不像是.NET问题,听起来更像是对HTML标准的误解。由于您的所有内容都位于单个 <form>
元素中,因此浏览器将根据它在页面上找到的第一个<submit>
按钮提交页面。可以通过在<asp:Panel>
内对内容进行分组并将其DefaultButton
属性设置为提交按钮的 ID 来解决此问题。您还可以设置文本框和按钮的 ValidationGroup
属性来完成相同的操作,但我不确定在这种情况下是否有效,或者这是否仅影响验证控件。
您不会将事件传递到事件处理程序中。 这可能是您问题的一部分 - 至少在IE以外的浏览器中。
<input id="textOne" onkeypress="goIfEnterPressed(event)"/>
function goIfEnterPressed(e) {
if (e.keyCode == 13) {
clickHandler();
}
}
另外,您真的想为非输入键返回 false 吗? 看起来您正在尝试取消活动,但我认为它不会像书面的那样工作。 但是,如果它确实有效,您将阻止在文本框中键入任何文本。 似乎是一种奇怪的行为。
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 异步处理所有事件处理程序的方法
- jsplumb中的Click事件处理程序丢失“;这个“;对象
- 构造函数中的事件处理程序与构造函数外的事件处理函数的行为不同
- 如何在事件处理程序的回调中防止Default