javascript - ReactJS - 如何检测何时在文件输入上单击取消?

标签 javascript html reactjs file event-handling

我想要一个事件或在用户单击文件输入对话框上的十字图标取消按钮 时得到通知,以便我可以基于此执行一些任务.

onChange 事件仅在用户单击打开 按钮时触发。

当用户使用 ReactJS 单击十字图标取消按钮时,有没有办法得到通知?

enter image description here

下面是工作代码片段。

class Test extends React.Component {
  constructor() {
    super();
    this.fileInputClicked = this.fileInputClicked.bind(this);
  }
  
  fileInputClicked(event){
    let file = event.target.files[0];
    console.log("File is Selected", file);
  }

  render() {
    return (
      <div>
        <div>
          <p>Hello world</p>
            <input type="file" onChange={this.fileInputClicked}/>
        </div>
      </div>
    );
  }
}

ReactDOM.render(<Test/>, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app' />

最佳答案

好吧,这可能是我会做的,但我不太喜欢它,而且我认为因为用户决定不上传文件而执行某事的整个想法并不是一个好的用户体验,所以使用它明智地。

fileInputClicked(event){
        let file = event.target.files[0];
        console.log("File is Selected", file);
        window.removeEventListener('focus', this.handleFocusBack);
}

handleFocusBack(){
    console.log('focus-back');
    window.removeEventListener('focus', this.handleFocusBack);
}

clickedFileInput(){
    window.addEventListener('focus', this.handleFocusBack);
}

render() {
    return (
        <div>
            <div>
                <p>Hello world</p>
                <input onClick={this.clickedFileInput} type="file" onChange={this.fileInputClicked}/>
            </div>
        </div>
    );
}

这样,当用户决定关闭文件输入时,他会重新关注窗口,您将获得所需的 handleFocusBack 功能,当他添加文件时,他会转到 fileInputClicked.

Afaik,没有“开箱即用”的机制来实现你想要的。

关于javascript - ReactJS - 如何检测何时在文件输入上单击取消?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627109/

相关文章:

javascript - 从 javascript 函数传递 guid 作为值而不是引用的最佳方法?

html - DIV Scroll 适用于一张表但不适用于另一张表

reactjs - 使用 React 日期范围选择器来过滤 React 表

reactjs - 如何将 React 应用程序部署到 azure 并更改默认页面

reactjs - TypeError : TypeError: (0, _reactRedux.useSelector) 不是函数

javascript - 附加 div 时,当超过 10 个时删除旧的附加 div

javascript - 在组件加载之前初始化 Vue.prototype

JavaScript:试图创建一个表现良好的后台作业,但它运行的时间太少,而系统的其余部分几乎空闲?

javascript - 用于选择 JavaScript 函数的 html 文本

javascript - 获取一排 float div中的最后一个div