Deselezionare contenuto di una textbox con javascript

Capisco che con javascript è possibile selezionare il contenuto di una casella di testo con il codice riportato di seguito (in jQuery):

$("#txt1").select();

C’è un modo per fare il contrario? Per deselezionare il contenuto di una textbox? Io ho la focus evento di una serie di caselle di testo set per selezionare il contenuto al loro interno. Ci sono volte che voglio mettere a fuoco un particolare textbox SENZA selezionarlo. Che cosa ho intenzione di fare è di chiamare l’attenzione per questo evento particolare, textbox, ma poi seguire con una chiamata per deselezionarla.

$("input[type=text]").focus(function() {
    $(this).select();
});

//code....

$("#txt1").focus();

//some code here to deselect the contents of this textbox

Tutte le idee?

Grazie!

 

8 Replies
  1. 18

    che dire di questo:

    $("input").focus(function(){
      this.selectionStart = this.selectionEnd = -1;
    });
    • funziona alla grande in IE9. FF sembra un po ‘ lento per deselezionare.
    • potrebbe essere che firefox è stato tenuto fino a 1,5 GB di ram, al momento di questa lentezza? mia piace fare che a destra prima di kill -9 it
  2. 8

    Se si assegna il valore della casella di testo a se stesso, ma deve deselezionare il testo.

  3. 3

    È necessario impostare il selectionStart e selectionEnd attributo. Ma per qualche ragione, l’impostazione di questi su focus evento non funziona (non ho idea del perché). Per farlo funzionare, impostare gli attributi dopo un piccolo intervallo.

      $(document).ready(function(){
        $('#txt1').focus(function(){
          setTimeout(function(){
            //set selection start, end to 0
            $('#txt1').attr('selectionStart',0);
            $('#txt1').attr('selectionEnd',0);
          },50);  //call the function after 50ms
        });
      });
  4. 1

    “Per mettere a fuoco un particolare textbox SENZA selezionare”:
    Vorrei utilizzare la parte di patch plugin jquery-fieldselection

    utilizzo che si può chiamare

    $('#my_text_input').setSelection({"start":0, "end":0}); //leaves the cursor at the left

    o utilizzare questa versione ridotta che posiziona il cursore alla fine del testo (per impostazione predefinita)

    (function() {
    var fieldSelection = {
        setSelection: function() {
            var e = (this.jquery) ? this[0] : this, len = this.val().length || ;
            var args = arguments[0] || {"start":len, "end":len};
            /* mozilla /dom 3.0 */
            if ('selectionStart' in e) {
                if (args.start != undefined) {
                    e.selectionStart = args.start;
                }
                if (args.end != undefined) {
                    e.selectionEnd = args.end;
                }
                e.focus();
            }
            /* exploder */
            else if (document.selection) {
                e.focus();
                var range = document.selection.createRange();
                if (args.start != undefined) {
                    range.moveStart('character', args.start);
                    range.collapse();
                }
                if (args.end != undefined) {
                    range.moveEnd('character', args.end);
                }
                range.select();
            }
            return this;
        }
    };
    jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
    })();

    utilizzato in questo modo:

    $('#my_text_input').setSelection(); //leaves the cursor at the right
  5. 0

    Piuttosto che la selezione e deselezione quindi, perché non solo consente di memorizzare temporaneamente un booleano su un elemento dom?

     $("input[type=text]").focus(function() {
         if($(this).skipFocus) return;
         $(this).select();
     });
    
     //code....
    
     $("#txt1").skipFocus = true;
     $("#txt1").focus();
  6. 0

    Vorrei suggerire una soluzione semplice

    $("input[type=text]").focus(function() {
        $(this).select();
    });
    
    $("input[type=text]").blur(function() {
        $('input[type="hidden"][value=""]').select();
    });
    
    //code....
    
    $("#txt1").focus();
  7. 0

    Qui è una soluzione semplice senza jquery

    <input type="text" onblur="this.selectionStart = this.selectionEnd = -1;">
  8. -1

    Se si desidera deselezionare una casella di testo utilizzando jQuery effettuare le seguenti operazioni:

       $(your_input_selector).attr('disabled', 'disabled');
       $(your_input_selector).removeAttr('disabled');

Lascia un commento