在反应中点击编辑文本
Edit text onClick in react
我正在尝试编辑输入的文本onClick事件。enableEdit函数执行该任务。我想触发函数,如果我双击输入的文本。我的代码是这样的:
class App extends React.Component {
constructor(){
super();
this.state={
todo:[]
};
};
entertodo(keypress){
var Todo=this.refs.inputodo.value;
if( keypress.charCode == 13 )
{
this.setState({
todo: this.state.todo.concat({Value:Todo, checked:false})
});
this.refs.inputodo.value=null;
};
};
todo(todo,i){
return (
<li className={todo.checked===true? 'line':'newtodo'}>
<div onClick={this.todoCompleted.bind(this,i)}>
<input type="checkbox" className="option-input checkbox" checked={todo.checked} />
<div key={todo.id} className="item">
{todo.Value}
<div className="Button">
<span className="destroy" onClick={this.remove.bind(this, i)}>X</span>
</div>
</div>
</div>
</li>
);
};
remove(i){
this.state.todo.splice(i,1)
this.setState({todo:this.state.todo})
};
todoCompleted(i){
var todo=this.state.todo;
{
todo[i].checked =true;
this.setState({
todo:this.state.todo
});
}
};
allCompleted=()=>{
var todo = this.state.todo;
var _this = this
todo.forEach(function(item) {
item.className = _this.state.finished ? "newtodo" : "line"
item.checked = !_this.state.finished
})
this.setState({todo: todo, finished: !this.state.finished})
};
enableEdit(i){
var todo= this.state.todo;
var editodo=todo[i];
this.setState({
todo: this.state.todo.editing=true
});
};
render() {
return (
<div>
<h1 id='heading'>todos</h1>
<div className="lines"></div>
<div>
<input type="text" ref= "inputodo" onKeyPress={this.entertodo.bind(this)}className="inputodo"placeholder='todos'/>
<span onClick={this.allCompleted}id="all">x</span>
</div>
<div className="mainapp">
<ul>
{this.state.todo.map(this.todo.bind(this))}
</ul>
</div>
</div>
);
}
}
ReactDOM.render(<App/>,document.getElementById('app'));
.line {
text-decoration: line-through;
color: red;
}
.newtodo{
text-decoration: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.8/react-dom.min.js"></script>
<div id="app"></div>
我尝试了一些方法,但我得到的错误是this.state.todo。map不是函数
我认为这部分是罪魁祸首:
enableEdit(i){
var todo= this.state.todo;
this.setState({
todo: this.state.todo.editing=true
});
};
在我看来,它的设置todo为真,因为它不是一个数组,没有一个映射函数可用于它
相关文章:
- 高亮显示时编辑文本大小和颜色
- 具有所有样式的文本正在复制到可编辑文本区域
- 计算content中的数字总和使用Jquery可编辑文本
- ContentEditable元素--将光标移回可编辑文本的开头
- OnRowEditing编辑文本框焦点
- 在用户键入时修剪和编辑文本区域的每一行
- 如何编辑文本文件中的数据
- 如何在编辑文本框时设置文本框文本颜色
- 在不删除 HTML 的情况下编辑文本
- 使用 ajax 将文本区域信息存储到数据库中.除非我以任何方式编辑文本区域,否则工作正常.信息仍然被存储,但XMLHTT
- 编辑文本元素时,将重置后端用户设置
- 是否可以使用 javascript 编辑文本输入并添加到撤消堆栈
- 如何使用Hammer.js Touch Emulator编辑文本输入字段
- “编辑文本”按钮不起作用
- jQuery中的可编辑文本框
- 使用Javascript在Photoshop中编辑文本层的内容
- 在jquery弹出框中编辑文本区域
- CKEDITOR-无法编辑文本或使用任何按钮
- 单击后编辑文本
- 如何使可编辑文本区域文本不可选择