如何防止在输入字段中按回车键时发生的重定向?
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>
我有一个包含电子邮件输入的表单。
<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>