$(document).ready(function() {
// #login-box password field
$('#password').attr('type', 'text');
$('#password').val('Password');
});
Ini seharusnya mengubah #password
bidang input (dengan id="password"
) yang type
password
ke bidang teks normal, dan kemudian mengisi teks "Kata Sandi".
Tapi itu tidak berhasil. Mengapa?
Ini formulirnya:
<form enctype="application/x-www-form-urlencoded" method="post" action="/auth/sign-in">
<ol>
<li>
<div class="element">
<input type="text" name="username" id="username" value="Prihlasovacie meno" class="input-text" />
</div>
</li>
<li>
<div class="element">
<input type="password" name="password" id="password" value="" class="input-text" />
</div>
</li>
<li class="button">
<div class="button">
<input type="submit" name="sign_in" id="sign_in" value="Prihlásiť" class="input-submit" />
</div>
</li>
</ol>
</form>
javascript
jquery
html-input
Richard Knop
sumber
sumber
Jawaban:
Sangat mungkin tindakan ini dicegah sebagai bagian dari model keamanan browser.
Sunting: memang, pengujian sekarang di Safari, saya mendapatkan kesalahan
type property cannot be changed
.Sunting 2: yang tampaknya merupakan kesalahan langsung dari jQuery. Menggunakan kode DOM langsung berikut berfungsi dengan baik:
Sunting 3: Langsung dari sumber jQuery, ini tampaknya terkait dengan IE (dan dapat berupa bug atau bagian dari model keamanan mereka, tetapi jQuery tidak spesifik):
sumber
attr
tetapi memungkinkan mengubahtype
atribut padainput
elemen.Lebih mudah ... tidak perlu untuk semua pembuatan elemen dinamis. Cukup buat dua bidang terpisah, buat satu bidang kata sandi 'nyata' (ketik = "kata sandi") dan satu bidang kata sandi 'palsu' (ketik = "teks"), atur teks dalam bidang palsu ke warna abu-abu terang dan mengatur nilai awal ke 'Kata Sandi'. Kemudian tambahkan beberapa baris Javascript dengan jQuery seperti di bawah ini:
Jadi ketika pengguna memasukkan bidang kata sandi 'palsu' itu akan disembunyikan, bidang nyata akan ditampilkan, dan fokus akan pindah ke bidang nyata. Mereka tidak akan pernah bisa memasukkan teks di bidang palsu.
Ketika pengguna meninggalkan bidang kata sandi asli, skrip akan melihat apakah itu kosong, dan jika demikian akan menyembunyikan bidang nyata dan menampilkan yang palsu.
Berhati-hatilah untuk tidak meninggalkan ruang di antara dua elemen input karena IE akan memposisikan sedikit demi sedikit (rendering spasi) dan bidang akan tampak bergerak ketika pengguna memasukkan / keluar.
sumber
$('#password').show(); $('#password').focus();
$('#password').show().focus();
Solusi satu langkah
sumber
document.getElementById
harus cukup dan Anda tidak perlu jQuery untuk itu! ;-)Saat ini, Anda bisa menggunakannya
Tapi tentu saja, Anda harus melakukan ini
dalam semua kecuali IE. Ada shims tempat penampung di luar sana untuk meniru fungsi itu di IE juga.
sumber
placeholder="Password"
. Spesifikasi HTML dan MDN padaplaceholder
atribut. Sebuah shim JavaScript untukplaceholder
.Solusi lintas-peramban yang lebih ... Saya berharap inti dari ini membantu seseorang di luar sana.
Solusi ini mencoba mengatur
type
atribut, dan jika gagal, itu hanya membuat yang baru<input>
elemen , mempertahankan atribut elemen dan event handler.changeTypeAttr.js
( GitHub Gist ):sumber
Ini bekerja untuk saya.
sumber
Cara terbaik untuk menggunakan jQuery:
Biarkan bidang input asli tersembunyi dari layar.
Buat bidang input baru dengan cepat menggunakan JavaScript.
Bermigrasi ID dan nilai dari bidang input tersembunyi ke bidang input baru.
Untuk menyiasati kesalahan pada IE suka
type property cannot be changed
, Anda mungkin menemukan ini berguna sebagai berikut:Lampirkan klik / fokus / ubah acara ke elemen input baru, untuk memicu acara yang sama pada input tersembunyi.
Elemen input tersembunyi lama masih di dalam DOM sehingga akan bereaksi dengan peristiwa yang dipicu oleh elemen input baru. Saat ID ditukar, elemen input baru akan bertindak seperti yang lama dan menanggapi panggilan fungsi apa pun ke ID input lama yang disembunyikan, tetapi terlihat berbeda.
sumber
Sudahkah Anda mencoba menggunakan .prop ()?
http://api.jquery.com/prop/
sumber
Saya belum menguji di IE (karena saya membutuhkan ini untuk situs iPad) - bentuk saya tidak bisa mengubah HTML tapi saya bisa menambahkan JS:
(JS sekolah lama jelek di sebelah semua jQuery!)
Tetapi, http://bugs.jquery.com/ticket/1957 tautan ke MSDN: "Pada Microsoft Internet Explorer 5, properti tipe dibaca / ditulis-sekali, tetapi hanya ketika elemen input dibuat dengan metode createElement dan sebelum ditambahkan ke dokumen. " jadi mungkin Anda bisa menduplikasi elemen, mengubah tipenya, menambah DOM dan menghapus yang lama?
sumber
Buat saja bidang baru untuk memintas hal keamanan ini:
sumber
Saya menerima pesan kesalahan yang sama ketika mencoba melakukan ini di Firefox 5.
Saya memecahkannya menggunakan kode di bawah ini:
Dan untuk menggunakannya, cukup atur atribut onFocus dan onBlur bidang Anda menjadi seperti ini:
Saya menggunakan ini untuk bidang nama pengguna juga, sehingga ini mengubah nilai default. Cukup atur parameter kedua fungsi ke '' saat Anda memanggilnya.
Mungkin juga perlu dicatat bahwa jenis default dari kata sandi saya sebenarnya adalah kata sandi, kalau-kalau pengguna tidak mengaktifkan javascript atau jika terjadi kesalahan, dengan cara itu kata sandi mereka masih dilindungi.
Fungsi $ (dokumen) .ready adalah jQuery, dan dimuat ketika dokumen telah selesai dimuat. Ini kemudian mengubah bidang kata sandi menjadi bidang teks. Tentunya Anda harus mengubah 'password_field_id' menjadi id bidang kata sandi Anda.
Jangan ragu untuk menggunakan dan memodifikasi kode!
Semoga ini bisa membantu semua orang yang memiliki masalah yang sama yang saya lakukan :)
- CJ Kent
EDIT: Solusi bagus tapi tidak absolut. Bekerja pada FF8 dan IE8 TAPI tidak sepenuhnya di Chrome (16.0.912.75 ver). Chrome tidak menampilkan teks kata sandi saat halaman dibuka. Selain itu - FF akan menampilkan kata sandi Anda ketika pengisian otomatis diaktifkan.
sumber
Solusi sederhana untuk semua orang yang menginginkan fungsi di semua browser:
HTML
jQuery
sumber
Ini Berhasil untuk saya.
sumber
Ketik properti tidak dapat diubah. Anda perlu mengganti atau overlay input dengan input teks dan mengirim nilai ke input kata sandi saat mengirim.
sumber
Saya kira Anda bisa menggunakan gambar latar belakang yang berisi kata "kata sandi" dan mengubahnya kembali menjadi gambar latar belakang kosong
.focus()
..blur()
----> gambar dengan "kata sandi".focus()
-----> gambar tanpa "kata sandi"Anda juga bisa melakukannya dengan beberapa CSS dan jQuery. Munculkan bidang teks persis di atas bidang kata sandi, sembunyikan () ada di fokus () dan fokus pada bidang kata sandi ...
sumber
Coba
Demo ini ada di sini
sumber
Ini bekerja lebih mudah dengan itu:
dan untuk mengubahnya kembali ke bidang kata sandi lagi, ( dengan asumsi bidang kata sandi adalah tag input kedua dengan jenis teks ):
sumber
gunakan yang ini sangat mudah
sumber
sumber
sumber
Ini akan melakukan triknya. Meskipun bisa diperbaiki untuk mengabaikan atribut yang sekarang tidak relevan.
Plugin:
Pemakaian:
Biola:
http://jsfiddle.net/joshcomley/yX23U/
sumber
Cukup ini:
seperti
Ini dengan asumsi bahwa bidang input Anda disetel ke "teks" sebelumnya.
sumber
Ini adalah potongan kecil yang memungkinkan Anda mengubah
type
elemen dalam dokumen.jquery.type.js
( GitHub Gist ):Ini mengatasi masalah dengan menghapus
input
dari dokumen, mengubahtype
dan kemudian mengembalikannya ke tempat semula.Perhatikan bahwa cuplikan ini hanya diuji untuk browser WebKit - tidak ada jaminan apa pun!
sumber
delete jQuery.attrHooks.type
untuk menghapus penanganan tipe input khusus jQuery.Berikut adalah metode yang menggunakan gambar di sebelah bidang kata sandi untuk beralih antara melihat kata sandi (input teks) dan tidak melihatnya (input kata sandi). Saya menggunakan gambar "mata terbuka" dan "mata tertutup", tetapi Anda dapat menggunakan apa pun yang cocok untuk Anda. Cara kerjanya adalah memiliki dua input / gambar dan setelah mengklik gambar, nilainya disalin dari input yang terlihat ke yang tersembunyi, dan kemudian visibilitas mereka ditukar. Tidak seperti banyak jawaban lain yang menggunakan nama yang di-hardcode, jawaban ini cukup umum untuk menggunakannya berkali-kali pada halaman. Itu juga menurunkan anggun jika JavaScript tidak tersedia.
Berikut adalah apa yang terlihat seperti dua halaman ini. Dalam contoh ini, Kata Sandi-A telah diungkapkan dengan mengklik matanya.
sumber
Saya suka cara ini, untuk mengubah jenis elemen input: old_input.clone () .... Ini adalah contohnya. Ada kotak centang "id_select_multiple". Jika ini diubah menjadi "terpilih", elemen masukan dengan nama "foo" harus diubah untuk mencentang kotak. Jika tidak dicentang, mereka harus menjadi tombol radio lagi.
sumber
Inilah solusi DOM
sumber
Saya telah membuat ekstensi jQuery untuk beralih antara teks dan kata sandi. Bekerja di IE8 (mungkin 6 & 7 juga, tetapi tidak diuji) dan tidak akan kehilangan nilai atau atribut Anda:
Bekerja seperti pesona. Anda cukup menelepon
$('#element').togglePassword();
untuk beralih di antara keduanya atau memberikan opsi untuk 'memaksa' tindakan berdasarkan sesuatu yang lain (seperti kotak centang):$('#element').togglePassword($checkbox.prop('checked'));
sumber
Hanya opsi lain untuk semua pecinta IE8, dan itu berfungsi sempurna di browser yang lebih baru. Anda bisa mewarnai teks untuk mencocokkan latar belakang input. Jika Anda memiliki satu bidang, ini akan mengubah warna menjadi hitam saat Anda mengklik / fokus pada bidang tersebut. Saya tidak akan menggunakan ini di situs publik karena itu akan 'membingungkan' kebanyakan orang, tetapi saya menggunakannya di bagian ADMIN di mana hanya satu orang yang memiliki akses ke kata sandi pengguna.
-ATAU-
Ini, juga diperlukan, akan mengubah teks kembali menjadi putih ketika Anda meninggalkan bidang. Sederhana, sederhana, sederhana.
[Pilihan Lain] Sekarang, jika Anda memiliki beberapa bidang yang Anda periksa, semua dengan ID yang sama, seperti yang saya gunakan, tambahkan kelas 'lulus' ke bidang yang ingin Anda sembunyikan teks. Setel bidang kata sandi ketik ke 'teks'. Dengan cara ini, hanya bidang dengan kelas 'lulus' yang akan diubah.
Ini bagian kedua dari ini. Ini mengubah teks kembali menjadi putih setelah Anda meninggalkan bidang.
sumber
Saya baru saja melakukan hal berikut untuk mengubah jenis input:
dan itu berhasil.
Saya perlu melakukan ini karena saya menggunakan datepickers UI jQuery 'dalam proyek ASP NET Core 3.1 dan mereka tidak bekerja dengan baik pada browser berbasis Chromium (lihat: https://stackoverflow.com/a/61296225/7420301 ).
sumber