首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onChange()不是函数。手动触发onChange()

onChange()不是函数。手动触发onChange()
EN

Stack Overflow用户
提问于 2019-02-14 05:26:19
回答 3查看 7.5K关注 0票数 2

我有一个文件选择器,当点击按钮时,文件选择器就会出现:

代码语言:javascript
复制
<input id='example' type="file" accept="image/*" onChange={this.onImageChange} />

现在我想使用另一个按钮来做这件事,触发上面的输入:

代码语言:javascript
复制
<button onClick={() => {
    var element = document.getElementById('example');

    console.log(element) // This shows <input id="example" type="file" accept="image/*">

    // element.onChange() // Error: onChange() is not a function

    // Above doesn't work, so I try to trigger the onChange event manually,
    // but below doesn't do anything
    var event = new Event('change');
    element.dispatchEvent(event);
}}></button>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-14 05:36:33

如果是react,就不应该访问Dom来获取这些东西。他们有一个Api来满足你的需求。

您需要一个非控制器组件。为了做到这一点,你可以使用一个引用。

我还没试过,但我认为你能做到。

在构造函数上创建ref

代码语言:javascript
复制
this.inputRef = React.createRef();

然后将输入ref prop赋值给this.inputRef

代码语言:javascript
复制
<input ref={this.inputRef} id='example' type="file" accept="image/*" onChange={this.onImageChange} />

和最近发送的点击。

代码语言:javascript
复制
this.inputRef.current.click();

希望它能起作用

票数 4
EN

Stack Overflow用户

发布于 2019-02-14 06:58:27

element.onChange不是一种方法,因为您的onChange函数存储在react组件类中,并通过React的合成事件发射器进行委托。它是React.createElement('input')的属性,但不是实际DOM元素的属性。

要调用React元素的onChange方法,可以像this.onChange(event)一样直接调用它。

这种方法的问题是,您的事件不会附加目标。

change方法旨在提供一个用于控制输入值的接口,因此,如果要更改附加到输入的文件,只需在状态中更改其值即可。

代码语言:javascript
复制
this.setState({file: this.alternateFile}) 
票数 1
EN

Stack Overflow用户

发布于 2019-02-14 05:33:06

onChange函数是选择文件后的回调函数。

如果您想要显示带有另一个按钮的文件选择器,您可以查看此answer

请记住,由于安全原因,您需要触发onClick函数上的选择器,因此用户输入是必需的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54679691

复制
相关文章

相似问题

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