2016-12-16 87 views
3

我试图执行一个解决方案,您隐藏用户为输入类型'文件'选择的文件。以下是概述解决方案的堆栈文章:input type=file show only button无法捕获onChange事件

我无法捕获onChange事件,因此无法读取该文件。方法'saveFileToStoreOnChange'中的事件未定义。我在哪里走在这里?

HTML(JSX):

<input className="invisible" type="file" id="logo"/> 
<input type="button" value="Browse..." onClick={this.saveFileToStoreClick} /> 

的Javascript:

saveFileToStoreClick(){ 
     $('#logo').on('change', this.saveFileToStoreOnChange()); 
    } 

saveFileToStoreOnChange(event){ 
     //event is undefined 
     let file = event.target.files[0]; 
} 
+0

你*调用*'这一点。 saveFileToStoreOnChange()'而不是*将它传递给'on()'。 –

回答

2

您不必在事件正确的上下文。绑定或使用箭头功能:

onClick={(e) => this.saveFileToStoreClick(e)} 

我不知道为什么你使用jQuery编程虽然结合事件(甚至使用jQuery或ID选择,而不是一个参考)。我不明白在文件输入上没有onChange处理程序的原因。

作为一个评论者说你也在调用该函数而不是将它传递给你的事件。

+0

没有工作。事件仍未定义。 – nikotromus

+0

我没有在文件输入onChange处理程序的原因可以在这里找到:http://stackoverflow.com/questions/1084925/input-type-file-show-only-button。这是我试图在所选文件被隐藏的地方实施的第二个解决方案。 – nikotromus

+0

解决这个问题的正确方法是不使用jQuery和React ... – Conan

0

你打电话给this.saveFileToStoreOnChange()而不是传递函数。

你的代码更改为:

$('#logo').on('change', this.saveFileToStoreOnChange); 

(见删除()函数名后)

+0

没有工作。它从来没有把它变成saveFileToStoreOnChange方法 – nikotromus

0

此代码可以帮助你

saveFileToStoreClick(){ 

      $('#logo').on('change', this.saveFileToStoreOnChange()); 
     } 

    saveFileToStoreOnChange(event){ 


      let file = event.currentTarget.files[0]; 
    } 
+0

lol - nope。事件仍未定义。扣... – nikotromus