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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

4428閲覧

Form::select内で条件分岐させて"disabled"を設定したい

gobindar

総合スコア51

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/17 07:48

編集2019/03/17 23:45

お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。

やりたいこと

Laravel collectiveを使用して、
セレクトボックスに対して、
view内のある変数(当質問ではold値)の内容を
基準にdisabledを設定したい(下記操作手順の④)のですが、
エラーが出現するため困っています。

操作手順と意図

① データ入力画面にて、チェックボックスにチェックを入れる
(javascriptにより、チェックボックスをクリックすると
セレクトボックスが無効化される)
② 確認ボタンを押し、データ入力の確認画面へ移動する
③ 戻るボタンで確認画面からデータ入力画面に戻る
④ データ入力画面に戻ると、各項目はold値を取得しているので
入力時の値が保持されている。
この際、チェックボックスにはチェックが入っているが、
セレクトボックスは無効化された状態になっていない。
(無効化のjavascriptはクリックをトリガーにしているので当然)
そのため、viewを読み込む際に、チェックボックスのold値が
onになっている場合は、セレクトボックスをdisabledにする
ようにしたい。

エラー文

Parse error: syntax error, unexpected 'if' (T_IF), expecting ']'

現状

viewのソース

php

1//セレクトボックス 2 {!! Form::select('category', $items->category, old('category'), ['id' => 'category_select', 'placeholder' => '選択してください', 3 'onclick' => 'clicksetNonSelect("category_select")' 4 ,if(old('checkbox') ==="on"){'disabled' => true}]) !!} 5 6//チェックボックス 7 <div class="pretty p-icon p-curve"> 8 <input type="hidden" name="undecided" value=""> 9 {!! Form::checkbox('undecided', 'on', old('undecided'), ['id' => 'undecided', 'onclick' => 'clicksetNonSelect("category_select")']) !!} 10 <div class="state"> 11 <i class="icon mdi mdi-check"></i> 12 <label>カテゴリを設定しない</label> 13 </div> 14 </div> 15

エラー時に出力されるソース(laravel collectiveの表記変換後)

php

1 <?php echo Form::select('category', $items->category, old('category'), ['id' => 'category_select', 'placeholder' => '選択してください', 2 'onclick' => 'clicksetNonSelect("category_select")' 3 ,if(old('checkbox') ==="on"){'disabled' => true}]); ?>

チェックボックスクリック時にセレクトボックスを無効化するjs

php

1function clicksetNonSelect(undecided){ 2 if ($("#undecided").prop("checked") == true) { 3 var obj = document.getElementById(undecided); 4 obj.selectedIndex = 0; 5 $("#category_select").attr('disabled', true); 6 } else { 7 $("#category_select").attr('disabled', false); 8 } 9}; 10

宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/17 14:06

情報が不足しているので、補足してください。
gobindar

2019/03/17 23:46

Kosuke_Shibuya様 修正依頼有難うございます。 手順やチェックボックスのソースなど追記致しましたが、 こちらで十分でしょうか?
guest

回答1

0

ベストアンサー

syntaxエラーですので、phpの記述の問題ですね。
配列の要素を増減させたいとしても、if文でそんな風に記述することはできないです。

php

1{!! Form::select('category', $items->category, old('category'), 2 ['id' => 'category_select', 'placeholder' => '選択してください', 3 'onclick' => 'clicksetNonSelect("category_select")', 'disabled' => old('checkbox') ==="on"]) !!}

では、期待する状態にはならないのでしょうか?

disabled を渡してしまうことが問題ならば、phpで配列を作成してしまう方が分かりやすいかも。

php

1<?php $category_option = [ 'id' => 'category_select', 'placeholder' => '選択してください', 'onclick' => 'clicksetNonSelect("category_select")']; 2if(old('checkbox') ==="on"){ $category_option['disabled'] = true; } 3?> 4{!! Form::select('category', $items->category, old('category'), $category_option) !!}

あるいは、入力画面開いた時も、jsで初期処理として、

javascript

1clicksetNonSelect("category_select");

を1回呼ぶだけでもいいと思いますが、こちらは出来ない理由があったりするのでしょうか・・?

あと余談ですが、
select#category_selectに、'onclick' => 'clicksetNonSelect("category_select")'は、不要なのでは・・?

投稿2019/03/19 08:42

mix-peach

総合スコア1910

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

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

gobindar

2019/03/26 11:59

mix-peach様 ご回答ありがとうございます。 お返事遅くなり大変申し訳ありません。 ご教示の方法で実装ができました、ありがとうございます。 また、select#category_selectに、'onclick' => 'clicksetNonSelect("category_select")' についてはご指摘の通り不要でしたので、 削除致しました。 大変ご丁寧な回答助かりました、 またお返事遅くなりましたことお詫び申し上げます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問