2011-12-17 20 views
5

Voglio cambiare keycode in keydown (pressione tasto) in tutti gli input in una pagina. Voglio sostituire Enter keycode con il codice tasto TAB. Come posso farlo?Come simulare TAB su INVIO keypress in javascript o jQuery

grazie


EDIT 1)

Considerare questo codice:

<div> 
    <asp:RadioButtonList ID="RadioButtonList1" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
     <asp:ListItem>4</asp:ListItem> 
    </asp:RadioButtonList> 
    <br /> 
    <br /> 
    <asp:TextBox ID="TextBox1" runat="server">3333</asp:TextBox> 
    <br /> 
    <br /> 
    <asp:DropDownList ID="DropDownList1" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
    </asp:DropDownList> 
</div> 

che voglio quando l'utente preme Invio su eny di sopra fuoco di controllo passare al controllo successivo.

grazie

+2

È possibile trovare domande simili a http://stackoverflow.com/questions/1009808/enter-key-press-behaves-like-a-tab-in- javascript – Pavan

+0

non funziona per me – Arian

+0

Credo che valga la pena notare che cambiare il comportamento predefinito dei browser in genere non è una buona idea. Va contro ciò che gli utenti si aspettano accadrà quando viene premuto il tasto. –

risposta

-1

penso che questo lavoro:

$('input').live("keypress", function (e) { 
     /* ENTER PRESSED*/ 
     var OffSet = 0; 
     if (e.keyCode == 13) { 
      /* FOCUS ELEMENT */ 
      if ($(this).is("input[type='radio']")) { 
       var tblID = $(this).closest('table').attr('id'); 
       var radios = $('#' + tblID).find(":input"); 
       //alert(radios.index(this)); 
       OffSet = radios.length - radios.index(this) - 1; 
      } 
      //alert(OffSet); 

      var inputs = $(this).parents("form").eq(0).find(":input"); 
      var idx = inputs.index(this); 
      inputs[idx + OffSet].blur(); 

      try { 
       inputs[idx + OffSet].selectionStart = inputs[idx + OffSet].selectionEnd = -1; 
      } catch (e) { 

      } 
      if (idx == inputs.length - 1) { 
       inputs[0].select(); 
      } else { 
       inputs[idx + 1 + OffSet].focus(); // handles submit buttons 
       try { 
        inputs[idx + 1 + OffSet].select(); 
       } catch (e) { 
       } 
      } 
      return false; 
     } 
    }); 
2

Spero che questo funziona

$('input,textarea').keydown(function(){ 
    if(event.keyCode==13) { 
    event.keyCode = 9; 
    } 
}); 

Modifica

Prova questo http://jsfiddle.net/GUmUg/. Giocare con selettori per fare questo lavoro, come non so asp

$('input,textarea').keypress(function(e){ 
    if(e.keyCode==13) { 
    $(this).next().focus(); 
    } 
}); 
+0

Non funziona per me. Lo provi? – Arian

+0

no non l'ho provato – aWebDeveloper

+0

per favore vedi il mio Edit 1 – Arian

3

Questo codice è quello di sostituire entrare con carattere di tabulazione:

$("#wmd-input").bind("keypress", function(e) { 
    if (e.keyCode == 13) { 
     var input = $(this); 
     var inputVal = input.val(); 
     setTimeout(function() { 
     input.val(inputVal.substring(0,inputVal.length) + "\t"); 
     }, 1); 
    } 
}); 

Live Demo

UPDATE:

Questo codice è per mettere a fuoco sull'elemento successivo:

$(document).ready(function() { 
    $("input,select").bind("keydown", function (e) { 
     if (e.keyCode == 13) { 
      var allInputs = $("input,select"); 
      for (var i = 0; i < allInputs.length; i++) { 
       if (allInputs[i] == this) { 
        while ((allInputs[i]).name == (allInputs[i + 1]).name) { 
         i++; 
        } 

        if ((i + 1) < allInputs.length) $(allInputs[i + 1]).focus(); 
       } 
      } 
     } 
    }); 
}); 
+0

mi dispiace non funziona per me. Sono al cromo – aWebDeveloper

+0

Immagino di aver frainteso la domanda. Intendi concentrarti su altri elementi su TAB? –

+0

Non funziona. Per favore, vai al mio Edit 1. Voglio che il focus vada al prossimo controllo – Arian

1
$('input').on('keydown',function(e){ 
    var keyCode = e.keyCode || e.which; 
    if(e.keyCode === 13) { 
     e.preventDefault(); 
     $('input')[$('input').index(this)+1].focus(); 
     } 
}); 

controllo violino qui: http://jsfiddle.net/Pd5QC/

+0

Non funziona.Per favore vedere il mio Modifica 1 – Arian

+1

hai ottenuto ... ho aggiornato il codice .. controlla anche il violino .. –

6

Ho avuto un problema simile, dove volevo premere + sul tastierino numerico alla scheda al campo successivo. Ora ho rilasciato una libreria che penso ti aiuterà.

PlusAsTab: Un plug-in jQuery per utilizzare il tasto numerico plus come equivalente a tasto di tabulazione.

Dal momento che si desidera inserire / invece, è possibile impostare le opzioni. Scopri la chiave che desideri utilizzare con lo jQuery event.which demo.

JoelPurra.PlusAsTab.setOptions({ 
    // Use enter instead of plus 
    // Number 13 found through demo at 
    // https://api.jquery.com/event.which/ 
    key: 13 
}); 

quindi attivare la funzionalità aggiungendo plus-as-tab="true" ai campi del modulo che si desidera utilizzare Enter-as-scheda in, o qualche altro elemento che contiene questi campi di modulo. I pulsanti di opzione non dovrebbero essere un problema, in quanto sono coperti dalla mia altra libreria, EmulateTab - vedere autonavigation of radio buttons in that demo.

<div plus-as-tab="true"> 
    <!-- all focusable elements inside the <div> will be enabled --> 
    <asp:RadioButtonList ID="RadioButtonList1" runat="server"> 
    <!-- Radio buttons should not be a problem. --> 
    </asp:RadioButtonList> 
</div> 

Potete provare voi stessi nel PlusAsTab enter as tab demo.

+0

Mi piace il tuo plug in Joel, ma non sembra prestare attenzione al tabindex quando si utilizza l'immissione come esempio di tabulazione. ( –

+1

@EdDeGagne: 'tabindex' viene ignorato dalla progettazione - vedi [SkipOnTab rispetto a tabindex] (https://github.com/joelpurra/skipontab/wiki/SkipOnTab-versus-tabindex). Probabilmente dovresti scrivere qualche cosa simile o collegamento a quella pagina da PlusAsTab e EmulateTab. –

+1

Buon plugin funzionante! Buona documentazione – gicalle

1

Il modo in cui lo faccio è utilizzare jquery per ciascuno sopra la selezione e concentrarsi sull'elemento dopo la corrente su cui si è attivi.

$(document).on('keyup', '.my-input', function (ev) { 

    if (ev.keyCode == '13') { 
     var currentInput = this; 
     var isOnCurrent = false; 

     $('.my-input').each(function() { 

      if (isOnCurrent == true) { 
       $(this).focus(); 
       return false; 
      } 

      if (this == currentInput) { 
       isOnCurrent = true; 
      } 

     }); 
    } 
}); 
+0

scusa, non funziona – Arian

0

Ho creato un simple jQuery plugin che risolve questo problema. Usa il selettore ': tabbable' dell'interfaccia utente di jQuery per trovare il successivo elemento 'tabbable' e selezionarlo. utilizzo

Esempio:

// Simulate tab key when enter is pressed   
$('.myElement').bind('keypress', function(event){ 
    if(event.which === 13){ 
     if(event.shiftKey){ 
      $.tabPrev(); 
     } 
     else{ 
      $.tabNext(); 
     } 
     return false; 
    } 
}); 
-1
$(document).ready(function() { 

//Objetos con CssClass="EntTab" sustituye el Enter (keycode 13) por un Tabulador (keycode 9)!! 

    $(".EntTab").bind("keypress", function(e) { 
     if (e.keyCode == 13) { 
      var inps = $("input, select"); //add select too 
      for (var x = 0; x < inps.length; x++) { 
       if (inps[x] == this) { 
        while ((inps[x]).name == (inps[x + 1]).name) { 
         x++; 
        } 
        if ((x + 1) < inps.length) $(inps[x + 1]).focus(); 
       } 
      } e.preventDefault(); 
     } 
    }); 
}); 
Problemi correlati