簡體   English   中英

如何禁用<enter> react-bootstrap 中表單提交的關鍵</enter>

[英]how to disable <ENTER> key for form submit in react-bootstrap

在以下代碼段中,我有許多輸入 forms 是文本類型。 如果用戶點擊,我似乎得到了與他們按下提交按鈕相同的合成事件。 我想忽略作為表單提交,只允許按下提交按鈕。 (我刪除了一些表單組以減少示例)。

在所有情況下(按鈕或 ENTER 鍵)

e.key is undefined
e.which is undefined
e.type is submit
e.target is the submit button 

(這是一個合成事件)

const React = require('react')
import { Form, FormControl, FormGroup, ControlLabel, Col, Button, Tooltip, OverlayTrigger } from 'react-bootstrap'

const Configuration = ({ ServerPort, UserID, PortNumber, WWWUrl, SourcePath, FMEPath }) => {
    const buttonAction = (e) => {
        e.preventDefault();
        alert(e.target.innerHTML)
    }
    return (
        <Form horizontal>
            <FormGroup controlId="serverPortBox">
                <Col componentClass={ControlLabel} sm={2}>Watson Port:</Col>
                <Col sm={10}>
                    <OverlayTrigger placement="left" overlay={(<Tooltip id="tt1">TCP port for Watson to use</Tooltip>)}>
                        <FormControl type="number" min="1024" max="65535" placeholder={ServerPort} />
                    </OverlayTrigger>
                </Col>
            </FormGroup>
            <FormGroup controlId="dbPortBox">
                <Col componentClass={ControlLabel} sm={2}>Database Port:</Col>
                <Col sm={10}>
                    <OverlayTrigger placement="left" overlay={(<Tooltip id="tt3">TCP port for PostGreSql DB</Tooltip>)}>
                        <FormControl type="number" min="1024" max="65535" placeholder={PortNumber} />
                    </OverlayTrigger>
                </Col>
            </FormGroup>
            <Button type="submit" bsStyle="primary" block onClick={(e) => buttonAction(e)}>Update Configuration</Button>
        </Form>
    )
}

export default Configuration

最簡單的解決方案是使用type="button"而不是type="submit"

也許應該插入“按鈕”類型的按鈕而不是“提交” 然后只需處理onClick這個按鈕?

我找到了解決方法如何在不使用type="button"情況下實現它

const handleKeyDown = (event, callback) => {
  if (event.key === 'Enter' && event.shiftKey === false) {
    event.preventDefault();
    callback(submitAddress);
  }
};

和形式的變化:

<form onSubmit={handleSubmit(submitAddress)} onKeyDown={e => { handleKeyDown(e, handleSubmit) }}>
<Button type="button">...</Button>

將類型從提交更改為按鈕

React:如何提交表單<textarea>&lt;i&gt;with enter key and without a submit button with React Hooks?&lt;/div&gt;&lt;/i&gt;&lt;b&gt;帶有回車鍵且沒有帶有 React Hooks 的提交按鈕?&lt;/div&gt;&lt;/b&gt;</textarea><div id="text_translate"><p> Halo 伙計們,我對反應很陌生,我想提交一個只有文本區域的表單,並按下enter鍵。 我遵循了一些 SO 問題,但仍然沒有運氣,因為它沒有被提交。 我還想在提交后清除文本區域。 我怎樣才能用下面的代碼做到這一點?</p><p> 這是我目前擁有的代碼。</p><pre> const { register, handleSubmit, control, errors } = useForm(); const CommentOnSubmit = (data) =&gt; { let formData = new FormData(); formData.append('content', data.content); formData.append('user', user?.id); axiosInstance.post(`api/blogs/` + slug + `/comment/`, formData); }; // const commentEnterSubmit = (e) =&gt; { // if(e.key === 'Enter' &amp;&amp; e.shiftKey == false) { // return( // e.preventDefault(), // CommentOnSubmit() // ) // } // } &lt;form noValidate onSubmit={handleSubmit(CommentOnSubmit)}&gt; &lt;div className="post_comment_input"&gt; &lt;textarea type="text" placeholder="Write a comment..." name="content" ref={register({required: true, maxLength: 1000})} /&gt; &lt;/div&gt; &lt;div className="comment_post_button"&gt; &lt;Button type="submit" variant="contained" color="primary"&gt;comment&lt;/Button&gt; &lt;/div&gt; &lt;/form&gt;</pre><p> 請幫忙。</p><p> 非常感謝。</p></div>

[英]React: How to submit a form with <textarea> with enter key and without a submit button with React Hooks?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何使用回車鍵禁用表單提交? 如何在 React Material UI 自動完成表單中禁用 ENTER 鍵 禁用輸入以提交表單 如何使用ENTER禁用僅提交表單 如何在 React-Bootstrap 中禁用輪播控制按鈕的寬度? React:如何提交表單<textarea>&lt;i&gt;with enter key and without a submit button with React Hooks?&lt;/div&gt;&lt;/i&gt;&lt;b&gt;帶有回車鍵且沒有帶有 React Hooks 的提交按鈕?&lt;/div&gt;&lt;/b&gt;</textarea><div id="text_translate"><p> Halo 伙計們,我對反應很陌生,我想提交一個只有文本區域的表單,並按下enter鍵。 我遵循了一些 SO 問題,但仍然沒有運氣,因為它沒有被提交。 我還想在提交后清除文本區域。 我怎樣才能用下面的代碼做到這一點?</p><p> 這是我目前擁有的代碼。</p><pre> const { register, handleSubmit, control, errors } = useForm(); const CommentOnSubmit = (data) =&gt; { let formData = new FormData(); formData.append('content', data.content); formData.append('user', user?.id); axiosInstance.post(`api/blogs/` + slug + `/comment/`, formData); }; // const commentEnterSubmit = (e) =&gt; { // if(e.key === 'Enter' &amp;&amp; e.shiftKey == false) { // return( // e.preventDefault(), // CommentOnSubmit() // ) // } // } &lt;form noValidate onSubmit={handleSubmit(CommentOnSubmit)}&gt; &lt;div className="post_comment_input"&gt; &lt;textarea type="text" placeholder="Write a comment..." name="content" ref={register({required: true, maxLength: 1000})} /&gt; &lt;/div&gt; &lt;div className="comment_post_button"&gt; &lt;Button type="submit" variant="contained" color="primary"&gt;comment&lt;/Button&gt; &lt;/div&gt; &lt;/form&gt;</pre><p> 請幫忙。</p><p> 非常感謝。</p></div> 按Enter鍵時禁用以html格式提交表單 在文本區域上按Enter鍵時如何提交表單? 如何使用ENTER鍵提交表單 在React-Bootstrap中有條件地禁用選項卡
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM