2011-06-24 12 views
9

Próbuję zaznaczyć tekst w polu tekstowym tylko do odczytu, przy użyciu jQuery, to co mam:Zaznacz tekst na naciskiem

$('input').focus(function(){ 
     $(this).select(); 
    }) 

Kiedy klikam na wejściu jednak szybko wybiera wszystko tekst "miga", a następnie wraca do normalnego stanu bycia niezaznaczonym.

Wszelkie pomysły na ten temat?

+0

Wydaje się to działać dobrze, chociaż zależy to od tego, gdzie kliknę. Kliknięcie na końcu treści tekstowej działa dobrze, kliknięcie środkowego powoduje miganie, które opisujesz za pierwszym razem, a następnie działa po raz drugi. –

+0

Przetestowałem powyższy kod w jquery 1.4.3 i działa dobrze! –

Odpowiedz

4

Problem polega na tym, że pole wejściowe jest tylko do odczytu (jak wspominasz w swoim pytaniu).
(nie jest to problem, jQuery lub javascript)

IE, FF i Opera nie ma problemu. Ale Chrome i Safari eksponat kwestia wspomina ..

Wygląda innej realizacji, a nie jestem pewien, że można pracować wokół tego ..

demo do zaprezentowania (kontrolę we wszystkich przeglądarkach z konsoli otwartej)
http://jsfiddle.net/gaby/N9qzq/3/

+0

Dziękuję .. Będę musiał sprawdzić inną metodę, nie będzie działać w Chrome. – dzm

0

Ze względu na niespójność, że ludzie wspomnieć, można użyć CSS, aby symulować swój wybór? Gdy wejście otrzyma fokus, zastosuj CSS color i background-color, więc wygląda na to, że jest zaznaczone.

+0

Absolutnie nie. Chodzi o to, aby użytkownik mógł wygodnie kopiować/wklejać tekst w polu. –

1

Dzieje się tu trochę dziwności. focus dzieje się po mousedown, ale umieszczenie kursora dzieje się na click (tj. mousedown, a następnie mouseup). Po ustawieniu kursora dowolna selekcja zniknie.

Tak, będziesz najprawdopodobniej chcą zachować swoją imprezę focus (za tabulatorem i trigger celów ing), ale również dodać click lub mouseup obsługi do zrobienia faktyczna wybierz w przypadku kliknięcia.

$('input[type="text"]').focus(function() { 
    $(this).select(); 
}).click(function() { 
    if ($(this).val() === 'Your default value') 
    { 
     $(this).select(); 
    } 
}); 

if istnieje tak, że gdy użytkownik dostosować tekst w danych wejściowych, mogą kliknąć wokół bez zaznaczania tekstu. Chociaż tak naprawdę nie odnosi się do wprowadzania tekstu readonly, więc może być bezpiecznie usunięty.

Edytuj: Kod wydaje się być w najlepszym razie niespójny, więc może nie być rozwiązaniem.

0

podstawie tego, co Gaby napisał w swoim poście, to rozwiązanie wydaje się działać dla mnie:

$('input').focus(function(){ 
    var _self = this; 
    setTimeout(function(){ console.log(_self.select())},100) 
    }) 
5

Połączenie tych dwóch technik pracował dla mnie, choć moja skrzynka nie została tylko do odczytu. Normalny select() działa od razu w Firefoksie. Jednak w Safari, mouseup i kolejność zdarzeń powoduje, że ponownie odznaczy się on po mouseup. Dołączyłem zdarzenie mouseup, które rozpoczyna wybieranie opóźnionego timera, po tym, jak zakończyło się przełączanie myszy (jeśli tekst nadal jest tekstem domyślnym do zastąpienia).

Przykład:

$('#your_selector').focus(function() { 
    $(this).select(); 
}).mouseup(function() { 
    if ($(this).val() === 'Enter search terms here'){ 
    var _self = this; 
    setTimeout(function(){ _self.select()},30) 
    } 
}); 
14

mam to działa za pomocą poniższego kodu.Moja wersja chrom: Version 24.0.1312.52

$("#inputid").on("focus",function(e){ 
    $(this).select(); 
}); 

$("#inputid").on("mouseup",function(e){ 
    return false; 
}); 

Nadzieja to pomaga ...

+4

To jest najczystsze rozwiązanie, ale możesz użyć 'e.preventDefault()' zamiast 'return false'. – iono

2
<input onClick="this.select()" value="Blabla und Blublu" type="text" /> 

Powinna działać

+0

Ta funkcja jest taka sama jak w pytaniu - będzie miała ten sam problem. – Izkata

+2

Zdarzenie jest inne: kliknij zamiast fokusa. Zobacz http://stackoverflow.com/questions/3150275/jquery-input-select-all-on- focus –

0

miałem tego problemu na testy przeglądarek. Google ma ten problem, myślę, że też Opera. Firefox, IE ok. Rozwiązałem go przez this.select() na onclick i onfocus.