次のコードが機能していません。入力が変更されたときに画像をスワル(スウィートアラート)に表示したいのですが、何が機能していないのかわかりません。コンソールで次のエラーが発生します。
Failed to execute'readAsDataURL' on 'FileReader': parameter 1 is not type 'Blob'
[〜#〜] input [〜#〜]
<input id="input" type="file" style="display:none;" onchange="muda()">
スクリプト
<script>
function muda(){
var thefile = document.getElementById('input');
var reader = new FileReader();
reader.onloadend = function(){
var imagem = reader.result;
}
if(thefile){
reader.readAsDataURL(thefile);
}
swal({
title: "Esta é a imagem que pretende inserir?",
text: "<img src='"+imagem+"' style='width:150px;'>",
html:true,
});
}
</script>
[〜#〜] update [〜#〜]
Adaneoの応答で、.files[0];
を追加してファイル名を読み取ることができましたが、画像パスを取得する方法がわかりません。コードに示されているように、imageという名前の変数を配置しようとしましたが、undefined
になります。
渡す引数thefile
は、ファイルではなくDOM要素です。
要素全体ではなく、ファイルを渡したい
var thefile = document.getElementById('input').files[0];
これにより、最初の(そして、「複数」が設定されていないため)ファイルが選択され、FileReaderに渡されます。
reader.onloadend
は非同期であるため、swal()関数をコールバック内に配置する必要があります
インラインJavaScriptを使用せずに、これを行う別の方法があります
document.getElementById('input').addEventListener('change', function() {
var thefile = this.files[0];
var reader = new FileReader();
reader.onload = function() {
swal({
title: "Esta é a imagem que pretende inserir?",
text: "<img src='" + reader.result + "' style='width:150px;'>",
html: true,
});
}
reader.readAsDataURL(thefile);
}, false);
<div onclick="imgClick(this)">
<img src="image/img1.jpg" width="150px">
</div>
<script>
function imgClick(e){
var src = $(e).find('img').attr('src');
swal({
title: "Hello World",
text: "<img src='"+src+"' style='width:150px;'>",
content:true,
});
}
</script>
@adeneoの返信とともに、swalについてさらに追加したいと思います。最新のswalのドキュメントによると、次のようになります。
swal({
title: '<strong>HTML <u>example</u></strong>',
type: 'info',
html:
'You can use <b>bold text</b>, ' +
'<a href="//github.com">links</a> ' +
'and other HTML tags',
});
もちろん、htmlタグには何でも入れることができます。