退格在mvc页面中导航回来

时间:2015-12-09 04:38:01

标签: jquery asp.net-mvc

当我点击mvc页面中的下拉列表然后按键盘上的退格键时,该页面将导航回来。如何防止页面导航?

function prevent() {

        $(document).unbind('keydown').bind('keydown', function (event) {
            var doPrevent = false;
            if (event.keyCode === 8) {
                var d = event.srcElement || event.target;
                if ((d.tagName.toUpperCase() === 'INPUT' &&
                     (
                         d.type.toUpperCase() === 'TEXT' ||
                         d.type.toUpperCase() === 'EMAIL' ||
                         d.type.toUpperCase() === 'DATE')
                     ) ||
                     d.tagName.toUpperCase() === 'TEXTAREA') {
                    doPrevent = d.readOnly || d.disabled;
                }
                else {
                    doPrevent = true;
                }
            }

            if (doPrevent) {
                event.preventDefault();
            }
        });           
    }

1 个答案:

答案 0 :(得分:0)

在所有现代浏览器中单击退格键是"返回"的快捷方式。你无法覆盖它。
如果网页可以阻止BackspaceCtrl+WAlt+F4的默认行为,您将不会感到高兴。

您可能希望使用事件委派,而不是检查event.target

$(document).on('keydown', 'input', function (event) {
    if (event.keyCode === 8 && 
        ['TEXT', 'EMAIL', 'DATE'].indexOf(this.type.toUpperCase()) > -1) {
        event.preventDefault();
    }
});         

一些重要的注释:

  • bind是一种弃用的方法。使用.on()
  • 如果文档是聚焦的,而不是输入,那么无论如何都会进行导航,并且无法阻止它
  • 实际上不需要为只读和禁用输入实现此类行为。所有现代浏览器禁止编辑只读或禁用输入本身