Jestem nowy w Bootstrap i utknąłem z tym problemem. Mam pole wprowadzania i jak tylko wprowadzę tylko jedną cyfrę, onChange
wywoływana jest funkcja from , ale chcę, aby została wywołana po naciśnięciu klawisza „Enter” po wprowadzeniu liczby całkowitej. Ten sam problem z funkcją sprawdzania poprawności - wywołuje zbyt wcześnie.
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
źródło
źródło
onBlur
zdarzeniem.<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
jest wystarczający.onKeyPress
jest uruchamiana. Jest to subtelna poprawa wydajności.Możesz użyć onKeyPress bezpośrednio w polu wprowadzania. Funkcja onChange zmienia wartość stanu przy każdej zmianie pola wprowadzania, a po naciśnięciu Enter wywoła funkcję wyszukiwania ().
źródło
onKeyPress={this.yourFunc}
przeciwnym razie funkcja renderowania grubych strzałek zostanie utworzona na każdym renderowaniu.onKeyPress={event => event.key === 'Enter' && this.search()}
naciśnięcie klawisza Enter, gdy fokus na kontroli formularza (dane wejściowe) normalnie wyzwala
submit
zdarzenie (onSubmit) w samym formularzu (nie w danych wejściowych), aby można było powiązaćthis.handleInput
go z formularzem onSubmit.Alternatywnie możesz powiązać to ze
blur
zdarzeniem (onBlur),input
które dzieje się po usunięciu fokusa (np. Tabulacja do następnego elementu, który może uzyskać fokus)źródło
onKeyPress
.event.target.value
nie jest dostępnahandleInput
metodzie kontrolera . Postępowanie zgodnie z moją odpowiedzią obejmowałoby was zarówno, gdy użytkownik naciska klawisz enter, skupiając się na wejściu, a także podczas aktywacjisubmit
przycisku / wejścia.Możesz użyć
event.key
źródło
Reakcja użytkowników, oto odpowiedź na kompletność.
Albo chcesz aktualizować za każdym naciśnięciem klawisza, albo uzyskaj wartość tylko przy wysyłaniu. Dodanie kluczowych zdarzeń do komponentu działa, ale istnieją alternatywne rozwiązania zalecane w oficjalnych dokumentach.
Kontrolowane a niekontrolowane komponenty
Kontrolowane
Z Dokumentów - formularze i kontrolowane komponenty :
Jeśli używasz kontrolowanego komponentu, będziesz musiał aktualizować stan dla każdej zmiany wartości. Aby tak się stało, należy powiązać moduł obsługi zdarzeń ze składnikiem. W przykładach dokumentów zwykle zdarzenie onChange.
Przykład:
1) Obsługa zdarzenia powiązania w konstruktorze (wartość zachowana w stanie)
2) Utwórz funkcję modułu obsługi
3) Utwórz funkcję przesyłania formularza (wartość pochodzi ze stanu)
4) Renderuj
Jeśli używasz kontrolowanych komponentów, twoja
handleChange
funkcja będzie zawsze uruchamiana w celu aktualizacji i utrzymania właściwego stanu. Stan zawsze będzie miał zaktualizowaną wartość, a po przesłaniu formularza wartość zostanie pobrana ze stanu. Może to być oszustwem, jeśli twoja forma jest bardzo długa, ponieważ będziesz musiał utworzyć funkcję dla każdego komponentu lub napisać prostą, która będzie obsługiwać zmianę wartości każdego komponentu.Niekontrolowane
Z Dokumentów - niekontrolowany komponent
Główną różnicą tutaj jest to, że nie używasz
onChange
funkcji, aleonSubmit
formę, aby uzyskać wartości i zweryfikować, jeśli to konieczne.Przykład:
1) Powiązanie modułu obsługi zdarzeń i utworzenie referencji w celu wprowadzenia do konstruktora (brak wartości w stanie)
2) Utwórz funkcję przesyłania formularza (wartość pochodzi z komponentu DOM)
3) Renderuj
Jeśli używasz niekontrolowanych komponentów, nie ma potrzeby wiązania
handleChange
funkcji. Po przesłaniu formularza wartość zostanie pobrana z modelu DOM i w tym momencie mogą wystąpić niezbędne weryfikacje. Nie trzeba też tworzyć żadnych funkcji obsługi dla żadnego z komponentów wejściowych.Twój problem
Teraz dla twojego problemu:
Jeśli chcesz to osiągnąć, użyj niekontrolowanego komponentu. Nie twórz programów obsługi onChange, jeśli nie jest to konieczne.
enter
Klucz będzie przesłać formularz, ahandleSubmit
funkcja zostanie zwolniony.Zmiany, które musisz wykonać:
Usuń wywołanie onChange w swoim elemencie
Obsługuj formularz prześlij i sprawdź poprawność wprowadzonych danych. Musisz pobrać wartość ze swojego elementu w funkcji przesyłania formularza, a następnie sprawdzić poprawność. Upewnij się, że utworzyłeś odniesienie do swojego elementu w konstruktorze.
Przykładowe zastosowanie niekontrolowanego komponentu:
źródło
Możesz także napisać taką funkcję otoki
Następnie zużyj go na swoich danych wejściowych
źródło