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、paragraphなどのテキストを変更できるため、入力タイプを例外としてバインドできません。event.targetがマウスオーバーにある要素を返すため、IE8ではソリューションが機能しません。フォーカスのあるコントロールはありません。

4

4 に答える 4

1

自分で解決し、ケースを閉じました。

編集:2012年にSharePoint2010とjquery1.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の答えはうまく機能します。もう1つのケースを処理するためにMachinegonに追加しています。

入力ボックスがまたはのreadonly場合disabled、およびそれらのバックスペースを押すと、前のページに移動します。したがって、次のコードはそのシナリオを処理するために機能します。

//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 に答える