Saya baru mengenal Bootstrap dan terjebak dengan masalah ini. Saya memiliki bidang input dan segera setelah saya memasukkan hanya satu digit, fungsi dari onChange
dipanggil, tetapi saya ingin itu dipanggil ketika saya menekan 'Enter ketika seluruh nomor telah dimasukkan. Masalah yang sama untuk fungsi validasi - panggilannya terlalu cepat.
var inputProcent = React.CreateElement(bootstrap.Input, {type: "text",
//bsStyle: this.validationInputFactor(),
placeholder: this.initialFactor,
className: "input-block-level",
onChange: this.handleInput,
block: true,
addonBefore: '%',
ref:'input',
hasFeedback: true
});
javascript
twitter-bootstrap
reactjs
Bill Lumbert
sumber
sumber
onBlur
acara.<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
Cukup.onKeyPress
dipicu. Ini adalah peningkatan perf halus.Anda dapat menggunakan onKeyPress langsung pada bidang input. fungsi onChange mengubah nilai status pada setiap perubahan bidang input dan setelah Enter ditekan itu akan memanggil pencarian fungsi ().
sumber
onKeyPress={this.yourFunc}
jika fungsi panah gemuk akan dibuat kembali pada setiap render.onKeyPress={event => event.key === 'Enter' && this.search()}
menekan Enter ketika fokus masuk pada kontrol formulir (input) biasanya memicu acara
submit
(onSubmit) pada formulir itu sendiri (bukan input) sehingga Anda bisa mengikat Andathis.handleInput
ke formulir onSubmit.Atau Anda dapat mengikatnya ke acara
blur
(onBlur)input
yang terjadi ketika fokus dihapus (misalnya menabrak elemen berikutnya yang bisa mendapatkan fokus)sumber
onKeyPress
.event.target.value
tidak tersediahandleInput
metode pengontrol . Melakukan sesuai jawaban saya akan mencakup Anda berdua ketika pengguna menekan masuk sambil fokus pada input dan saat mengaktifkansubmit
tombol / input.Kamu bisa memakai
event.key
sumber
Bereaksi pengguna, inilah jawaban untuk kelengkapannya.
Anda ingin memperbarui untuk setiap penekanan tombol, atau mendapatkan nilainya hanya saat mengirim. Menambahkan acara utama ke komponen berfungsi, tetapi ada alternatif seperti yang direkomendasikan dalam dokumen resmi.
Komponen yang dikendalikan vs yang tidak terkontrol
Terkendali
Dari Documents - Formulir dan Komponen yang dikendalikan :
Jika Anda menggunakan komponen yang dikontrol Anda harus menjaga keadaan diperbarui untuk setiap perubahan nilai. Agar ini terjadi, Anda mengikat pengendali acara ke komponen. Dalam contoh-contoh dokumen, biasanya acara onChange.
Contoh:
1) Bind event handler dalam konstruktor (nilai disimpan dalam keadaan)
2) Buat fungsi handler
3) Buat fungsi kirim formulir (nilai diambil dari negara)
4) Memberikan
Jika Anda menggunakan komponen yang dikendalikan , Anda
handleChange
fungsi akan selalu diaktifkan, untuk memperbarui dan mempertahankan kondisi yang tepat. Negara akan selalu memiliki nilai yang diperbarui, dan ketika formulir dikirimkan, nilai akan diambil dari negara. Ini mungkin menjadi penipu jika formulir Anda sangat panjang, karena Anda harus membuat fungsi untuk setiap komponen, atau menulis yang sederhana yang menangani perubahan nilai setiap komponen.Tidak terkendali
Dari Documents - komponen yang tidak terkontrol
Perbedaan utama di sini adalah bahwa Anda tidak menggunakan
onChange
fungsi, tetapi lebihonSubmit
pada formulir untuk mendapatkan nilai, dan memvalidasi jika perlu.Contoh:
1) Bind event handler dan buat ref to input dalam konstruktor (tidak ada nilai yang disimpan dalam keadaan)
2) Buat fungsi kirim formulir (nilai diambil dari komponen DOM)
3) Memberikan
Jika Anda menggunakan komponen yang tidak terkontrol , tidak perlu mengikat
handleChange
fungsi. Ketika formulir dikirimkan, nilainya akan diambil dari DOM dan validasi yang diperlukan dapat terjadi pada titik ini. Tidak perlu membuat fungsi handler untuk komponen input apa pun juga.Masalah Anda
Sekarang, untuk masalah Anda:
Jika Anda ingin mencapai ini, gunakan komponen yang tidak terkontrol. Jangan membuat penangan onChange jika tidak perlu. The
enter
key akan mengirimkan formulir danhandleSubmit
fungsi akan dipecat.Perubahan yang perlu Anda lakukan:
Hapus panggilan onChange di elemen Anda
Menangani formulir kirim dan validasi input Anda. Anda perlu mendapatkan nilai dari elemen Anda di fungsi kirim formulir lalu validasi. Pastikan Anda membuat referensi ke elemen Anda di konstruktor.
Contoh penggunaan komponen yang tidak terkontrol:
sumber
Anda juga dapat menulis fungsi pembungkus kecil seperti ini
Kemudian konsumsilah pada input Anda
sumber