Eu sou novo no Bootstrap e preso com esse problema. Eu tenho um campo de entrada e, assim que digito apenas um dígito, a função de onChange
é chamada, mas quero que seja chamada quando pressionar 'Enter' quando o número inteiro tiver sido inserido. O mesmo problema para a função de validação - ela chama muito cedo.
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
fonte
fonte
onBlur
evento.<input ref='reference' onKeyPress={(e) => {(e.key === 'Enter' ? doSomething(this.refs.reference.value) : null)}} />
ref
.<input onKeyPress={e => doSomething(e.target.value)}
é suficiente.onKeyPress
acionada. É uma melhoria sutil de perf.Você pode usar onKeyPress diretamente no campo de entrada. A função onChange altera o valor do estado em cada alteração do campo de entrada e, após pressionar Enter, chama uma pesquisa de função ().
fonte
onKeyPress={this.yourFunc}
a função de seta gorda será recriada em cada renderização.onKeyPress={event => event.key === 'Enter' && this.search()}
pressionar Enter quando o foco em um controle de formulário (entrada) normalmente aciona um
submit
evento (onSubmit) no próprio formulário (não na entrada), para que você possa vinculáthis.handleInput
-lo ao formulário onSubmit.Como alternativa, você pode vinculá-lo ao
blur
evento (onBlur) noinput
qual acontece quando o foco é removido (por exemplo, tabulação para o próximo elemento que pode obter o foco)fonte
onKeyPress
.event.target.value
não está disponívelhandleInput
método do controlador . Fazer de acordo com a minha resposta cobriria você quando o usuário pressionar enter enquanto focado na entrada e ao ativar umsubmit
botão / entrada.Você pode usar
event.key
fonte
Reagir usuários, aqui está uma resposta para a integridade.
Você deseja atualizar para cada pressionamento de tecla ou obter o valor apenas no envio. Adicionar os principais eventos ao componente funciona, mas existem alternativas recomendadas nos documentos oficiais.
Componentes controlados vs não controlados
Controlada
No Documentos - Formulários e componentes controlados :
Se você usar um componente controlado, precisará manter o estado atualizado para cada alteração no valor. Para que isso aconteça, você vincula um manipulador de eventos ao componente. Nos exemplos dos documentos, geralmente o evento onChange.
Exemplo:
1) Vincular manipulador de eventos no construtor (valor mantido no estado)
2) Criar função de manipulador
3) Criar função de envio de formulário (o valor é obtido do estado)
4) Renderizar
Se você usar componentes controlados , sua
handleChange
função será sempre acionada, a fim de atualizar e manter o estado adequado. O estado sempre terá o valor atualizado e, quando o formulário for enviado, o valor será retirado do estado. Isso pode ser um engodo se seu formulário for muito longo, porque você precisará criar uma função para cada componente ou escrever uma simples que lide com a alteração de valor de cada componente.Descontrolado
No componente Documentos - Não controlado
A principal diferença aqui é que você não usa a
onChange
função, masonSubmit
a forma para obter os valores e validar se necessário.Exemplo:
1) Ligue o manipulador de eventos e crie ref à entrada no construtor (nenhum valor mantido no estado)
2) Criar função de envio de formulário (o valor é obtido do componente DOM)
3) Renderizar
Se você usar componentes não controlados , não há necessidade de vincular uma
handleChange
função. Quando o formulário é enviado, o valor será retirado do DOM e as validações necessárias podem ocorrer neste momento. Não há necessidade de criar funções de manipulador para nenhum dos componentes de entrada também.Seu problema
Agora, para o seu problema:
Se você deseja conseguir isso, use um componente não controlado. Não crie os manipuladores do onChange se não for necessário. A
enter
chave enviará o formulário e ahandleSubmit
função será acionada.Alterações que você precisa fazer:
Remova a chamada onChange do seu elemento
Manipule o formulário, envie e valide sua entrada. Você precisa obter o valor do seu elemento na função de envio de formulário e validar. Certifique-se de criar a referência ao seu elemento no construtor.
Exemplo de uso de um componente não controlado:
fonte
Você também pode escrever uma pequena função de invólucro como esta
Em seguida, consuma nas suas entradas
fonte