2012-11-21 47 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; 
}