javascript - 防止在提交表单时重新加载页面
问题描述
附加到表单的 e.preventDefault() 不起作用,当我按下保存按钮时,页面在提交时重新加载。
我有一个单独的表单组件,它工作得很好,但我无法修复这个。
我究竟做错了什么?任何帮助是极大的赞赏。
我的代码如下
TIA
class Todo extends Component {
constructor(props){
super(props);
this.state = { isEditing: false, task: this.props.task }
this.handleRemove = this.handleRemove.bind(this);
this.toggleEdit = this.toggleEdit.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleChange.bind(this);
}
handleRemove () {
this.props.removeTodo(this.props.id)
};
toggleEdit () {
this.setState ({
isEditing: !this.state.isEditing
});
}
handleChange(e) {
this.setState({
[e.target.name]: e.target.value
});
}
handleSubmit(e) {
e.preventDefault();
this.props.updateTodo(this.props.id, this.state.task);
this.setState({
isEditing: false
})
}
render() {
let result;
if (this.state.isEditing) {
result = (
<div>
<form onSubmit={this.handleSubmit}>
<input
type='text'
name='task'
value={this.state.task}
onChange={this.handleChange}
/>
<button>Save</button>
</form>
</div>
)
} else {
result = (
<div>
{this.props.task}
<button onClick={this.handleRemove}>X</button>
<button onClick={this.toggleEdit}>E</button>
</div>
)
}
return result;
}
}
export default Todo;
解决方案
看起来您constructor
的函数绑定错误:
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleChange.bind(this);
第二个函数需要handleSubmit
绑定
推荐阅读
- c++ - 为什么隐藏窗口并显示另一个窗口时 C++ ShowWindow() 不能正常工作?
- java - 在 Maven 项目中添加 Angular 作为 Maven 模块
- python - python中其他目录中的类中的I/O
- sql - 根据条件获取最新行
- c# - Task.Run 中的 Task.delay
- ruby-on-rails-4 - 如何在 Rails 4 上使用 RuboCop::Cop::Rails::ApplicationRecord
- nuxt.js - Nuxt.js google AdSense 返回错误 支持一个标签
- node.js - 如何在 AWS Elasticache 中测试 redis 的性能?
- reactjs - 如何使用反应修复错误“无法在回调函数中调用反应使用钩子”?
- azure-devops - Azure DevOps 查询 Epic 中的所有 PBI