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

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

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

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

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

Q&A

解決済

2回答

1568閲覧

phpのselectboxで選んでいるものをjsに渡したい。

momolength

総合スコア62

PHP

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

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

JavaScript

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

0グッド

0クリップ

投稿2021/06/07 04:41

編集2021/06/07 04:57

selectboxが2つあり、selectbox1で入力した内容にそって、selectbox2の内容を変えたいです。
今はselectbox1に対しては、コントローラーでdbから取得したものを$selectlistに入れてそれviewで表示させてるだけです。

それにあたり、まず第1段階として選択した内容をjsで取得したいんですが、

echo $this->Form->select( 'Search.id', $selectlist, array( 'empty' => '', 'value' => $this->request->query('id'), 'empty' => false, 'onchange' => 'selectChange()', ) );
$(document).ready(function() { function selectChange() { var selectedValue = $("#SearchId").val(); console.log(selectedValue) } }

上記のように書いてもうまくいきません。
consoleのエラーは以下です。

Uncaught ReferenceError: selectChange is not defined at HTMLSelectElement.onchange

selectには初期値は既に設定されており、ページを開いた直後に選択されているものを表示させたいです。
どう変えるべきですか?

cakephp2

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

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

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

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

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

guest

回答2

0

#SearchIdというIDは正しいのでしょうか。PHPの出力結果であるHTMLで確認してみましょう。

投稿2021/06/07 04:53

maisumakun

総合スコア145201

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

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

momolength

2021/06/07 04:55

はい正しいです。 この書き方でIdはコードのようになります。
maisumakun

2021/06/07 04:58

上のコードを改めて確認してみましたが、selectChangeという関数を定義しているだけで実行していません。 selectChange()を呼ぶか、あるいはselectChange関数を立てずに.ready(function() {以下に直接コードを書くかをする必要があります。
momolength

2021/06/07 05:01

なるほど。そういえばそうでした..。失礼しました。 ページ読み込みの時点で初期値設定されているので、それを取得したいんですが、 window.onload = function ~ としたら、選択を変えた時にまた同じエラーが出ます。
maisumakun

2021/06/07 05:06

> window.onload = function ~ としたら、選択を変えた時にまた同じエラーが出ます。 そんな話はしていないのですが。
momolength

2021/06/07 05:13

>selectには初期値は既に設定されており、ページを開いた直後に選択されているものを表示させたいです。 一緒に書いていたので把握されているものだと。結果を書いていなかったので分からないですよねすみません。 外に出したら動きました。選択ごとに値を取得できました。 質問文に書いてある通り、読み込み時に取得しかつ選択を変えた時にも取得したいです。 しかし、onloadをつければ、読み込み時に取得はできても選択を変えた時は質問文のエラーが出るようになってしまいます。
maisumakun

2021/06/07 05:41 編集

> 一緒に書いていたので把握されているものだと。 いえ、把握しています。 > 質問文に書いてある通り、読み込み時に取得しかつ選択を変えた時にも取得したいです。 質問文から「読み込み時に取得しかつ選択を変えた時にも取得したい」というのが読み取れなかったので、「まず第1段階として選択した内容をjsで取得したい」だけの実装を考えていました。
momolength

2021/06/07 05:46

そうですか。はいわかりました。
guest

0

ベストアンサー

Formヘルパーの第一引数はnameプロパティです。なので、idを指定したいならば
第三引数に追記する必要があります。

ctp

1 //cakePHP4ならphpです 2 $this->Form->select( 3 'Search.id', 4 $selectlist, 5 array( 6   'id' => 'searchId', 7 'empty' => '', 8 'value' => $this->request->query('id'), 9 'empty' => false, 10 'onchange' => 'selectChange()', 11 ) 12 );

また、jQuery内で囲まれたイベントトリガーはjQueryのイベントを適用するので、その場合はjsのイベントトリガーは対応できません。今回はjsのonChangeイベントが使われているので、その場合はjQueryの指定は不要です。

js

1//$(document).ready(function() { /*コメントアウトしてjQueryの外側へ*/ 2 function selectChange() { 3 var selectedValue = $("#searchId").val(); 4 console.log(selectedValue) 5 } 6//})

逆に、index.ctpからonchangeプロパティとメソッドを消去して、jsに以下の

webroot/js/xxxx.js

js

1 $('#SearchId').on("change",function(){ 2 var selectedValue = $(this).val(); 3 console.log(selectedValue) 4 })

と記述すれば取得できます。

つまり、イベントトリガーはjQueryかJavascriptのいずれかにしか対応してません。

投稿2021/06/07 04:52

編集2021/06/07 06:32
FKM

総合スコア3644

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

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

momolength

2021/06/07 04:55

いいえ、この書き方でID値は設定されます。コードの通りです。
FKM

2021/06/07 05:07

ブラウザの開発画面でテストしてみたらこうでるんですけど。idプロパティとオブジェクト変数のidキー、またはメンバを勘違いされてないですかね。 <select name="Search[id]" onchange="selectChange()">
momolength

2021/06/07 05:18 編集

いいえ、ですから id = にコードの通りの値が入っているんです。 IDは問題ないとして、他の方の指摘により選択時にconsolelogで取得はできるようになりました。 しかし、読み込み時に取得しかつ選択を変えた時にも取得したいです。 しかし、onloadをつければ、読み込み時に取得はできても選択を変えた時は質問文のエラーが出るようになってしまいます。
FKM

2021/06/07 06:33

cakePHP2だとそういう仕様もあるのかも知れませんね、今手元にcake2の環境はないのですが、jsの挙動はわかりましたので、追記してます。
momolength

2021/06/07 06:55

ご丁寧にありがとうございました。 これをどう処理するかはまだこれからの課題です。完了とします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問