2012-11-21 48 views
2

作为用户需求,我必须禁用退格按钮才能在历史记录中导航。我做了以下的一段代码防止Backspace按钮在Sharepoint 2010和IE中导航回退

//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返回当鼠标悬停时的元素没有重点的控制。

回答

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; 
     } 
    } 
    } 
}); 
+0

这不起作用。甚至$ j不起作用 – Zubair

+1

@Zubar你可以重新绑定jQuery($)到任何你喜欢的东西。在这种情况下$ j是矛盾的变量,它在2012年与2010年的sharepoint一起工作。它今天可能不会。 – Machinegon

+0

你有什么可以在现代浏览器中使用吗? – Zubair

0

尝试向创建要求打破无处不在的浏览器的所有浏览器的要求并不是一个特别好的主意从可用性的角度来看。这样做的成本(包括花费时间向用户解释为什么他们的浏览器“不再工作”)将大大超出后退按钮偶尔会有点烦人的成本。

+0

这些要求是直接来自客户端,并解释他们为什么我们不应该实现他们想要的功能就像是跟一块石头说话。我怀疑将使用此应用程序的用户甚至不知道浏览器中是否存在此后退功能。 – Machinegon

+0

然后,我仍然认为值得一试,让客户处于一个相信您的技术判断的位置。 – Nat

1

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

if ((nodeName === "input" && event.target.type === "text") || 
    nodeName === "textarea") { 
    doPrevent = event.target.readOnly; 
}