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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3238閲覧

jQueryでフォームの値変更がうまくいかない

mickey

総合スコア27

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/04/29 13:26

<form id="salary_form" name="salary_form"> <input type="text" id="min"> <input type="number" id="max"> <input type="hidden" name="s" id="salary_range"> <input type="submit"> </form>

上記のような金額の下限と上限を入力するフォームがあり、

$('#salary_form').submit(function(){ var min = $('#min').val(); var max = $('#max').val(); if(min === '' && max === ''){ $('#salary_range').remove(); } else if(min !== '' && max !== ''){ if(min > max){ $('#salary_range').val(max + '__' + min); } else { $('#salary_range').val(min + '__' + max); } } else if(min !== '' && max === ''){ $('#salary_range').val(min + '__' + max); } else if(min === '' && max !== ''){ $('#salary_range').val(min + '__' + max); } });

のようにサブミットボタンを押すと入力された上限と下限を整形してhiddenのvalueに挿入されるようにしました。
jQueryの4つにわかれている条件分岐の中で唯一2段めの

if(min !== '' && max !== ''){ if(min > max){

の部分がうまく動作しません。いつでも動作しないわけではなく、したりしなかったりという状況です。
これは、下限と上限とも空白ではなく数値が入力された状態で、かつ上限よりも下限のほうが大きい時に

$('#salary_range').val(max + '__' + min);

mixとmaxを入れ替えて表示するようにしたかったのですが、入れ替わらずに(min + '__' + max)で表示されます。例をあげると
下限100、上限5で入力された場合下限が上限よりも大きいので下限と上限をいれかえて(5__100)と表示したいのに(100__5)と表示されます。
そしてさきほども言及しましたがこれが予想通り動作したりしなかったりします。
なにが問題なのでしょう??

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

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

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

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

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

s-show

2017/04/29 13:56

「金額の下限と上限を入力」とありますが、 <input type="number" id="min"> ではなく <input type="text" id="min"> にしている理由はどのようなものでしょうか? これだと、半角数値以外が入力される恐れがあり、入力された値のチェックに一手間かける必要が生じます(JSでは全角数値は数値として扱われません)。
guest

回答2

0

ベストアンサー

文字列を整数に直さず文字列のまま比較しているからではないかと思うので、parseInt関数で整数に直すことで解決すると思いますが、いかがでしょうか?

HTML

1<html> 2<head> 3 <meta charset="UTF8"> 4 <title>タイトル</title> 5 <style type="text/css"> 6 * { 7 margin: 0; 8 padding: 0; 9 } 10 11 .bar2 { 12 width: 210px; 13 height: 280px; 14 font-size: 14px; 15 display: inline-block; 16 background-color: #fff2de; 17 position: relative; 18 } 19 20 .opinion { 21 position: absolute; 22 top: 5px; 23 left: 70px; 24 } 25 26 .text { 27 position: absolute; 28 top: 50px; 29 left: 15px; 30 height: 170px; 31 } 32 33 .submit { 34 position: absolute; 35 top: 85%; 36 left: 37%; 37 } 38 </style> 39</head> 40<body> 41<form id="salary_form" name="salary_form"> 42 <input type="text" id="min"> 43 <input type="number" id="max"> 44 <input type="text" name="s" id="salary_range"> 45 <input type="submit"> 46</form> 47<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 48<script> 49 $('#salary_form').submit(function () { 50 var min = $('#min').val(); 51 var max = $('#max').val(); 52 53 if (min === '' && max === '') { 54 $('#salary_range').remove(); 55 } 56 else if (min !== '' && max !== '') { 57 if (parseInt(min) > parseInt(max)) { 58 $('#salary_range').val(max + '__' + min); 59 } else { 60 $('#salary_range').val(min + '__' + max); 61 } 62 } 63 else if (min !== '' && max === '') { 64 $('#salary_range').val(min + '__' + max); 65 } 66 else if (min === '' && max !== '') { 67 $('#salary_range').val(min + '__' + max); 68 } 69 return false; 70 }); 71</script> 72</body>

投稿2017/04/29 13:42

編集2017/04/29 13:52
s8_chu

総合スコア14731

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

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

mickey

2017/04/29 13:49

ありがとうございます。完全に解決しました!
guest

0

mickey さん

パッと見て思ったのが、maxとminの値は文字列になってると思います。
この場合は暗黙の型変換は行われませんので文字列の比較になります。

文字列の比較の場合は文字列の長さに関わらず、先頭の文字同士で比較して不等号が成立した時点で結果を返します。ですので

"100" > "5"

の場合は

"1" > "5"

のように比較していることになり、想定と逆の動作をしているわけです。

解決方法としてはminとmaxの値を parseInt() で変換する処理を追加すれば想定通りの動作をすると思います。

投稿2017/04/29 14:07

t_tonchim

総合スコア96

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問