2009-11-20 31 views
13

これはIEで動作しますが、OperaやFirefoxで動作させることができません。現在のフォーカスがSELECTドロップダウンである場合に限り、バックスペースがナビゲートしないようにしたい。バックスペースがjavascriptで戻るのを防ぐ方法を教えてください。

<html> 
<body> 
<select id="testselect"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    <option value="4">4</option> 
</select> 
<script language="javascript"> 
    document.getElementById("testselect").onkeydown = function(e) { 
     if(!e) { 
      e = event; 
     } 
     alert(e.keyCode); 
     if (e.keyCode == 8 || e.keyCode == 46) { 
     e.returnValue = false; 

     e.cancelBubble = true; 
     if (e.stopPropagation) { e.stopPropagation(); alert("stoppropagation");} 
     if (e.preventDefault) { e.preventDefault(); alert("preventdefault");} 
     return false; 
     } 
    }; 
</script> 
</body> 
</html> 
+1

1を次のようにのみ選択ドロップダウン入力コントロールとテキストエリアを除いて、ページ内のすべての要素については

$(document).ready(function(){ //for IE use keydown, for Mozilla keypress //as described in scr: http://www.codeproject.com/KB/scripting/PreventDropdownBackSpace.aspx $('select').keypress(function(event){if (event.keyCode == 8) {return false;}}); $('select').keydown(function(event){if (event.keyCode == 8) {return false;}}); } 

ためです「backspace navigating」がキーアップではなくキーアップで動作することを認識するのを助けてくれた。私はいつもページごとに1回ヒットしなければならないと考えていましたが、戻ってみたいと思っていました。 – Mercurybullet

+0

ああ、Firebugをインストールしましたが、このサンプルはFirefoxで動作します。理由は分かりません。 – hova

答えて

1

まあ、Operaは OnKeyPressイベントでキャンセルするイベントを必要としていることが判明し、 onkeydownではありません。

参考:jqueryのを使用してhttp://jimblackler.net/blog/?p=20

+0

良好な観察。よくやった – OptimusCrime

0

this articleからプロジェクトのソースコードを確認したい場合があります。彼は、さまざまなブラウザのバックスペースキーとどう競合しなければならないかについて詳しく説明します。

2

これは私が思ったよりもやっかいです。あなたがページからバックスペースからユーザーを防止している理由に応じて、thisのようなものは、あなたのために働くかもしれない:

<script type="text/javascript"> 

     var bShowWarning = false; 

     document.getElementById("testselect").onkeydown = function(e) { 
      if (!e) { 
       e = event; 
      } 
      if (e.keyCode == 8 || e.keyCode == 46) { 
       bShowWarning = true; 
      } 
     }; 

     function UnLoadWindow() { 
      if (!bShowWarning) return; 
      return 'If you leave the page your data will be lost.'; 
     } 

     window.onbeforeunload = UnLoadWindow; 
    </script> 
9

-

<script type="text/javascript"> 

    //set this variable according to the need within the page 
    var BACKSPACE_NAV_DISABLED = true; 

    function fnPreventBackspace(event){if (BACKSPACE_NAV_DISABLED && event.keyCode == 8) {return false;}} 
    function fnPreventBackspacePropagation(event){if(BACKSPACE_NAV_DISABLED && event.keyCode == 8){event.stopPropagation();}return true;} 

    $(document).ready(function(){ 
     if(BACKSPACE_NAV_DISABLED){ 
      //for IE use keydown, for Mozilla keypress 
      //as described in scr: http://www.codeproject.com/KB/scripting/PreventDropdownBackSpace.aspx 
      $(document).keypress(fnPreventBackspace); 
      $(document).keydown(fnPreventBackspace); 

      //Allow Backspace is the following controls 
      $('input').keypress(fnPreventBackspacePropagation); 
      $('input').keydown(fnPreventBackspacePropagation); 
      $('textarea').keypress(fnPreventBackspacePropagation); 
      $('textarea').keydown(fnPreventBackspacePropagation); 
     } 
    }); 

</script> 
関連する問題