Saya memiliki masukan teks. Saat masukan menerima fokus, saya ingin memilih teks di dalam masukan.
Dengan jQuery, saya akan melakukannya dengan cara ini:
<input type="text" value="test" />
$("input[type=text]").click(function() {
$(this).select();
// would select "test" in this example
});
Saya telah mencari-cari untuk mencoba dan menemukan cara Angular tetapi sebagian besar contoh yang saya temukan berhubungan dengan arahan yang memperhatikan properti modal untuk perubahan. Saya berasumsi saya membutuhkan arahan yang mengawasi input yang menerima fokus. Bagaimana saya melakukannya?
angularjs
angularjs-directive
Billy Coover
sumber
sumber
<input type="text" value="test" onclick="this.select()" />
?Jawaban:
Cara untuk melakukan ini di Angular adalah dengan membuat perintah kustom yang melakukan autoselect untuk Anda.
Terapkan arahan seperti ini:
View demo
Pembaruan1 : Menghapus ketergantungan jQuery.
Pembaruan2 : Batasi sebagai atribut.
Pembaruan3 : Bekerja di Safari seluler. Mengizinkan memilih bagian teks (memerlukan IE> 8).
sumber
restrict: 'A'
), karena arahan ini bertujuan untuk memperluas perilaku elemen yang ada .selectOnLoad
tautan direktif saya (). Namun di link (), meskipun scope sudah terisi, elemen DOM belum disinkronkan dengan $ scope, jadi ketika saya memanggil select (), elemen masih kosong dan tidak ada yang dipilih. Satu-satunya cara untuk mengatasi yang saya temukan, adalah $ timeout, tetapi saya merasa itu dapat berhenti berfungsi dengan beberapa versi Angular baru.Berikut adalah arahan yang disempurnakan yang menghindari pemilihan ulang teks saat pengguna mengklik untuk memposisikan kursor di kotak input.
sumber
this
menjadielement[0]
dan itu akan berhasil. Saya juga merekomendasikanclick
untuk mengubahfocus
sehingga teks akan dipilih jika tab pengguna menjadi input daripada mengkliknya.Ini adalah jawaban lama, untuk Angular 1.x
Cara yang lebih baik untuk melakukannya adalah dengan menggunakan
ng-click
direktif bawaan:EDIT:
Seperti yang diingatkan oleh JoshMB ; mereferensikan simpul DOM di Angular 1.2+ tidak lagi diizinkan. Jadi, saya telah pindah
$event.target.select()
ke pengontrol:Kemudian di pengontrol Anda:
Berikut ini contoh biola .
sumber
Tak satu pun dari solusi yang diusulkan bekerja dengan baik untuk saya. Setelah penelitian singkat saya menemukan ini:
Ini adalah campuran dari beberapa solusi yang diusulkan, tetapi berfungsi baik pada klik dan fokus (pikirkan fokus otomatis) dan memungkinkan pemilihan manual dari nilai parsial dalam input.
sumber
focusedElement
?Bagi saya, ng-click tidak masuk akal, karena Anda tidak akan pernah dapat memposisikan ulang kursor tanpa memilih semua teks lagi, saya menemukan ini mengumumkan. Maka lebih baik menggunakan ng-focus, karena teks dipilih hanya jika input tidak fokus, jika Anda klik lagi untuk memposisikan kursor maka teks hanya batal, seperti yang diharapkan, dan Anda dapat menulis di antaranya.
Saya menemukan pendekatan ini menjadi perilaku UX yang diharapkan.
Gunakan ng-focus
Opsi 1: kode terpisah
dan dalam pengontrol
Opsi 2: sebagai alternatif, Anda dapat menggabungkan kode di atas ke dalam "satu baris" ini (Saya tidak menguji ini, tetapi seharusnya berfungsi)
sumber
Di sudut 2, ini berhasil untuk saya, baik di Chrome & Firefox:
sumber
Jawaban yang diterima adalah menggunakan peristiwa klik, namun jika Anda menggunakan peristiwa fokus, hanya klik pertama yang akan mengaktifkan peristiwa dan juga aktif ketika beberapa metode lain digunakan untuk fokus pada masukan (seperti menekan tab atau memanggil fokus dalam kode).
Ini juga membuatnya tidak perlu untuk memeriksa apakah elemen tersebut sudah fokus seperti yang disarankan oleh jawaban Tamlyn.
sumber
this.select
.Tidak perlu arahan, cukup tambahkan
onfocus="this.select()"
javascript asli ke elemen masukan atau area teks.sumber
Versi modifikasi yang berhasil untuk saya. Klik pertama memilih teks, klik kedua pada elemen yang sama membatalkan pilihan teks
})
sumber
Cara termudah untuk memilih semua teks pada klik atau fokus atau tab, adalah !!!:
...
sumber