2011-12-20 2 views
13

Ho visto alcune domande simili ai miei qui, ma in realtà non mi risponde ...

Così sto facendo questo: (All'interno della funzione pronta documento)

$("#dest").focusin(function() { 
    $("#dest").val($.trim($("#dest").val())); 
}); 

L'ideia è quando l'attenzione dell'utente su un input chiamato #dest assetto tutti i caratteri di spazio su di esso (precedentemente aggiunto usando focusOut per il comfort visivo).

In questo momento, non succede nulla. :(

La speranza che qualcuno mi può aiutare un po 'qui.

Grazie!


È questo il problema legato un computer? Ho provato tutto il codice fornito da commentatori e nessuno funziona. Sto usando Firefox e Safari sotto OSX (Snow Leopard) 10.6.8 e anche Safari sotto 10.8.2 (Lion) e ho ottenuto gli stessi risultati ... problema OSX? - Tutto ok, controlla il mio ultimo edit!


Modifica finale e la soluzione grazie a Phil Klein

Il mio problema stava usando in modo non corretto la funzione di jQuery trim() ... Secondo il trim()documentation lo fa il seguente:

Il $. la funzione trim() rimuove tutte le newline, gli spazi (inclusi gli spazi non interrompibili ) e le schede dall'inizio e alla fine della stringa fornita da . Se questi caratteri di spazi bianchi si trovano nel mezzo di la stringa, vengono conservati.

Ieri non ho letto l'ultima parte dove si dice from the beginning and end of the supplied string - Scusate tutti. :(

fortunato e dopo il disegno qui sopra, @Phil Klein capito il mio errore e mi ha aiutato con una soluzione:.

$(function() { 
    $("#dest").on("focus", function() { 
     var dest = $(this); 
     dest.val(dest.val().split(" ").join("")); 
    }); 
}); 

È possibile read more about the solution and see an example here

Grazie alla @Phil Klein e anche tutti coloro che hanno mi ha aiutato su questo;)

+1

Forse il comfort visivo può essere raggiunto usando altri mezzi (padding CSS?) – Thilo

+0

La tua funzione è perfettamente giusta, devi solo avvolgerla con $ (function() {... code ...} –

+0

@Thilo - CSS padding ogni 3 numeri? – TCB13

risposta

15

L'esempio seguente rimuove tutti gli spazi dal contenuto della casella di testo su attivo. Questo particolare esempio richiede jQuery 1.7+ dal momento che utilizza la nuova API .on():

$(function() { 
    $("#dest").on("focus", function() { 
     var dest = $(this); 
     dest.val(dest.val().split(" ").join("")); 
    }); 
}); 

Vedi questo esempio: http://jsfiddle.net/RnZ5Y/5/

+1

Si potrebbe voler includere il codice nella risposta, jsfiddle non è sempre accessibile. –

+0

L'esempio non funziona, testato su Firefox e Safari. Grazie comunque. – TCB13

+0

Che cosa non funziona? Ho provato con gli stessi browser. –

4

provare questi: $.trim($("#dest").val());
correggetemi se sbaglio !!

+0

.val() dovrebbe andare bene per un campo di testo – Thilo

+0

hai un altro ')' del necessario alla fine, ma '$ .trim ($ (" # d est "). val());' non funziona ancora ... grazie – TCB13

+0

@ TCB13 la parentesi alla fine è per $ .trim –

0

Se siete codice di cui sopra è in esecuzione prima che la pagina non è completamente pronto, allora è molto probabile che il #dest ISN trovato da jquery e il codice per ascoltare l'evento non viene eseguito.

+0

Il codice era in una funzione 'documento pronto', mi dispiace non averlo detto all'inizio. Ad ogni modo, sono impazzito e ho cercato di inserire il codice all'interno di questo: '$ (window) .bind (" load ", function() {' e ancora non funziona.) Grazie – TCB13

0

Questa funzione funziona correttamente per lo scenario. Come si sta prendendo un solo spazio tra il personaggio e non permettere più di 2 spazio

$(function() { 
$("#dest").on("focusout", function() { 
    var dest = $(this); 
    dest.val(jQuery.trim(dest.val()));   
    dest.val(dest.val().replace(/[ ]{2,}/, ' ')); 
}); 
}); 
+0

Questo caso è stato chiuso molto tempo fa. E ho ammesso prima dell'errore quando mancava la lettura dei documenti. – TCB13

2

provare $("#dest").val().trim();, ha funzionato per me.