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

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

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

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

PHP

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

jQuery

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

Q&A

解決済

2回答

12281閲覧

datalistから選択した時にテキストボックスの値を取得したい

madoka9393

総合スコア992

HTML5

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

PHP

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

jQuery

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

0グッド

0クリップ

投稿2018/08/06 06:37

編集2018/08/06 07:24

入力フォームに以下のようなテキストボックスがあります。

PHP

1<div class="textbox"> 2 <?php 3 $text = Input::post('text', !empty($model->text) ? $model->text : null); 4 $attr = array('class'=>'form', 'list'=>'data_list', 'id'=>'text_box', 'required'=>'required'); 5 echo Form::input('text', $text, $attr); 6 ?> 7 <datalist id="data_list"> 8 <?php 9 for ($count = 0; $count < count($result); $count++) { //resultはテーブルのセレクト結果 10 echo "<option index=" .$result[$count]["id"]. " value=" .$result[$count]["name"]. ">"; 11 } 12 ?> 13 </datalist> 14</div>

ためしたこと

上記のデータリストから値を選択した時に、選択したリストのvalueが挿入され(ているように見え)ますが、
テキストボックスのchangeイベントでは値を取得できませんでした。

datalistから
イメージ説明
テスト1を選択する
イメージ説明

jQuery

1$(document).ready(function() { 2 $("#text_box").change(function() { 3 var text_value = $("#text_box").val(); 4 console.log(text_value); 5 }); 6});

この場合でいうところの「テスト1」を取得したいと思っています。
何卒、お知恵をお借りしたく存じます…。

追記1:マウスクリックで初めて選択した場合に値が取得できませんでした。
(上下キーで選択後、2回目以降のマウスクリック時は取得できています。)
追記2:上下キーでの選択についても、初めの1回は値が取得できていません。
追記3:値が取得できるのはテキストボックスが選択外になったタイミングでした。

inputイベントのウォッチ反映後

・選択した値が変更(BSやキー入力で値が変更)された時には取得できました。
・上記追記1の通り、マウスクリックで選択した場合は値が取得できません。

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

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

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

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

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

guest

回答2

0

datalistから選択しただけでは入力途中なので拾えません。
inputイベントをウォッチしてみてください

※以下コピペ

javacript

1<meta http-equiv="content-type" charset="utf-8"> 2<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 3<script> 4$(function(){ 5 $("#text_box").on('input',function() { 6 var text_value = $(this).val(); 7 console.log(text_value); 8 }); 9}); 10</script> 11 12<form> 13<input type="text" list="data_list" name="text_box" id="text_box" required> 14<datalist id="data_list"> 15<option value="テスト1"> 16<option value="テスト2"> 17<option value="テスト3"> 18</datalist> 19</form>

投稿2018/08/06 06:46

編集2018/08/06 07:18
yambejp

総合スコア114825

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

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

madoka9393

2018/08/06 07:05

ご回答いただきましてありがとうございます。 inputイベントをウォッチするよう変更してみたのですが、 追記の通りキー入力による変更時は値が取得できるのですが、 マウスクリックでの選択時にはやはり値を取得することはできませんでした。
yambejp

2018/08/06 07:08

動作環境はなんでしょう? OSとブラウザの種類、バージョンをしていしてください 私の環境では普通に挙動しています
madoka9393

2018/08/06 07:11

OS:Windows 10 Pro 64bit ブラウザ:Google Chrome 68.0.3440.84 になります。
yambejp

2018/08/06 07:19

chromeなら間違いないと思うんですが・・・ 一応元ソースをコピペしてhtmlに保存して動くように修正しました そのまま保存して実行しても動作は変わりませんか?
madoka9393

2018/08/06 07:22

失礼いたしました。 例示いただきました通り、datalistのoptionを直書きしたものは上手く動作しました。 ただ、今回頭のコードにあるようにdatalistのoptionを生成させている状態では上手くいきませんでした。 わかりづらい書き方をしてしまい申し訳ないです。
yambejp

2018/08/06 07:26

PHPでdatalistを発生させているなら直書きとかわらないですよ ajaxで処理しているわけじゃないですよね? なにか指定がちがうんじゃないでしょうか?
madoka9393

2018/08/06 07:33

>直書きと変わらない そうなんですね。存じ上げませんでした。 >ajaxで処理している 特にそういったことはしていない認識です。 頭のコードにある通り、テーブルのセレクト結果($result)をfor文で回してoptionを作成しているだけです。 $result生成部分は以下のような感じです。 <?php $dsn等の設定値(省略) $pdo = new PDO($dsn, $user, $password, $options); $sql = select文; $stmt = $pdo->query($sql); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>
madoka9393

2018/08/06 07:38 編集

一つ気になったのは、直書きした時と冒頭のコードとでDevToolsで見たときにdetalistの見え方が違うことです。 直書き(optionの値が見える) <datalist id="data_list"> <option value="テスト1"> <option value="テスト2"> <option value="テスト3"> </datalist> 生成(optionの値が見えない) <datalist id="data_list"> </datalist>
yambejp

2018/08/06 07:39

なるほどdatalistが正しく出力されてないだけかもしれませんね
madoka9393

2018/08/06 07:47

そうなんですか…。 プルダウンから選択すること自体はできるのですが、 ちゃんとした状態であればDevTools上でも確認できるはず、ということですね。 因みにですが何か思い当たる原因や回避策はありませんでしょうか…?
guest

0

自己解決

自己解決挙動確認を兼ねて

結局datalistではどうしてもうまいこといかなかったため、
選択項目一覧生成部分をajaxautocompleteを使って実装しました。

JavaScript

1$("#text_box").autocomplete({ 2 source: function(req, resp){ 3 var term = $("#text_box").val(); 4 if(term){ 5 req.term = term; 6 } 7 $.ajax({ 8 url: //選択項目一覧をテーブルから取得するメソッド, 9 dataType: "json", 10 success: function (res){ 11 if(!res.error){ 12 let result = res.success; 13 resp(result); 14 } 15 }, 16 error: function(xhr, textStatus, errorThrown) { 17 res([]); 18 } 19 }); 20 }, 21 delay: 500, 22 minLength:0, 23 autoFocus: false 24 }).focus(function(){ 25 $(this).autocomplete("search", ""); 26 });

上記で生成した項目については、通常のchangeイベントで変更をキャッチできました。

投稿2018/11/16 07:34

編集2018/11/16 07:39
madoka9393

総合スコア992

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

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

madoka9393

2018/11/16 07:36

なるほど、投稿時に解決済みで投稿しないでも後から自己解決に変更したり未解決に戻したりできるのか…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問