LoginSignup
Halchamdao
@Halchamdao

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JQueryのクリックイベントで複数のテキストを抽出する方法

解決したいこと

LaravelにてJQueryを使用してラーニンングアプリを作成しています。
回答欄と選択肢のUI作成に詰まっています。
JQueryのクリックイベントで複数のテキストを取得、出力する方法がわかりません

現状

HTML

<div class="test">

  {{-- 回答欄 --}}
  <input type="text" id="a">

  <input type="text" id="b">

  <input type="text" id="c">

  {{-- 選択肢 --}}
  <ul id="Sample">
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
   </ul>

</div>

やりたいこと

1.上の任意のinputをクリック(フォーカス)
2.下の任意のliタグをクリック
3.liタグ内の文字をinput内に出力(複数)

JQuery

$('input').focus(function() {
  focusedInput = $(this);
});

$('#Sample li').click(function(){
        txt = $(this).text();
        $(focusedInput).val(txt);
});

現状このJQueryの記述で、クリックしたliタグ内の文字をフォーカスされたinputに出力するところまではできたのですが、
liタグの複数選択→出力の方法がわかりません。
以前はliタグではなくselect、optionタグを使用していたのですが、optionタグの複数選択は融通が効き辛かったので、liタグで挑戦しています。
どなたかご教授頂けますと幸いです。

0

2Answer

もっときれいなやり方はありそうですが、それっぽいものを作ってみました。
やりたいことのイメージはこのような感じでしょうか?

以下のような機能を追加しています。
・フォーカスを変えたときにすでに選択されているものに色がつくようにしています。
・すでに選択されているものをクリックしても、追加しないようにしています。

See the Pen Untitled by yotty (@yotty) on CodePen.

1

Comments

  1. @Halchamdao

    Questioner
    ありがとうございます!
    まさにやりたいこと通りでございます!

    重ねて質問で大変申し訳ないのですが、既に選択したものをクリックするとそれを選択から外す仕様は可能なのでしょうか...?
  2. >重ねて質問で大変申し訳ないのですが、既に選択したものをクリックするとそれを選択から外す仕様

    組み込んでみました!
  3. @Halchamdao

    Questioner
    ありがとうございます!!
    感謝感激です!!

    自分でもコピペで済まさないで頑張って紐解いて精進致します!!
  4. >自分でもコピペで済まさないで頑張って紐解いて精進致します!!

    その姿勢素晴らしいと思います。
    コードを追っていてわからないことがあれば、何なりとお申し付けください!
  5. @Halchamdao

    Questioner
    すみません以前教えて頂いたコードに追加機能を試しており、
    解答欄(input)も選択中であるものは背景色の変更をしたいと思い、

    $('input').focus(function() {
    focusedInput = $(this);
    DispSelected();

    //追記
    $(this).addClass('selected_input');

    });

    //追記
    $('input').blur(function() {
    $(this).removeClass('selected_input');
    });

    上記のようにフォーカスの有無で背景色を変えるクラスの追加、削除を記述してみたのですが、
    liをクリックした段階でinputのフォーカスが外れてしまい、選択中のinputの背景色が外れてしまうという事象の解決に詰まっております。

    お手すきであればご教授頂けますと幸いです。
  6. 元のソースを修正してみました。

    フォーカスが外れるタイミングのblurイベントの中で、次のフォーカス先がliタグだと元のテキストボックスにフォーカスを入れるという処理を加えることで実装しています。

    「e.relatedTarget」で要素を取得できるようにするためにはフォーカスできる要素でないといけないらしく、基本的にはliタグでは「e.relatedTarget」で取得できないようです。
    「tabindex="-1"」をつけることで「e.relatedTarget」として取得できるようになりました。
    詳しくはこちらを参考にしてみてください。

    https://stackoverflow.com/questions/42764494/blur-event-relatedtarget-returns-null


    もっときれいなやり方はあるかもしれませんが、私の力ではこれが限界でした…。
  7. @Halchamdao

    Questioner
    迅速なご回答ありがとうございます!
    お陰様で実装できました!

    内容が理解できていないので頑張って紐解きます...。
  8. ざっくりいうと、「フォーカス先がリストアイテムだったらフォーカス遷移はなかったことにしよっと」という感じです。

    少し複雑になってしまいましたが、引き続き頑張ってください!

補足
複数選択の説明が分かり辛い気がしたので補足です。


1.任意のinput(回答欄)をクリック
2.liタグ(選択肢)から「あ」「い」「う」とクリック
3.回答欄にそのまま「あ」「い」「う」と出力される

0

Your answer might help someone💌