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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Q&A

解決済

2回答

3563閲覧

ファイルアップロードのバリデーションをsubmitで制御したい

mccandless

総合スコア11

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/08/28 11:29

前提・実現したいこと

お問い合わせフォームで画像ファイルのアップロード時に容量と拡張子でバリデーションをし、submitでエラー時に先に進めないようにしたいのですが、エラーは表示するのですが、submitが制御できせん。
jqueryのスコープの理解ができていなく、「var result」の値がうまく行っていないと思うのですが、教えていただけないでしょうか。

ソース

HTML

1<form action="carbon_confirm.html" method="post" id="form-name"> 2 <div class="form__main__list"> 3 <dl> 4 <dt><p class="icon--req">画像の添付</p></dt> 5 <dd class="formType--file"> 6 <div class="upLoad--btn">ファイルを選択 7 <input type="file" name="画像の添付" id="file" onchange="uv.style.display='inline-block'; uv.value = this.value;"> 8 </div> 9 <div class="upLoad--value"> 10 <input type="text" id="uv" class="uploadValue" disabled value="選択されていません"/> 11 </div> 12 </dd> 13 </dl> 14 <div class="form__main__list__note" id="file__note"> 15 <p>データ形式 : jpg / psd / ai</p> 16 <p>データサイズ : 5MB以下</p> 17 </div> 18 <div class="fileError--size">※ データサイズは5MB以下にしてください</div> 19 <div class="fileError--name">※ データ形式をご確認ください</div> 20 </div> 21 22 <div class="form__main__btn"> 23 <span><input type="submit" value="入力内容を確認する"></span> 24 </div> 25</form>

jquery

1$(function(){ 2 var result = true; 3 4 $('input:submit').click(function(){ 5 if(!result == true){ 6 return false; 7 } 8 }); 9 10 $('#file').bind('change', function() { 11 var imgSize = this.files[0].size; 12 var imgName = this.files[0].name; 13 console.log(imgSize); 14 if(imgSize >= 5242880){ //5MB: 5242880 15 $(".fileError--size").addClass("checked"); 16 return false; 17 }else{ 18 $(".fileError--size").removeClass("checked"); 19 } 20 if (!imgName.match(/.(jpg|psd|ai)$/i)){ 21 $(".fileError--name").addClass("checked"); 22 return false; 23 } 24 }); 25 return result; 26});

css

1.fileError--name, 2.fileError--size{ 3 width: auto; 4 min-width: 120px; 5 padding: 7px 13px 7px; 6 font-size: 1.2rem; 7 line-height: 1.5; 8 color: #FFFFFF; 9 background-color: #ee0101; 10 display: none; 11} 12.fileError--name.checked, 13.fileError--size.checked{ 14 display: inline-block; 15}

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

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

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

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

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

kyoya0819

2019/08/28 12:40

jQueryではやらないほうがいいと思いますが? わかる人が見れば制限以上のものをアップロードできてしまいます。
mccandless

2019/08/28 15:16

ご連絡ありがとうございます。通常はPHP等で処理した方が良いと思いますが、今回必要に迫られてのご質問になります。
guest

回答2

0

こういうことかな。

js

1 $('#file').bind('change', function() { 2 var imgSize = this.files[0].size; 3 var imgName = this.files[0].name; 4 console.log(imgSize); 5 if(imgSize >= 5242880){ //5MB: 5242880 6 $(".fileError--size").addClass("checked"); 7 result = false; 8 // return false; 9 }else{ 10 $(".fileError--size").removeClass("checked"); 11 } 12 if (!imgName.match(/.(jpg|psd|ai)$/i)){ 13 $(".fileError--name").addClass("checked"); 14 result = false; 15 // return false; 16 } 17 }); 18// return result;

投稿2019/08/28 17:47

kei344

総合スコア69407

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

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

mccandless

2019/09/02 10:25

ありがとうございます。上記を参考に「解決した方法」で解決しました。ありがとうございました。
guest

0

自己解決

$(function(){
$('#file').bind('change', function() {
imgSize = this.files[0].size;
imgName = this.files[0].name;
console.log(imgSize);
if(imgSize >= 5242880){ //5MB: 5242880
$(".fileError--size").addClass("checked");
error = 1;
return false;
}else{
$(".fileError--size").removeClass("checked");
error = 0;
}
if (!imgName.match(/.(jpg|psd|ai)$/i)){
$(".fileError--name").addClass("checked");
error = 1;
return false;
}else{
error = 0;
}
});

$('input:submit').click(function(){ if(error === 1){ return false; } });

});

投稿2019/09/02 10:22

mccandless

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問