2009-11-18 4 views
29
$("#myinputfield").focus(); 

Si vous effectuez cette opération sur un champ de saisie dont la valeur est déjà définie, la valeur actuelle est sélectionnée. Comment puis-je me concentrer sur le champ sans sélectionner le texte?Champ de saisie de mise au point avec JQuery sans sélection du texte de la valeur actuelle

+0

Pourquoi voudriez-vous faire cela? Si vous tabulez dans un champ, il est également sélectionné. C'est le comportement standard de l'utilisateur. Où pensez-vous que le signe d'appel soit? (Début du texte? Fin du texte?) – Phrogz

+0

@Phrogz il pourrait se comporter de la même façon que les textareas font maintenant (le contenu n'est pas sélectionné lors d'un tabulation en un). Ce n'est pas la même chose pour tous les navigateurs, mais tant que c'est cohérent. – MSpreij

Répondre

27

J'ai cherché un peu et j'ai découvert que vous deviez redéfinir votre valeur dans le champ désiré après l'avoir focalisé.

+0

Voir http://stackoverflow.com/questions/13371430/jquery-focus-is-highlighting-all-pre-filled-text – gibberish

+1

Cela ne semble pas être le cas. travailler en chrome lorsque le champ est marqué. –

26

Que diriez-vous de quelque chose comme ceci où vous définissez la valeur du champ d'entrée à lui-même après la mise au point?

$("#myinputfield").focus().val($("#myinputfield").val()); 
3

Avez-vous essayé?

var txt = $("#myinputfield").val(); 
$("#myinputfield").focus(); 
$("#myinputfield").val(txt); 
6

D'autres réponses suggèrent de définir la valeur du champ d'entrée sur lui-même après la mise au point. Si dans Firefox, le curseur apparaît au début de l'entrée et que vous le souhaitez à la fin, une légère modification est nécessaire. Vous devrez d'abord définir la valeur vide, puis la définir sur la valeur précédente.

var value = $("#myinputfield").val(); 
$("#myinputfield").focus().val('').val(value); 
0
function focusField(id){ 
    var inputField = document.getElementById(id); 
    if (inputField != null && inputField.value.length != 0){ 
     if (inputField.createTextRange){ 
      var FieldRange = inputField.createTextRange(); 
      FieldRange.moveStart('character',inputField.value.length); 
      FieldRange.collapse(); 
      FieldRange.select(); 
     }else if (inputField.selectionStart || inputField.selectionStart == '0') { 
      var elemLen = inputField.value.length; 
      inputField.selectionStart = elemLen; 
      inputField.selectionEnd = elemLen; 
      inputField.focus(); 
     } 
    }else{ 
     inputField.focus(); 
    } 
} 
0
$(document).ready(function() { 
    var $field = $("#formloginusername"), 
     oldVal = $field.val(); 
    $field.focus().val('').val(oldVal); 
}); 

DEMO: http://jsfiddle.net/X7Y8S/

j'ai pris le code & démo de la réponse de Ahren dans d'autres sujet, je pense qu'il est utile.

0

Cette solution fonctionne très bien pour moi:

$("#myinputfield").focus(function (event) { 
    var value = $("#myinputfield").val(); 
    setTimeout(function() { 
    $("#myinputfield").val(value); 
    },10); 
}); 
Questions connexes