2011-12-20 13 views
13

Widziałem kilka podobnych pytań do kopalni tutaj, ale tak naprawdę nie odpowiedzieć mi ...

Więc robię to: (wewnątrz gotowej funkcji dokumentu)

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

ideia jest, gdy użytkownik koncentruje się na input nazywa #dest przyciąć wszystkie spacje na nim (wcześniej dodane za pomocą focusOut komfortu wizualnego).

W tej chwili nic się nie dzieje. :(

nadzieję, że ktoś może mi pomóc trochę tutaj.

Dzięki!


Czy jest to związane z problemem komputer? Przetestowałem cały kod dostarczony przez komentujących i żaden działa Używam Firefoksa i Safari pod OSX (Snow Leopard) 10.6.8, a także Safari pod 10.8.2 (Lion) i mam takie same wyniki ... Problem z OSX? - Wszystko jest ok, sprawdź mój ostatni edycja!


Finał Edycja i rozwiązanie dzięki Phil Klein

Mój problem był przy nieprawidłowo trim() funkcji jQuery za ... Według trim()documentation to sposób następujący:

$. Funkcja trim() usuwa wszystkie znaki nowej linii, spacje (w tym spacje nierozdzielające) oraz tabulatory od początku i końca podanego ciągu znaków . Jeśli te białe znaki pojawią się w środku ciągu znaków , zostaną zachowane.

Wczoraj nie czytałem ostatniej części, gdzie jest napisane from the beginning and end of the supplied string - Przepraszamy wszystkich. :(

szczęście i po rysunku powyżej, @Phil Klein zrozumiał swój błąd i pomógł mi z roztworu.

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

Można read more about the solution and see an example here

Dzięki @Phil Kleina, a także każdy, kto pomógł mi w tym;)

+1

Może komfort wizualny można osiągnąć za pomocą innych środków – Thilo

+0

Twoja funkcja jest zupełnie w porządku, trzeba tylko owinąć go z $ (function() {...} Kod ... –

+0

@Thilo - CSS padding każdego 3 numery? – TCB13

Odpowiedz

15

Poniższy przykład usuwa wszystkie spacje z zawartości pola tekstowego przy fokusie. Ten konkretny przykład wymaga jQuery 1.7+ ponieważ wykorzystuje nową .on() API:

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

Zobacz ten przykład: http://jsfiddle.net/RnZ5Y/5/

+1

Możesz chcieć uwzględnić kod w swojej odpowiedzi, jsfiddle nie zawsze jest dostępny. –

+0

Przykład nie działa, testowany w Firefoksie i Safari. Dzięki i tak. – TCB13

+0

Co nie działa? Testowałem w tych samych przeglądarkach. –

4

Wypróbuj te: $.trim($("#dest").val());
popraw mnie, jeśli się mylę !!

+0

.val() powinno być w porządku dla pole tekstowe: – Thilo

+0

masz jeszcze jedną ')' niż potrzebną na końcu, ale '$ .trim ($ (" # d est "). val());' nadal nie działa ... dzięki – TCB13

+0

@ TCB13 nawias na końcu to $ .trim –

0

Jeśli powyższy kod jest wykonywany zanim strona nie jest w pełni gotowy to jest to bardzo prawdopodobne, że #dest ISN 't znalezione przez jquery i kod do odsłuchania zdarzenia nie zostanie wykonany.

+0

Kod był w funkcji "gotowy dokument", przepraszam, nie mówiąc tego na początku. W każdym razie, poszedłem do szału i próbowałem umieścić kod w tym: '$ (window) .bind (" load ", function() {' i nadal nie działa. Dzięki. – TCB13

0

Ta funkcja działa poprawnie w przypadku scenariusza. Jak ma to tylko jedna przestrzeń pomiędzy charakterem i nie pozwala na więcej niż 2 miejsca

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

Ta sprawa została zamknięta dawno temu. I przyznałem przed błędem, gdy brakowało czytania dokumentów. – TCB13

2

spróbować $("#dest").val().trim();, pracował dla mnie. (? Wyściółka CSS)