如何防止在输入字段中按回车键时发生的重定向?

How to prevent redirection that occurs when pressing enter key in an input field?

我有一个包含电子邮件输入的表单。

<form action="." method="post">
    <div id="email-wrapper">
        <input type="text" placeholder="Your email" name="email" ref="email" onChange={this.handleChange}/>
    </div>
    <span class="signup-error">Please provide a valid email.</span>
</form>
....
....
<button id="next-btn" onClick={this.saveAndContinue}>Next</button>

按下按钮后,我使用简单的正则表达式进行验证,以确认它是一个电子邮件地址,并且工作正常。但是,如果我按回车键 (key=13),它会转到其他页面,这是我看到的错误:

Cannot POST /

我认为这个脚本可以解决问题,但事实并非如此:

handleChange = (event) => {
    event.preventDefault();
    var keyCode = event.keyCode || event.which;
    if (keyCode == '13'){
        console.log('enter pressed');
    }
}

这是怎么回事?如何防止在输入字段中按回车键时发生的重定向?请你帮助我好吗。谢谢。

这是因为操作是在您按下回车键时在表单上完成的。所以你需要从表单中捕捉动作并防止默认值。

您可以在表单 onsubmit 上使用相同的事件处理程序

<form action="." onsubmit={this.saveAndContinue} method="post">
....

首先像这样处理按键输入字段:

<input type="text" placeholder="Your email" name="email" ref="email" onkeypress="handleEnterKey(event)"/>

然后创建函数handleEnterKey如下:

function handleEnterKey(e){ 
    if(e.keyCode == 13){ // enter pressed
        try{
            e.preventDefault ? e.preventDefault() : (e.returnValue = false);

            //DO ALTERNATE ACTION RATHER THAN SEND ENTER

        }catch(err){
            console.log(err.message); 
        }
    }
}

此外,有时在旧版本的 Internet Explorer 和鲜为人知的浏览器中,event.preventDefault() 不足以阻止回车键传播给父级,因此您可以选择使用:

event.stopPropagation();

希望这对您有所帮助。

尝试在 onClick 属性中的函数前面添加 return false;

尝试处理 onKeyPress 事件。当在 handleChange 函数中按下 Enter 键时,您需要 return false。您需要 return 事件接线中 handleChange 函数中的 return 值;像

<input type="text" onKeyPress="return handleChange(event)" />

总而言之,你可以试试:

<form action="." method="post">
    <div id="email-wrapper">
        <input type="text" placeholder="Your email" name="email" ref="email" onKeyPress={return this.handleChange(event)}/>
    </div>
    <span class="signup-error">Please provide a valid email.</span>
</form>
....
....
<button id="next-btn" onClick={this.saveAndContinue}>Next</button>

<script>
    handleChange = (event) => {
        event.preventDefault();
        var keyCode = event.keyCode || event.which;
        if (keyCode == '13'){
            console.log('enter pressed');
            return false;
        }
    }
</script>