Odaklanınca metin kutusunun tüm içeriğini seç (Vanilla JS veya jQuery)


311

Metin kutusu odaklandığında metin kutusunun tüm içeriğini seçecek bir Vanilla JS veya jQuery çözümü nedir?



3
@gdoron nedense bu sorunun kendisine yönlendirme yapar.
Destrictor


Bu çözümlerin çoğundaki sorun, giriş alanındaki imleç konumunu değiştirirken doğru çalışmaz olmalarıdır.
Cevabımı şuraya

Yanıtlar:


370
$(document).ready(function() {
    $("input:text").focus(function() { $(this).select(); } );
});

23
Ayrıca daha fazla bilgi için: "input [type = text]" artık "input: text" ile ilgili olabilir
Ricardo Vega

8
Bu benim için Chrome'da işe yaramıyor ve jQuery web sitesi tarayıcıya bağlı olduğunu söylüyor. Başka biri doğrulayabilir mi?
Kenny Wyland

71
WebKit tarayıcıları, mouseup olayı nedeniyle buna müdahale ediyor gibi görünüyor. Bunu ekledim ve çalıştı: $ ('input: text'). Mouseup (function (e) {return false;});
Kenny Wyland

5
Kenny doğrudur, ancak ne yazık ki 'mouse' Chrome döndürücü kontrollerini de etkiler. "Odaklanmak" yerine "tık" ı tetiklemek bunu çözüyor gibi görünüyor
Richard Kennard

24
Bunun gibi kullanıyorum: $ ("input: text"). Select (). Focus ();
Phuong

227

<input type="text" onfocus="this.select();" onmouseup="return false;" value="test" />


43
+ onmouseup = tıklamanın seçimini durdurmak için "return false"
Anthony Johnston

2
Fare için bir tür stopEvent için +1 veya bu güvenilir bir şekilde çalışmıyor. Bunu yapmanın dezavantajı, imleç alana geldiğinde, imleci orada konumlandırmak için seçilen metnin içinde bir yere tıklamanın işe yaramayacağıdır; tıklamalar etkin bir şekilde devre dışı bırakılır. Yine de, odakta metnin tamamını seçmenin istendiği durumlar için, muhtemelen iki kötülükten daha azdır.
Enigment

Ben bir onMouseDown olay sırasında, eğer bu! = Document.activeElement küresel değişken doMouseUp false olarak ayarlayarak enigment tarafından gündeme getirilen sorunu başardı. Ardından, onMouseUp sırasında, doMouseUp öğesini true olarak sıfırlayın ve sıfırlamadan önce doMouseUp değerini döndürün. Bu kıvrılıyor ve kod gerekiyor - Daha iyi açıklayan bir cevap göndereceğim.
Travis

1
Do NOT eklemek onmouseup="return false;"kullanıcı serbestçe metni seçmek ve düzenlemek için muktedir istiyorsanız sonra metin içindeki odaklama. Bu kodla, metin "tümünü seç" durumuna kilitlenir ve kullanıcı yeni bir metin yazmadıkça veya hareket etmek için ok tuşlarını kullanmadıkça kullanıcı metni düzenleyemez. Dürüst olmak gerekirse, bu çok garip bir davranış gibi geliyor ve metin kutusu kalıcı olarak düzenlenemez (ve dolayısıyla devre dışı bırakılmış) olarak tasarlanmadığı sürece mantıklı olmaz.
ADTC

1
Teknik olarak, onmouseup="return false;"kullanıcı ilk tıklattığında veya sekmede seçimin gerçekleşmesini istiyorsanız buna gerek yoktur . Ve vanilya javascript için +1!
clabe45

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

3
Onaylanmış. Mevcut en yüksek oylanan / kabul edilen cevap Chrome için işe yaramıyor gibi görünüyor.
Aron Boyette

39
$(document).ready(function() {
    $("input:text")
        .focus(function () { $(this).select(); } )
        .mouseup(function (e) {e.preventDefault(); });
});

1
Bu iyi. Teşekkürler! Zach'in cevabına girerek yorum, mouseupolayın varsayılanını engellemenin bir dezavantajını verir : "imleç alanın üzerine geldiğinde, imleci oraya yerleştirmek için seçilen metnin içinde bir yere tıklamak işe yaramaz; tıklamalar etkin bir şekilde devre dışı bırakılır. Yine de, odakta metnin tamamını seçmenin istendiği durumlarda, muhtemelen iki kötülükten daha azdır. "
JohnK

25

jQuery, bazı durumlarda kullanımı daha kolay olan JavaScript değildir.

Şu örneğe bakın:

<textarea rows="10" cols="50" onclick="this.focus();this.select()">Text is here</textarea>

Kaynak: CSS Hileleri , MDN


7
Belki de işaretlemenizi ve kodunuzu karıştırmanın sakıncası yoksa sorun değil; çoğu insan bugünlerde senaryolarını 'mütevazi' tutmaya çalışıyor. Ah ... ve jQuery olduğunu JavaScript.
Andrew Barber

2
Onclick önerisi için teşekkürler, harika çalışıyor. Herkes jQuery'i başka bir seçenek görmekten çok memnun etmez.
Lukus

Bu, kullanıcıların yalnızca fareyi kullandığını varsayar
pcnate

klavye için onfocus = "this.focus (); this.select ()" kullanabilirsiniz
Muhammad Nadeem

21

Bu sadece bir Chrome / Safari sorunu değil, Firefox 18.0.1 ile oldukça benzer bir davranış yaşadım. Komik yanı, bunun MSIE'de olmaması! Buradaki sorun , giriş içeriğinin seçimini kaldırmaya zorlayan ilk fare olayıdır, bu yüzden sadece ilk oluşumu görmezden gelin.

$(':text').focus(function(){
    $(this).one('mouseup', function(event){
        event.preventDefault();
    }).select();
});

TimeOut yaklaşımı garip bir davranışa neden olur ve her mouseup olayını engellediğinde, giriş öğesine tekrar tıklayarak seçimi kaldıramazsınız.


1
Tek bir fare kullanımını önlemek için birinin kullanımı için +1. İlk tıklamadan sonra fare ile metin seçemekten gerçekten hoşlanmadım.
Pluc

13

HTML:

Enter Your Text : <input type="text" id="text-filed" value="test">

JS kullanma:

var textFiled = document.getElementById("text-filed");
textFiled.addEventListener("focus", function() { this.select(); });

JQuery kullanma:

$("#text-filed").focus(function() { $(this).select(); } );

React JS'yi kullanma:

İlgili bileşenin içindeki oluşturma işlevi -

<input
  type="text"
  value="test"
  onFocus={e => e.target.select()}
/>

2
onFocus={(e) => e.target.select()}
React'te

11

benim çözümüm bir zaman aşımı kullanmak. Tamam görünüyor

$('input[type=text]').focus(function() {
    var _this = this;
    setTimeout(function() {
        _this.select();
    }, 10);
});

Kullandığım ve tercih ettiğim çözüm bu. Ben 0 "zaman aşımı değeri" geçerli olay kuyruğunun sonuna eklenmesine neden olacağı için kullanın, yani "mouseup" olayından sonra çalışacaktır.
DavidM


4

Satır içi kodun kötü stil olduğunu biliyorum, ama bunu bir .js dosyasına koymak istemedim. JQuery olmadan çalışır!

<input type="text" value="blah blah" onfocus="this.select(); this.selAll=1;" onmouseup="if(this.selAll==0) return true; this.selAll=0; return false;"></input>

3

Buradaki yanıtlar bir noktaya kadar bana yardımcı oldu, ancak Chrome'daki yukarı / aşağı düğmelerini tıklarken HTML5 Numarası giriş alanlarında bir sorun yaşadım.

Düğmelerden birine tıklarsanız ve fareyi düğmenin üzerinde bırakırsanız, fare düğmesinin atıldığı için fare düğmesini basılı tuttuğunuzda sayı değişmeye devam eder.

Aşağıdaki gibi tetiklendiğinde fare işleyicisini kaldırarak bunu çözdüm:

    $("input:number").focus(function () {
        var $elem = $(this);
        $elem.select().mouseup(function (e) {
            e.preventDefault();
            $elem.unbind(e.type);
        });
    });

Umarım bu gelecekte insanlara yardımcı olur ...


Nopes. u kendiliğinden üretilen bir soruna çözüm veriyoruz. Eğer cevaba düzgün bakacak olursak, bunlar bağlayıcı mouseupiçin metin değil, sadece giriş alanlarına numbers. Bu sorun bu nedenle gelmemelidir
Om Shankar

Bağlama fareyle ilgili sorun, imleci alan içinde hareket ettirirken müdahale etmesidir. Bu daha iyi bir çözümdür, ancak alanın içine girerseniz, bir sonraki fareyi kaybedersiniz (ve kullanıcı imleci fare ile hareket ettiremez). Tüm fareyi kaybetmekten daha iyidir!
Colin Breame

3

Bu işe yarayacak, Deneyin -

<input id="textField1" onfocus="this.select()" onmouseup="return false" /> 

Safari / IE 9 ve Chrome'da çalışıyor, Firefox'ta test etme şansım olmadı.


3

Burada zaten birçok cevap olduğunu biliyorum - ama bu şimdiye kadar eksik; ajax tarafından oluşturulan içerikle de çalışan bir çözüm:

$(function (){
    $(document).on("focus", "input:text", function() { 
        $(this).select(); 
    });
});

2

Birkaç işlev çağrısı ekleyerek Zach'in cevabını biraz geliştirebildim. Bu yanıtla ilgili sorun, onMouseUp ürününü tamamen devre dışı bırakması ve böylece odaklandıktan sonra metin kutusunu tıklatmanızı engellemesidir.

İşte benim kod:

<input type="text" onfocus="this.select()" onMouseUp="javascript:TextBoxMouseUp();" onMouseDown="javascript:TextBoxMouseDown();" />

<script type="text/javascript">
    var doMouseUp = true;
    function TextBoxMouseDown() {
        doMouseUp = this == document.activeElement;
        return doMouseUp;
    }
    function TextBoxMouseUp() {
        if (doMouseUp)
        { return true; }
        else {
            doMouseUp = true;
            return false;
        }
    }
</script>

Bu Zach'in cevabı üzerinde hafif bir gelişme. IE'de mükemmel çalışır, Chrome'da hiç çalışmaz ve FireFox'ta alternatif başarı ile çalışır (kelimenin tam anlamıyla her seferinde). Birinin FF veya Chrome'da nasıl güvenilir bir şekilde çalışacağına dair bir fikri varsa, lütfen paylaşın.

Her neyse, bunu biraz daha güzel hale getirmek için elimden geleni yapacağımı düşündüm.


Kodunuzda bir hata var - ikinci yöntem "TextBoxMouseUp" olarak adlandırılmalıdır. Benzer bir yaklaşım kullanan cevabıma bir göz atın.
Colin Breame

1
Bu unutulmamalıdır onMouseUp=""ve onMouseDown=""doğru w3 standart değildir. Olmalılar onmouseup=""ve onmousedown="". Diğer html özniteliklerinde olduğu gibi, deve durumunda değil küçük harfle yazılmalıdır.
DrewT

2

@Travis ve @Mari gibi, kullanıcı tıkladığında otomatik olarak seçmek istedim; bu, bir mouseupetkinliğin varsayılan davranışını önlemek anlamına gelir , ancak kullanıcının tıklamasını engellemez. IE11, Chrome 45, Opera 32 ve Firefox 29'da (şu anda yüklediğim tarayıcılar) çalışan, bulduğum çözüm, bir fare tıklamasında yer alan olayların sırasına dayanıyor.

Odağı olmayan bir metin girişini tıklattığınızda, şu olayları alırsınız (diğerleri arasında):

  • mousedown: Tıklamanıza yanıt olarak. focusGerekirse varsayılan işlem yükselir ve seçim başlangıcını ayarlar.
  • focus: Öğesinin varsayılan kullanımının bir parçası olarak mousedown.
  • mouseup: Varsayılan işleme, seçim sonunu belirleyecek olan tıklamanızın tamamlanması.

Zaten odağı olan bir metin girişini tıklattığınızda focusetkinlik atlanır. @Travis ve @Mari'nin her ikisinin de dikkatle fark ettiği gibi, varsayılan olay işleme mouseupyalnızca focusolay gerçekleştiğinde engellenmelidir . Ancak, " focusolmadı" olayı olmadığından, mousedownişleyici içinde yapabileceğimiz bunu çıkarmamız gerekir .

@ Mari'nin çözümü, kaçınmak istediğim jQuery'nin içe aktarılmasını gerektirir. @ Travis'in çözümü bunu teftiş ederek yapar document.activeElement. Çözümünün neden tarayıcılarda tam olarak çalışmadığını bilmiyorum, ancak metin girişinin odaklanıp odaklanmadığını izlemenin başka bir yolu var: sadece focusve blurolaylarını takip edin .

İşte benim için çalışan kod:

    var blockMouseUp = false;
    var customerInputFocused = false;

    txtCustomer.onfocus =
      function ()
      {
        try
        {
          txtCustomer.selectionStart = 0;
          txtCustomer.selectionEnd = txtCustomer.value.length;
        }
        catch (error)
        {
          txtCustomer.select();
        }

        customerInputFocused = true;
      };

    txtCustomer.onblur =
      function ()
      {
        customerInputFocused = false;
      };

    txtCustomer.onmousedown =
      function ()
      {
        blockMouseUp = !customerInputFocused;
      };

    txtCustomer.onmouseup =
      function ()
      {
        if (blockMouseUp)
          return false;
      };

Umarım bu birisine yardım eder. :-)


+1 Teşekkürler, ancak 'txtCustomer' kontrolünü kod içine sabit olarak kodlamamak için bu nasıl yeniden yazılabilir? 'Bu' bir nesneyi aktarmanın bir yolu var mı?
fandango68

Bunun bir yolu, davranışı parametre olarak iletilen herhangi bir öğeye uygulamak için bir yardımcı program işlevi oluşturmaktır. Bu fonksiyon içinde, eleman referansı parametreye sabit olarak kodlanır. Daha sonra, emrinizde ne anlama gelirseniz tanımlayın, istediğiniz sayıda giriş öğesi için çağrı yapabilirsiniz. :-)
Jonathan Gilbert

Üzgünüm ben bir çaylağım. Cevabınızı bir örnekle güncelleyebilir misiniz? Thanks
Fandango68

1
Sadece yazdığım kodu "txtCustomer" adlı bir parametre alan bir işlev bildiriminde sarın. "TxtCustomer" ı başka bir şeye yeniden adlandırmanızı öneririm, ancak bunu yapmaktan emin değilseniz teknik olarak "txtCustomer" adlı değişkenle çalışır. Yani: fonksiyon MakeTextBoxAutoSelect (txtCustomer) { yukarıda yazdıklarım }
Jonathan Gilbert


1

Metin kutusu odaklandığında metin kutusunun tüm içeriğini seçecek bir JavaScript veya jQuery çözümü nedir?

Yalnızca aşağıdaki özelliği eklemeniz gerekir:

onfocus="this.select()"

Örneğin:

<input type="text" value="sometext" onfocus="this.select()">

(Dürüst olmak gerekirse, neden başka bir şeye ihtiyacınız olduğuna dair hiçbir fikrim yok.)


1

Bu benim için çalıştı (cevaplarda değil, yorumda olduğu için yayınlama)

 $("#textBox").focus().select();

0
$('input').focus(function () {
    var self = $(this);
    setTimeout(function () {
        self.select();
    }, 1);        
});

Düzenleme: @ @ DavidG isteği başına, bu neden çalıştığından emin değilim çünkü ayrıntıları sağlayamıyorum, ancak yukarı veya aşağı yayılan odak olayı veya ne yaparsa yapsın ve bildirimi alan girdi öğesi ile ilgili bir şey olduğuna inanıyorum odaklanıldı. Zaman aşımını ayarlamak, öğeye bunun gerçekleştiğini anlaması için bir an verir.


Lütfen bazı kodları yapıştırmak yerine cevabınızı açıklayınız.
DavidG

0

Olayları birlikte zincirlerseniz, .onebu iş parçacığında başka bir yerde önerildiği gibi kullanma ihtiyacını ortadan kaldırdığına inanıyorum .

Misal:

$('input.your_element').focus( function () {
    $(this).select().mouseup( function (e) {
        e.preventDefault();
    });
});

0

Not: ASP.NET'te programlama yapıyorsanız, komut dosyasını C # 'da ScriptManager.RegisterStartupScript kullanarak çalıştırabilirsiniz:

ScriptManager.RegisterStartupScript(txtField, txtField.GetType(), txtField.AccessKey, "$('#MainContent_txtField').focus(function() { $(this).select(); });", true );

Veya komut dosyasını diğer cevaplarda önerilen HTML sayfasına yazın.


Sorunun hiçbir yerinde ASP.NET yok. : |
Mohamed Thaufeeq

Doğru, ben programcı ASP.NET kullanıyor olması durumunda ben bu yayınlanmıştır. Çerçeveyi kullanarak cevap arayan biri için yararlı olabilir (bu bana yardımcı oldu). Sadece paylaşıyorum ve umarım birisi bunu faydalı bulur.
Exel Gamboa

Programcı ASP.NET kullanıyorsa, soruya 'asp.net' etiketi ekleyecektir. : |
Mohamed Thaufeeq

0

Bunu bir yere ekiyorum, mükemmel çalış!

            $('input').on('focus', function (e) {
                $(this)
                $(element).one('mouseup', function () {
                        $(this).select();
                        return false;
                    })                        .select();
            });

0

Partiye geç kaldım, ancak bu IE11, Chrome, Firefox'ta, mouseup (ve JQuery olmadan) bozmadan mükemmel çalışıyor.

inputElement.addEventListener("focus", function (e) {
    var target = e.currentTarget;
    if (target) {
        target.select();
        target.addEventListener("mouseup", function _tempoMouseUp(event) {
            event.preventDefault();
            target.removeEventListener("mouseup", _tempoMouseUp);
        });
    }
});

evet ama focusalana sekerek, ekli birden fazla fare olayı dinleyici bulacaksınız ...
Sebastian Scholle

-1

Sıradaki çözümüm:

var mouseUp;
$(document).ready(function() {
    $(inputSelector).focus(function() {
        this.select();
    }) 
    .mousedown(function () {
        if ($(this).is(":focus")) {
          mouseUp = true;
        }
        else {
          mouseUp = false;
        }
     })
     .mouseup(function () {
        return mouseUp;
     });
});

Dolayısıyla mouseup genellikle çalışır, ancak girdi ile odaklandıktan sonra seçimi kaldırmaz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.