首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReactJS onBlur排除

ReactJS onBlur排除
EN

Stack Overflow用户
提问于 2018-03-13 06:12:37
回答 1查看 822关注 0票数 2

我的react应用程序呈现了一个文本输入,它具有同时处理onKeyDown (使用条件来检查键是'Enter‘还是'Backspace')和onBlur的功能。'Enter‘和'Backspace’都会将焦点放在不同的输入上,从而触发onBlur,这会产生我不希望的fetch调用。如何避免按Enter和Backspace触发onBlur?我在其他框架中看到了一些解决方案,但这个问题是针对react的。

代码语言:javascript
复制
handleKeyDown = (event) => {
   if(event.key == 'Enter') 
      //adds new object via fetch(), focuses on new input
   if(event.key == 'Backspace' && !event.target.value)
      //deletes current object via fetch(), focuses on previous input
}

handleOnBlur = (event) => {
   //edits existing item via fetch()
}

render() {
  return (
    <div>
      {displayData.map((item, i) => (
       <div>
         <input
           value={item}
           onChange={this.handleChange.bind(this)}
           onKeyDown={this.handleKeyDown.bind(this)}
           onBlur={this.handleOnBlur.bind(this)} />
       </div>
      ))}
    </div>
  )}

我正在尝试使它不会触发onblur事件,因此我无法使用条件if(event.key !== 'Backspace' || event.target.value)开始handleOnBlur函数,任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-03-13 08:12:00

你能做这样的事情吗,跟踪一个局部变量,它通知onBlur继续w/ a获取?

代码语言:javascript
复制
constructor() {
    ...
    this.isBlurKeyDownInvoked = false;
}

handleKeyDown = (event) => {
   if(event.key == 'Enter')  {
      this.isBlurKeyDownInvoked = true;

      //adds new object via fetch(), focuses on new input
   }
   if(event.key == 'Backspace' && !event.target.value)
      this.isBlurKeyDownInvoked = true;

      //deletes current object via fetch(), focuses on previous input
   }
}      

handleOnBlur = (event) => {
    if (this.isBlurKeyDownInvoked) {
        this.isBlurKeyDownInvoked = false;
        return;
    }
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49245220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档