使用react js我需要多个图像上传和预览我试过下面的代码是不工作它显示我在控制台中的错误
未捕获的DOMException:无法在'HTMLInputElement'上设置'value'属性:此input元素接受一个文件名,该文件名只能以编程方式设置为空字符串。
uploadImage(e){
var numFiles = e.target.files.length;
for (var i = 0, numFiles = e.target.files.length; i < numFiles; i++){
var file = e.target.files[i];
if(!file.type.match('image'))
continue;
var reader = new FileReader();
reader.onload = function(e) {
setOfImages.push({
fileName:file.name,
image:e.target.result.split(',')[1]
});
for(var j = 0; j<setOfImages.length; j++) {
$('.placeholder-blk').prepend('<div class="image-placeholder"><img src="data:image/jpeg;base64,'+ setOfImages[j].image +'" /></div>');
}
console.log(setOfImages);
}
reader.readAsDataURL(file);
}
}
<input type="file" name="image-uploder" id="image-uploder" className="file-loader" onChange={this.uploadImage.bind(this)} multiple />
您是否尝试将值添加到状态并从状态填充名称。就像是
<input type="file" name={this.state.setOfImages} id="image-uploder" className="file-loader" onChange={this.uploadImage.bind(this)} multiple />
在你的函数里面填充状态。
this.setState({setOfImages: JSON.stringify(setOfImages)})
这样的事情。
export class Demo extends React.Component{
constructor(props){
super(props)
this.state = {
setOfImages : []
}
}
setOfImages(event){
event.preventDefault();
this.setState({
setOfImages: ["hello", "hi"]
})
}
render(){
return (
<div>
<input value={this.state.setOfImages}/>
<button onClick={this.setOfImages.bind(this)}/>
</div>
)
}
}
现在首先输入将填充空数组。当您单击按钮时,状态将通过设置setOfImages = [“hello”,“hi”]并将输入值设置为这些值来更改。
这没有任何意义$('.placeholder-blk').remove();
然后尝试前置到那?没了。
这里只有第一个文件?
var file = e.target.files[0];
你的意思是处理文件
var numFiles = e.target.files.length;
for (var i = 0, numFiles = e.target.files.length; i < numFiles; i++)
{ var file = e.target.files[i]; .. }
请参考这里如何做原始:developer.mozilla.org/en-US/docs/