无法捕获onChange事件

时间:2016-12-16 14:42:10

标签: javascript jquery reactjs

我正在尝试实施一种解决方案,您可以将用户选择的文件隐藏为输入类型的文件'。以下是概述解决方案的堆栈文章:input type=file show only button

我无法捕获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];
}

3 个答案:

答案 0 :(得分:2)

您在活动中没有正确的上下文。绑定或使用箭头功能:

INSERT INTO table2 (Date, Number1, Number2, Text1, Text2) values 
SELECT A.Date, A.Number1, A.Number2, A.Text1, A.Text2 
FROM Table1 A
EXCEPT
SELECT B.Date, B.Number1, B.Number2, B.Text1, B.Text2 
FROM Table2 B;

我不知道为什么你以编程方式使用jQuery绑定事件(甚至使用jQuery或ID选择器而不是引用)。我不明白在文件输入上没有onClick={(e) => this.saveFileToStoreClick(e)} 处理程序的原因。

正如评论者所说,你也在调用函数而不是在事件中传递函数。

答案 1 :(得分:0)

您正在调用this.saveFileToStoreOnChange()而不是传递该功能。

将您的代码更改为:

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

(请参阅功能名称后删除的()

答案 2 :(得分:0)

此代码可以帮助您

saveFileToStoreClick(){

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

    saveFileToStoreOnChange(event){


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