質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

851閲覧

jQueryで、submit時にサイズの大きい<input type="file">のデータを初期化する方法

yayak

総合スコア66

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2019/01/30 18:05

jQueryで、submit時にサイズの大きい<input type="file">のデータを初期化する方法がどうしてもわかりません。

以下のようなデータを3つ送れるフォームがあるとします。

<form name="form" action="" method="post" enctype="multipart/form-data"> <input type="file" name="image1"> <input type="file" name="image2"> <input type="file" name="image3"> <input type="submit" value="送信"> </form>

以下のjQueryで「サイズが10M以上のデータが選択されたらデータを初期化」には成功しました。

$(function() { $("*[name=image1],*[name=image2],*[name=image3]").on('change', function() { var imgSize = this.files[0].size; //ここでファイルサイズを取得 if ( imgSize > (10*1024*1024) ) { //10Mを超えていた場合の処理 $(this).val(''); //選択したデータを初期化 } }); });

しかし、「submitが押されたら、現在選択されているデータのうち、サイズが10M以上の画像データを初期化」する方法が、全くわかりません。

jQueryの基礎が学べるサイトも見てみたのですが、頭がこんがらがってしまいました。。

おわかりになる方がいらっしゃいましたら、どうかご教授頂けましたら幸いです。

何卒、宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

javascript

1<script> 2$(function(){ 3 $("form").on('submit', function(e) { 4 $(this).find(':file').filter(function(){ 5 return ($(this).get(0).files[0]||{size:0}).size>1024*1024*10; 6 }).val(""); 7 }); 8}); 9</script> 10 11<form name="form" method="post" enctype="multipart/form-data"> 12<input type="file" name="image1"><br> 13<input type="file" name="image2"><br> 14<input type="file" name="image3"><br> 15<input type="submit" value="送信"> 16</form>

投稿2019/01/31 00:48

yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2019/01/31 12:40

理想通りの動作を実現できました! 本当に、全然知らないコードの書き方で、自身の勉強不足を痛感しています。 頂いた情報をもとに、もっと体系的に勉強できるように精進します。 重ねて、本当に有難うございます。救われました<(_ _)>
guest

0

ループさせるか一個一個name指定でチェックですかね。submitでしたらreturn falseなりpreventDefaultはいれておく必要がありますね。

ただ、
submitがおされたら、だとサーバーに送信されている状態でもありますし、今回対応しようとしている「初期化」は単なる「選択解除」でしかないので、バリデーションの類いなのでしたらJavaScriptのようなクライアントサイドてはなくサーバーサイドでのチェックをすべきと思います。
※そもそもサーバー側の設定でpost総量のの最大サイズを指定できますし10Mって相当でかいです

投稿2019/01/30 21:17

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yayak

2019/01/31 12:46

mts様、いつも助力をくださり、心より御礼申し上げます。 phpにて、if( $_SERVER['CONTENT_LENGTH'] > (10*1024*1024) ){//処理} という具合に、バリテーションをしているのですが、クライアントサイドでもできるようになりたくて勉強していたのですが、煮詰まってしまい、涙目でこのサイト様にお世話になることになりました。。 また、確かに10Mって相当大きいなと指摘されて思い、もっと小さくしようと思います。 本当に、いつも有難うございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問