2011-06-24 3 views
9

Je suis en train de sélectionner le texte dans une zone d'entrée en lecture seule, en utilisant jQuery, voici ce que j'ai:Sélectionnez le texte sur le focus

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

Lorsque je clique sur l'entrée cependant, il sélectionne rapidement toutes les texte, il "clignote", puis il revient à l'état normal d'être désélectionné.

Des idées dans tout cela?

+0

Cela semble fonctionner pour moi, même si cela dépend où je clique. Cliquer sur la fin du contenu du texte fonctionne bien, cliquer au milieu fait le clin d'œil que vous décrivez la première fois et ensuite fonctionne la deuxième fois. –

+0

J'ai testé le code ci-dessus dans jquery 1.4.3 et ça marche bien! –

Répondre

4

Le problème est dû au fait que la zone de saisie est en lecture seule (comme vous l'avez mentionné dans la question).
(ce n'est pas un jQuery ou javascript problème)

IE, FF et Opera ont pas de problème. Mais Chrome et Safari exposition, la question que vous mentionnez ..

On dirait que la mise en œuvre d'une autre, et je ne suis pas sûr que vous pouvez travailler autour de ça ..

démo pour présenter (vérifier dans tous les navigateurs avec la console ouverte)
http://jsfiddle.net/gaby/N9qzq/3/

+0

Merci .. Il faudra regarder une autre méthode, ne fonctionnera pas dans Chrome. – dzm

0

En raison de l'incohérence que les gens mentionner, vous pouvez utiliser les CSS pour simuler votre sélection? Lorsque l'entrée reçoit le focus, appliquez CSS color et background-color afin qu'il semble être sélectionné.

+0

Absolument pas. Le but est de permettre à l'utilisateur de copier/coller le texte sur le terrain. –

1

Il y a un peu de bizarrerie ici. focus se produit sur mousedown, mais le placement du curseur se produit sur click (c'est-à-dire un mousedown suivi d'un mouseup). Lorsque le curseur est placé, toute sélection disparaît.

Donc, vous voudrez probablement garder votre événement focus (pour et trigger fins tabulant ing) mais aussi ajouter un click ou un gestionnaire mouseup pour faire la sélection réelle dans le cas d'un clic.

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

Le if existe de sorte qu'une fois qu'un utilisateur a un texte personnalisé dans votre entrée, ils peuvent cliquer autour sans sélectionner le texte. Bien que cela ne s'applique pas vraiment à une entrée de texte readonly, il peut être supprimé en toute sécurité.

Éditer: Le code semble au mieux incohérent, ce qui peut ne pas être la solution.

0

D'après ce que Gaby a écrit dans leur poste, cette solution semble fonctionner pour moi:

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

Une combinaison des deux techniques a fonctionné pour moi, mais ma boîte n'a pas été en lecture seule. Le select() normal fonctionne tout de suite dans Firefox. Cependant, dans Safari, le mousquet et l'ordre des événements l'amènent à se désélectionner de nouveau sur mouseup. J'ai attaché un événement de mouseup qui commence un select sur un temporisateur retardé après que le mouseup ait fini d'interférer (si le texte est toujours le texte par défaut à remplacer).

Exemple:

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

Je l'ai de travail en utilisant le code ci-dessous.Ma version chrome: Version 24.0.1312.52

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

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

Hope this helps ...

+4

C'est la solution la plus propre, mais vous pouvez utiliser 'e.preventDefault()' au lieu de 'return false'. – iono

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

devrait fonctionner

+0

Cette fonctionnalité est la même que dans la question - elle aura le même problème. – Izkata

+2

L'événement est différent: cliquez au lieu de focus. Voir http://stackoverflow.com/questions/3150275/jquery-input-select-all-on-focus –

0

J'ai eu ce test de problème sur les navigateurs. Google a ce problème, je pense que Opera aussi. Firefox, IE ok. Je l'ai résolu par this.select() sur onclick et onfocus.

Questions connexes