通常情况下,当你希望阻止某个事件的默认行为时,可以使用e.preventDefault()
。以下是一些常见的应用场景:
-
表单提交:在处理表单提交事件时,通过调用
e.preventDefault()
可以阻止表单的默认提交行为,这样你就可以在提交之前执行其他操作或验证表单数据。 -
链接点击:通过在链接的点击事件处理程序中调用
e.preventDefault()
,可以阻止链接的默认跳转行为,从而允许你在点击链接时执行自定义操作,比如打开一个模态框或执行一些其他逻辑。 -
按钮点击:在处理按钮点击事件时,有时你可能希望阻止按钮的默认提交行为或页面刷新行为。通过调用
e.preventDefault()
可以阻止这些默认行为。 -
键盘事件:在处理键盘事件时,你可能希望阻止某些按键的默认行为。例如,你可以在按下回车键时阻止表单的默认提交行为,或者在按下空格键时阻止滚动页面的默认行为。
总的来说,当你需要在事件发生时执行自定义逻辑并阻止默认行为时,可以使用e.preventDefault()
。
import { PureComponent } from 'react';
import { connect } from "react-redux"
import * as action from "../../actions/newarticle"
import Error from "../../components/Error"
import { updateArticle } from '../../actions/article';
class ArticleEdit extends PureComponent {
changeTitle =(e)=>{
this.props.onChangeTitle("title",e.target.value)
}
changeDescription =(e)=>{
this.props.onChangeDescription("description",e.target.value)
}
changeBody =(e)=>{
this.props.onChangeBody("body",e.target.value)
}
changeTag =(e)=>{
this.props.onChangeTag("tag",e.target.value)
}
watchEnter =(e)=>{
if(e.keyCode === 13){
e.preventDefault()
this.props.addTag()
}
}
removeTag =(tag) =>{
return (ev) =>{
this.props.removeTag(tag)
}
}
onSubmit = (article) => {
return()=>{
this.props.updateArticle(article)
}
}
render() {
const {slug,title,description,body,tag,tags,errors } = this.props
return (
<div className='container page'>
<div className='row'>
<div className='col-md-6 offset-md-3 col-xs-12'>
<h1>编辑文章</h1>
<Error errors = {errors} />
<form>
<fieldset className='form-group'>
<input
className='form-control form-control-lg'
type="text"
placeholder='文章标题'
value={title||''}
onChange={this.changeTitle}
/>
</fieldset>
<fieldset className='form-group'>
<input
className='form-control form-control-lg'
type="text"
placeholder='文章描述'
value={description||''}
onChange={this.changeDescription}
/>
</fieldset>
<fieldset className='form-group'>
<textarea
className='form-control form-control-lg'
rows='8'
placeholder='用markdown编辑文章'
value={body||''}
onChange={this.changeBody}
/>
</fieldset>
<fieldset className='form-group'>
<input
className='form-control form-control-lg'
type="text"
placeholder='输入标签'
value={tag||''}
onChange={this.changeTag}
onKeyUp={this.watchEnter}
/>
{
tags.map(tag=>{
return(
<span className='tag-default tag-pill'
key={tag}
>
<i className='iconfont icon-denglong'
onClick={this.removeTag(tag)}
/>
{tag}
</span>
)
})
}
</fieldset>
<button
className='btn btn-lg btn-primary pull-xs-right'
type='button'
onClick={this.onSubmit({slug,title,description,body,tags})}
>
更新文章
</button>
</form>
</div>
</div>
</div>
)
}
componentWillUnmount(){
this.props.articleUnload()
}
}
const mapState = state => ({
...state.newarticleReducer
})
const mapDispatch = dispatch => ({
onChangeTitle:(key,value)=>dispatch(action.articleFiledUpdate(key,value)),
onChangeDescription:(key,value)=>dispatch(action.articleFiledUpdate(key,value)),
onChangeBody:(key,value)=>dispatch(action.articleFiledUpdate(key,value)),
onChangeTag:(key,value)=>dispatch(action.articleFiledUpdate(key,value)),
addTag:()=>dispatch(action.articleAddTag()),
removeTag:(tag)=>dispatch(action.articleRemoveTag(tag)),
createArticle:article=>dispatch(action.createArticle(article)),
articleUnload:()=>dispatch(action.articleUnload()),
updateArticle:(article) =>dispatch(updateArticle(article))
})
export default connect(mapState, mapDispatch)(ArticleEdit)
这里阻止默认行为的目的是为了在输入标签时,当用户按下回车键时不触发表单的提交行为。通常,按下回车键会导致表单提交,但在这种情况下,我们希望回车键只用于添加标签,而不是提交整个表单。因此,通过在输入框的onKeyUp事件中检查keyCode是否为13(回车键的keyCode为13),如果是,则使用preventDefault()方法阻止默认行为,即阻止表单提交。