2009-11-20 12 views
13

Esto funciona en IE, pero no puedo hacerlo funcionar en Opera o Firefox. Quiero evitar que Backspace navegue lejos si y solo si el foco actual es el menú desplegable SELECT.¿Cómo puedo evitar que Backspace navegue nuevamente en 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 por ayudarme a darme cuenta de que la "navegación de retroceso" funciona en el teclado y no en la tecla . Siempre pensé que tenía que golpearlo una vez por página para volver, pero ahora me di cuenta de que podía mantenerlo presionado. – Mercurybullet

+0

Oh, instalé Firebug y ahora esta muestra funciona en Firefox. No tengo idea por qué. – hova

Respuesta

0

Es posible que desee verificar el código fuente del proyecto en this article. Él entra en detalles sobre cómo tuvo que lidiar con la tecla de retroceso en diferentes navegadores.

2

Eso es más complicado de lo que hubiera pensado. Dependiendo de la razón por la que está impidiendo que el usuario backspacing fuera de la página, algo así como this podría funcionar para usted:

<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

usando jQuery - por sólo seleccione desplegable

$(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;}}); 
} 

Para todos los elementos de la página, excepto los controles de entrada y área de texto es el siguiente

<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> 
Cuestiones relacionadas