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

Facendo ciò su un campo di input con il valore già impostato, viene selezionato il valore corrente. Come posso focalizzare il campo senza selezionare il testo?Campo di input di messa a fuoco con JQuery senza selezionare il valore del valore corrente

+0

perché si vuole fare questo? Se si passa a un campo, viene anche selezionato. Questo è un comportamento standard degli utenti. Dove ti aspetti che il caret sia? (Inizio del testo? Fine del testo?) – Phrogz

+0

@Phrogz potrebbe comportarsi nello stesso modo in cui lo sono i textareas (i contenuti non sono selezionati quando si esegue il tabding in uno solo). Non è la stessa per tutti i browser, ma finché è coerente .. – MSpreij

risposta

27

Ho cercato un po 'e ho scoperto che dovresti reimpostare il valore nel campo desiderato dopo che è stato focalizzato.

+0

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

+1

Questo non sembra lavora in chrome quando il campo è inserito in schede. –

26

Che dire di qualcosa di simile in cui si imposta il valore del campo di input su se stesso dopo averlo messo a fuoco?

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

Hai provato questo?

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

Altre risposte suggeriscono di impostare il valore del campo di input su se stesso dopo averlo messo a fuoco. Se in Firefox, il cursore appare all'inizio dell'input e lo si desidera alla fine, è necessaria una leggera modifica. Dovrai prima impostare il valore come vuoto e poi impostarlo sul valore precedente.

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/

ho preso il codice & demo dalla risposta di Ahren in altro argomento, penso che sia utile.

0

Questa soluzione funziona molto bene per me:

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