2012-08-26 12 views
5

Vorrei avviare un'azione (abilitando il completamento automatico) quando l'utente digita '@'. Tuttavia non so come farlo correttamente. Ho disponibile jQuery.Rileva carattere immesso con JavaScript

Di solito su una tastiera QWERTY, è in questo modo:

$('textarea').live('keydown', function(e) { 
    if (e.which === 50) { 
    console.log('@ has been entered.'); 
    } 
}); 

Tuttavia non funziona correttamente su una tastiera AZERTY. KeyCode = 50 corrisponde alla chiave é~/2. Per digitare "@" nella tastiera AZERTY, è la chiave AltGr + à@/0.

Modifica: non ero chiaro. Il completamento automatico inizia quando @ viene inserito e solo dopo. Esempio, quando qualcuno inserisce "Hello @", quindi inizia, tuttavia quando digita "Hello @nothing else" il completo non farà nulla. Esempio: http://mrkipling.github.com/jQuery-at-username/ (funziona solo sulla tastiera QWERTY).

+0

D'oh, non ho notato quello che StackOverlow hanno esattamente quello che mi serve con la funzione di completamento automatico nome utente nel commento. – jcisio

risposta

3

Uso keypress invece di keydown. Mentre keydown si riferisce a ogni pressione di un tasto, keypress si riferisce ai caratteri tradotti, quindi ad esempio a può essere diverso da a mentre il tasto Maiusc viene premuto, i caratteri composti funzionano, i tasti morti funzionano e vengono gestite altre differenze nelle mappature della tastiera .

+0

Esattamente! L'evento 'keypress' rileva correttamente il codice di' @ '(64). Penso che dovrò separare i due eventi: uno per rilevare il carattere '@', un altro usando 'keydown' per rilevare i tasti freccia per la parte" completa ". – jcisio

+0

Ho fatto solo questa combinazione in autocompleti. –

+0

@jcisio Questo ha senso. Tuttavia, non sono sicuro del supporto browser unificato di 'keypress'. – VisioN

0

L'unica altra opzione che viene in mente sarebbe un timer che controlla il contenuto dell'input di testo.

var patt=new RegExp(/^@/); 
var charCheck = setInterval(function(){ 
    if (patt.test($("#textInput").val())){ 
    // initiate autocomplete 
    } 
},100); 

Questo codice ispezionare il contenuto dell'elemento #textInput e vedere se corrisponde all'espressione regolare di un simbolo @ all'inizio della stringa. In caso affermativo, la funzione test() verrà valutata su true e sarà possibile avviare il codice di completamento automatico.

+0

Dovrebbe cercare @ ovunque nell'area di testo, e il completamento automatico inizia solo quando il cursore è a destra dopo il carattere '@'. Penso che sia ancora possibile verificare tutte queste condizioni, tuttavia esiste una soluzione più semplice? – jcisio

+0

@jci - Dovresti menzionare le specifiche sulla posizione del cursore nel tuo post principale. Inoltre, se vuoi cercare quel simbolo in qualsiasi punto della stringa, rimuovi semplicemente il simbolo '^'. – Lix

2

Come verificare se @ è stato immesso come ultimo carattere nel valore campo?

$("body").on("keyup", "textarea", function(e) { 
    if (this.value.indexOf("@") == this.value.length - 1) { 
     console.log("Starting autocomplete"); 
    } 
});​ 

DEMO:http://jsfiddle.net/FKhPW/2/

+0

Grazie, fondamentalmente fa quello che mi piacerebbe fare. Ci sono alcuni casi, ad esempio, quando l'utente finisce un messaggio, quindi si sposta all'inizio e aggiunge "@nomeutente" che non funzionerà. Cercherò di adattarlo. – jcisio

+0

non funziona. la sua accensione anche per tasto indietro e tasto shift – Ashirvad

+0

@jcisio Sì, potrebbe essere necessario qualche correzione. Almeno non vedo altre soluzioni veloci e funzionanti. – VisioN

0

Qui si va demo funzionante:http://jsfiddle.net/LxpQQ/

Dal mio vecchio risposta qui:

jquery autocomplete using '@'

spero che andrà bene si causa :)

codice

source: function(request, response) { 
      if (request.term.indexOf("@") >= 0) { 
       $("#loading").show(); 
       getTags(extractLast(request.term), function(data) { 
        response($.map(data.tags, function(el) { 
         return { 
          value: el.name, 
          count: el.count 
         } 
        })); 
        $("#loading").hide();      
       }); 
      } 
     }, 
+0

Grazie, mentre evito l'interfaccia utente di jQuery (e la sua libreria di autocompletamento), questo esempio ha pochi punti intelligenti, come se si ottenga solo l'ultimo termine ecc. Sto segnalibro per un utilizzo successivo. – jcisio

+0

@jcisio Cooleos ':)' –

0

Utilizzare event.key e JS moderno, controllare direttamente per @!

Nessun codice numerico. Puoi controllare direttamente la chiave.

const input = document.getElementById("textarea"); 
input.addEventListener("keydown", function (event) { 
    if (event.key === "@") { 
     // Do something 
    } 
}); 

Mozilla Docs

Supported Browsers

Problemi correlati