【问题标题】:Javascript Keydown event works perfect in Firefox, Chrome but only once in Internet ExplorerJavascript Keydown 事件在 Firefox、Chrome 中完美运行,但在 Internet Explorer 中只有一次
【发布时间】:2012-05-23 16:56:52
【问题描述】:

我正在开发一个小型问卷,并在从 Javascript 中按下 TAB 键时触发 ASP LinkBut​​ton 点击​​。

Javascript如下:

 document.onkeydown = keydown;
    function keydown(event) {
        if (event.key == "Tab" || event.keyCode == 9 || event.which == 9 && !event.shiftKey)
            __doPostBack('<%=btnNext.UniqueID%>', '', true, '', '', false, true); 
        else if (!event) {
            if (window.event.keyCode == 9 && window.event.keyCode == 9 && !window.event.shiftKey)
                __doPostBack('<%=btnNext.UniqueID%>', '', true, '', '', false, true);
        }
    }

我的 ASP LinkBut​​ton 如下所示:

 <asp:LinkButton ID="btnNext" runat="server" CausesValidation="true"></asp:LinkButton>

LinkBut​​ton 使页面重新加载下一个问题。这一切在 Firefox 和 Chrome 中都能完美运行,但在 IE 中却不行。

在 IE 中,只有第一次 TAB 按键有效,但是当我第二次按 TAB 时,在加载下一个问题后,没有任何反应。

知道如何让它在 IE 中运行吗?讨厌这些浏览器差异......

【问题讨论】:

  • 在函数末尾添加 return false
  • @Webtecher 现在可以工作了,但是现在我按下的所有键都会进行回发。如何让它只在 TAB 键上触发??

标签: javascript asp.net dom-events postback


【解决方案1】:

你需要返回false来取消tab键引起的默认动作

document.onkeydown = keydown;
function keydown(event) {
    if(!event){
        event = window.event;
    }
    if (event.key == "Tab" || event.keyCode == 9 || event.which == 9 && !event.shiftKey){
        __doPostBack('<%=btnNext.UniqueID%>', '', true, '', '', false, true); 
        // Only capture tab events
        return false;
    }
    return true;
}

(我也有DRY'ed你码了一下)

【讨论】:

  • 谢谢!!现在它可以工作了......在错误的地方返回 false。
  • 我编辑了你的答案,以便仍然可以在页面上输入文本。
  • 注意到其他事情:一旦我使用 TAB 键导航,ASP LinkBut​​tons 在 Chrome 和 IE 中不起作用。只有 Firefox 在按 TAB 键后它们仍然有效。有什么想法吗?
  • 不抱歉,我对 ASP 一无所知。
猜你喜欢
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多