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

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

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

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

JavaScript

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

Q&A

解決済

4回答

7840閲覧

input type="checkbox" を使用した時の値の渡し方について

退会済みユーザー

退会済みユーザー

総合スコア0

HTML5

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

JavaScript

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

0グッド

0クリップ

投稿2017/08/23 03:49

編集2017/08/23 08:16

いつもお世話になっております。今回<table>の中でチェックボックスを使い、チェックボックス
にチェックが入っているものだけを登録するようなプログラムを作っています。

現状、チェックが入っているものはクエリーでFLG=onと渡せるのですが、チェックを外した場合は
FLG自体渡せない状況です。何か他の方法があるのでしょうか?初歩的な質問ですがよろしくお願い致します。

lang

1<input type='checkbox' name='FLG' checked='checked' />

渡すプログラムとしてはフォーム要素からクエリ文字列を生成し、RPG側へと渡しています。
RPGの該当箇所だけ抜粋するとここで判断しているようです。

lang

1EVAL G@SKFLG = #FV(FV:'FLG':W@I) 2 3IF G@SKFLG = *BLANK 4ITER 5EDNIF

lang

1this.buildForm = function(form, isEncoding) { 2 if (!isEncoding) { isEncoding = true; } 3 4 for (var i = 0; i < form.elements.length; i++) { 5 var elem = form.elements[i]; 6 if (elem.tagName == "INPUT") { 7 if (elem.type == "checkbox" && elem.checked && !elem.disabled) { 8 //this.queries[elem.name] = elem.value; 9 this.addParam(elem.name, elem.value); 10 } else if (elem.type == "radio" && elem.checked && !elem.disabled) { 11 //this.queries[elem.name] = elem.value; 12 this.addParam(elem.name, elem.value); 13 } else if (elem.type == "text" && !elem.disabled && !elem.readonly) { 14 //this.queries[elem.name] = elem.value; 15 this.addParam(elem.name, elem.value); 16 } else if (elem.type == "password" && !elem.disabled && !elem.readonly) { 17 //this.queries[elem.name] = elem.value; 18 this.addParam(elem.name, elem.value); 19 } else if (elem.type == "hidden" && !elem.disabled && !elem.readonly) { 20 //this.queries[elem.name] = elem.value; 21 this.addParam(elem.name, elem.value); 22 } 23 } else if (elem.tagName == "SELECT") { 24 for (var x = 0; x < elem.length; x++) { 25 var opt = elem[x]; 26 if (opt.selected) { 27 //this.queries[elem.name] = opt.value; 28 this.addParam(elem.name, opt.value); 29 } 30 } 31 } else if (elem.tagName == "TEXTAREA") { 32 //this.queries[elem.name] = elem.value; 33 this.addParam(elem.name, elem.value); 34 } 35 } 36 37 return this.build(isEncoding); 38 } 39

クエリ文字列生成のJavaScriptを変更してみましたが、上手く動きませんでしたので、
HTML側で見た目だけのチェックボックスを作り、onoff判定はhiddenで渡そうとしましたが、
Uncaught TypeError: Cannot read property '0' of undefined
のエラーが出ました。素直にIF文でチェックされている行のみをRPG側に渡すほうがよろしいでしょうか。

lang

1+"<input type='checkbox' id='chkflg' name='FFLG' checked='checked'>"//見た目だけのチェックボックス 2 //チェックされていない場合HS1_SKFLGにoffを 3 if(!document.forms.listForm.chkflg[i].checked){ 4 document.listForm.HS1_SKFLG[i].value = "off"; 5 } 6 7+"<input type='hidden' name='HS1_SKFLG' /></td>" 8

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

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

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

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

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

m.ts10806

2017/08/23 04:02

取得側はどのような処理を書かれていますか?
退会済みユーザー

退会済みユーザー

2017/08/23 04:29

RPG言語で書かれており、対応は難しいそうです。チェックされたものとそうでないもの全体を渡すか、チェックされたものだけ渡してほしいとのことです。(FLG=が欲しい)
m.ts10806

2017/08/23 05:12

RPGとはまた懐かしい。その取得側、および渡す側のコードの提示は可能ですか?
m.ts10806

2017/08/23 05:19 編集

そういえば以前ASの話をされてましたね。 どうりでRPGがでてくるわけだ。
退会済みユーザー

退会済みユーザー

2017/08/23 05:54

覚えていていただきありがとうございます。途中参加のプロジェクトですが、システム刷新とのことです…見た目だけは今のところ良くなってます。
m.ts10806

2017/08/23 05:55

「フォーム要素からクエリ文字列を生成し」の部分のコードもご提示いただきたいのですが・・
退会済みユーザー

退会済みユーザー

2017/08/23 05:59

失礼しました。少々長いですが追記いたしました。
guest

回答4

0

ちゃんとやるなら
最初からFLGがあるとサーバー側がわかっているのですから
送られてこない時点でチェックされてないと判断すればいいです

姑息な手段として別途hiddenでFLGを宣言しておくという手もあります
これはサーバー言語が基本的に後に宣言されたパラメータ値を優先するという性質を利用しています

PHP

1<form method="get"> 2<input type="hidden" name="FLG" value="0"> 3<input type="checkbox" name="FLG" value="1"> 4<input type="submit" value="go"> 5</form> 6<?PHP 7print filter_input(INPUT_GET,"FLG"); 8?>

ただし、これは不必要に同じnameの要素が設定されてしまい
javascriptなどで参照するときにデメリットが発生したりするのでお勧めしません

投稿2017/08/23 04:02

編集2017/08/23 04:04
yambejp

総合スコア114572

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

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

0

ラジオボタンではだめなのでしょうか?

HTML

1 <form action="#"> 2 <div> 3 <label><input type="radio" name="FLG" checked="checked" value="on" />on</label> 4 <label><input type="radio" name="FLG" value="" />off</label> 5 <input type="submit" /> 6 </div> 7 </form>

投稿2017/08/23 04:24

編集2017/08/23 06:19
x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2017/08/23 04:30

チェックあるものだけを登録したいため、チェックボックスにしています。
x_x

2017/08/23 04:36

チェックを外すとFLGが渡せないと言い、その反面チェックあるものだけが欲しいというのでは、何がしたいのかわかりません。
退会済みユーザー

退会済みユーザー

2017/08/23 04:40

FLG=が必要なだけです。
x_x

2017/08/23 05:08

なぜかマイナスになっていますが、オンオフで渡すならselectかradioしかないと思います。
退会済みユーザー

退会済みユーザー

2017/08/23 08:09

すみません間違えました。
guest

0

サーバ側で判定すればどうでしょうか。
http://wp.akirumade.com/checkbox-checked-submit/

投稿2017/08/23 03:52

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

チェックしている状態がelem.checkedで取得できているのでしたら、
その逆の条件の時にはチェックされてないという条件を取得できるはずです。

javascript

1if (!elem.checked) { 2 alert("チェック外れてるよ"); 3}else{ 4 alert("チェックされてるよ"); 5}

※Chromeで動作確認

上記踏まえてcheckbox部分を以下のようにされてはどうでしょうか?

javascript

1 2if (elem.type == "checkbox") { 3 if(elem.checked && !elem.disabled){ 4 checkvalue = elem.value; 5 }else if(!elem.checked || elem.disabled){ //条件としては冗長ですが確実に捉えるため 6 checkvalue = ""; 7 } 8 this.addParam(elem.name, checkvalue ); 9} else if (elem.type == "radio" && elem.checked && !elem.disabled) { 10・・・

elem.disabledでチェックされている場合どうするかは別途条件をご検討ください。

投稿2017/08/23 06:35

編集2017/08/23 06:38
m.ts10806

総合スコア80765

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

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

m.ts10806

2017/08/23 06:39

RPG側が修正できないのであればチェックされてない時に空文字を渡してやると良いです。 (OFFって書いてましたがちょっと修正しました)
m.ts10806

2017/08/23 06:42 編集

それか、forに入った時に初期値で var elem = form.elements[i]; this.addParam(elem.name, ""); としておくとか。 同じパラメータが被った時にどうなるかは検証が必要ですが。
退会済みユーザー

退会済みユーザー

2017/08/23 08:17

空文字は試しましたが、for文の方はまだ試していませんでした。試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問