2

作为用户要求,我必须禁用退格按钮在历史记录中导航。我做了以下代码

   //Bind back nutton to prevent escaping the page with backspace
$j(document).unbind('keydown').bind('keydown', function (event) {
  var doPrevent = false;

  if (event.keyCode === 8) 
  {
      if(event.target == document.body){
          if(event.preventDefault()){ event.preventDefault(); }
          event.stopEvent();
          event.returnValue = false;
      }
  }
});

这在除 IE7 和 IE8 之外的所有浏览器中都能完美运行。我无法将输入类型绑定为异常,因为 SharePoint 中的内容编辑器允许修改元素 div、段落等中的文本。该解决方案在 IE8 中不起作用,因为 event.target 返回鼠标悬停时存在的元素没有具有焦点的控件。

4

4 回答 4

1

自己解决,结案。

编辑:2012 年使用 SharePoint 2010 和 jquery 1.x,不确定今天。

//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function (event) {
    if (event.keyCode === 8) 
    {
     var doPrevent = true;
     //Chrome, FF, Safari
     if(event.target == document.body){
      doPrevent = true;
     }
     //IE
     else
     {
      var nodeName = event.target.nodeName.toLowerCase();
      if((nodeName == "input" && event.target.type == "text") || nodeName == "textarea")
      {
       doPrevent = false;
      }
      var SPEditTabInstance = $(document).find("li[id='Ribbon.EditingTools']");
      if(SPEditTabInstance != "undefined" && SPEditTabInstance != null && $(SPEditTabInstance).children().length > 0){
       doPrevent = false;
      }
     }

     if(doPrevent)
     {
      //Chrome, FF, Safari
      if(event.preventDefault()){ event.preventDefault(); }
      //IE
      else
      {
       event.returnValue = false;
      }
     }
    }
});
于 2012-11-23T17:01:52.880 回答
1

我建议对 Machinegon 的修复进行调整。如果用户在文本类型的只读输入控件中单击退格键,该代码还应防止默认行为。

if ((nodeName === "input" && event.target.type === "text") || 
     nodeName === "textarea") {
     doPrevent = event.target.readOnly;
}
于 2017-01-17T23:52:48.660 回答
0

尝试向创建需求的人推回,从可用性的角度来看,打破所有浏览器无处不在且重要的功能并不是一个特别好的想法。这样做的成本(包括向用户解释为什么他们的浏览器“不再工作”的时间)将大大超过让后退按钮偶尔有点烦人的成本。

于 2012-11-22T00:42:54.963 回答
0

Machinegon 的答案效果很好,我只是添加它来处理另一个案例。

如果输入框是readonlydisabled,并且您在它们上按退格键,则它会转到上一页。因此,以下代码将用于处理这种情况:

//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function(event) {
    if (event.keyCode === 8) {
        var doPrevent = true;
        //Chrome, FF, Safari
        if (event.target == document.body) {
            doPrevent = true;
        }
        //IE
        else {
            var nodeName = event.target.nodeName.toLowerCase();
            if (((nodeName == "input" && event.target.type == "text") || nodeName == "textarea") 
              && !event.target.disabled && !event.target.readOnly) {
                doPrevent = false;
            }
        }

        if (doPrevent) {
            //Chrome, FF, Safari
            if (event.preventDefault()) {
                event.preventDefault();
            }
            //IE
            else {
                event.returnValue = false;
            }
        }
    }
});
于 2018-07-31T09:14:22.023 回答