Untuk meringkas masalah input tanggal:
- Anda harus menampilkannya (yaitu, hindari display: none) jika tidak, UI input tidak akan dipicu;
- placeholder bertentangan dengan mereka (sesuai dengan spesifikasi, dan karena mereka harus menampilkan UI tertentu);
- mengonversinya ke jenis input lain untuk waktu yang tidak fokus memungkinkan placeholder, tetapi fokus kemudian memicu UI input (keyboard) yang salah, setidaknya untuk waktu yang singkat, karena peristiwa fokus tidak dapat dibatalkan.
- memasukkan (sebelum) atau menambahkan (setelah) konten tidak mencegah nilai input tanggal untuk ditampilkan.
Solusi yang saya temukan untuk memenuhi persyaratan tersebut adalah dengan menggunakan trik biasa untuk memberi gaya pada elemen bentuk asli: pastikan elemen ditampilkan tetapi tidak terlihat, dan tampilkan gaya yang diharapkan melalui label yang terkait . Biasanya, label akan ditampilkan sebagai input (termasuk placeholder), tetapi di atasnya.
Jadi, HTML seperti:
<div class="date-input>
<input id="myInput" type="date">
<label for="myInput">
<span class="place-holder">Enter a date</span>
</label>
</div>
Bisa ditata sebagai:
.date-input {
display: inline-block;
position: relative;
}
/* Fields overriding */
input[type=date] + label {
position: absolute; /* Same origin as the input, to display over it */
background: white; /* Opaque background to hide the input behind */
left: 0; /* Start at same x coordinate */
}
/* Common input styling */
input[type=date], label {
/* Must share same size to display properly (focus, etc.) */
width: 15em;
height: 1em;
font-size: 1em;
}
Setiap peristiwa (klik, fokus) pada label terkait seperti itu akan tercermin di bidang itu sendiri, dan memicu UI masukan tanggal.
Jika Anda ingin menguji solusi seperti itu secara langsung, Anda dapat menjalankan versi Angular ini dari tablet atau ponsel Anda.