2014-12-29 16 views
5

Sto tentando di inserire quattro spazi quando si preme il tasto Tab. Stavo usando il seguente codice (vedi spaces = "\t"), ma quando lo passo a spaces = " " viene inserito solo uno spazio quando premo il tasto tab. Ho anche provato "" + "" + "" + " ":Inserire quattro spazi anziché la scheda

$(function() { 
    $('textarea').keydown(function(e) { 
    var keyCode = e.keyCode || e.which; 

    if (keyCode == 9) { 
     e.preventDefault(); 
     var start = $(this).get(0).selectionStart; 
     var end = $(this).get(0).selectionEnd; 

     // set textarea value to: text before caret + tab + text after caret 
     spaces = "\t" 
     $(this).val($(this).val().substring(0, start) 
        + spaces 
        + $(this).val().substring(end)); 

     // put caret at right position again 
     $(this).get(0).selectionStart = 
     $(this).get(0).selectionEnd = start + 1; 
    } 
    }); 
}); 

NOTA: Questo è quello di inserire spazi in un browser-based textarea/ide.

+2

per me funziona in Chrome/IE9/FF32 - http://jsfiddle.net/17auq970/ - quale browser stai usando? – Rhumborl

+1

Non esattamente correlati, ma il controllo 'e.which' non è necessario, jQuery normalizza la proprietà per te (' which'). – Teemu

+0

Grazie a @Teemu buon pensiero – maudulus

risposta

7

Il tuo codice funziona bene, ma è sufficiente mettere accento circonflesso a il posto sbagliato Modificare l'ultima riga a:

this.selectionStart = this.selectionEnd = start + spaces.length; 

DEMO:http://jsfiddle.net/qdqrs3cw/

+0

Oh wow, mi sono perso completamente. Grazie! – maudulus

+0

@maudulus Si consiglia ':)' Anche nella demo ho sostituito '$ (this) .get (0) .selection ...' con internamente la stessa alternativa 'this.selection ...' e altri bit minori a rendere il codice più veloce e avere un aspetto migliore. – VisioN

-1

tenta di inserire "&nbsp&nbsp&nbsp&nbsp" invece di quattro spazi

PS mi dispiace non ho visto che gli spazi sono necessari in textarea, in questo caso i soggetti HTML non sarà di aiuto

+2

'