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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2779閲覧

inputタグとselectボックスの連動jsをつくりたい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2019/10/08 08:53

<input name="Id" onchange="function()"> <select name="SubId"><option></option> </select>

js

1$(function() { 2 $('input[name="Id"]').on('change',function(){ 3 var $Id = $('.Id'); 4 var original = $Id.html(); 5 6 $('.Id').change(function() { 7 var val1 = $(this).val(); 8 9 $Id.html(original).find('option').each(function() { 10 var val2 = $(this).data('val'); 11 if (val1 != val2) { 12 $(this).not('optgroup,.msg').remove(); 13 } 14 }); 15 16 if ($(this).val() === '') { 17 $Id.attr('disabled', 'disabled'); 18 } else { 19 $Id.removeAttr('disabled'); 20 } 21 } 22 }); 23}); 24

inputタグで入力された値により、セレクトボックスの出力項目を変動させたいです。
inputタグで入力されたIDと一致するIDの部署をセレクトに連動して、セレクトボックスに出力したいですが、どのようにしたらいいでしょうか?
自分の書いたjsではconsole.log()をしても結果が表示されませんでした。
各部署は多数存在し、その中の一致した条件のみ出力、一致しなかった場合は出力しないセレクトボックスをつくりたいです。どのようなjsを書くのか教えていただきたいです。

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

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

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

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

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

x_x

2019/10/08 08:59

「出力しないセレクトボックスをつくりたい」というのはどういうことでしょうか? 選択肢がないということですか?
guest

回答1

0

ベストアンサー

こんにちは。

inputタグで入力されたIDと一致するIDの部署をセレクトに連動して、セレクトボックスに出力

とのことですが、以下のような感じでしょうか?

html

1<span>部署ID:<span><input name="Id" /> 2<br /> 3<span>部署名:<span> 4<select name="SubId"> 5 <option value="0" class="empty-state"></option> 6 <option value="1">営業部</option> 7 <option value="1A">営業1課</option> 8 <option value="1B">営業2課</option> 9 <option value="1C">営業3課</option> 10 <option value="1C1">営業3課1係</option> 11 <option value="1C2">営業3課2係</option> 12 13 <option value="2">開発部</option> 14 <option value="2X">開発部 1課</option> 15 <option value="2Y">開発部 2課</option> 16 <option value="2Z">開発部 企画課</option> 17 18 <option value="3">総務部</option> 19 <option value="3M">総務部人事課</option> 20 <option value="3N">総務部経理課</option> 21 22 <option value="4">広告宣伝部</option> 23 <option value="4E">制作課</option> 24 <option value="4F">媒体管理課</option> 25</select>

javascript

1$(function() { 2 3 const BACKSPACE = 0x08 4 5 $.fn.updateById = function(id) { 6 let displayCount = 0 7 $('option', this).each(function() { 8 if ($(this).val().startsWith(id.toUpperCase())) { 9 $(this) 10 .css('display', 'block') 11 .prop('selected', displayCount === 0); 12 displayCount ++ 13 } 14 else { 15 $(this) 16 .css('display', 'none') 17 .prop('selected', false) 18 } 19 }) 20 $('option.empty-state', this).text(displayCount === 0 ? '該当なし' : '') 21 this.prop('disabled', displayCount === 0) 22 } 23 24 $('input[name="Id"]') 25 .keyup(function(e) { 26 if(e.keyCode === BACKSPACE) { 27 $('select').updateById($(this).val()) 28 } 29 }) 30 .keypress(function(e) { 31 const id = `${this.value}${String.fromCharCode(e.keyCode)}` 32 $('select').updateById(id) 33 }) 34})

上記のサンプルでは、以下のように動作します。

  • 初期表示では、すべての option が select の中に表示される。
  • input に例えば、1 と打つと、 value が 1で始まる option のみが表示される。
  • 続けて A と打つと、 value が 1Aで始まる option のみが表示される。
  • 続けてバックスペースを打つと、 value が 1で始まる option 表示に戻る。
  • 該当のない IDを input に打つと、select に「該当なし」と表示され、disabledになる。

なお、上記のサンプルでは、複数の候補のoption の中からひとつを選んだときに、そのoption の value で input の内容を更新することは未対応です。

以上、参考になれば幸いです。

投稿2019/10/08 13:11

編集2019/10/08 13:19
jun68ykt

総合スコア9058

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

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

退会済みユーザー

退会済みユーザー

2019/10/10 08:47

凄いですね!!ありがとうございますm(__)m 時間がかかっておりますが、只今解読中です。。わからないところがありましたら、また質問させてくださいm(__)m
jun68ykt

2019/10/10 12:33

コメントありがとうございます。 いろいろ思い込みで作っている部分もありますので、何かお気づきの点などありましたら、またコメント頂ければと思います。
退会済みユーザー

退会済みユーザー

2019/10/11 02:42

すいません、ネットでいろいろしらべたのですが理解できなくお聞きしたいのですが、const BACKSPACE = 0x08はどのような処理をしているのか教えていただけますでしょうか?
jun68ykt

2019/10/11 04:01

> const BACKSPACE = 0x08 についてですが、右辺の 0x08 という値は アスキー制御文字 https://ja.wikipedia.org/wiki/ASCII#ASCII制御文字 の表の中の 16進数の 08 (10進数でも 8 ) である、バックスペース(表では BS と略)のASCIIコードです。 上記では、このバックスペースのASCIIコードである16進数の 08 を BACKSPACEという変数に代入して、keyupイベントの発生時に、以下のように .keyup(function(e) { if(e.keyCode === BACKSPACE) { そのイベントの発生元である(キーボードの)キーのコードと比較し、等しければ、つまりバックスペースキー(キートップにBSと印字されているキー)が押されて離されたならば、後続の処理をするようにしています。
退会済みユーザー

退会済みユーザー

2019/10/11 04:09

なるほど!!そうなんですね!!ほんと助かりました!!ありがとうございますm(__)m
jun68ykt

2019/10/11 04:21

どういたしまして。疑問が解消されたようで、よかったです????
退会済みユーザー

退会済みユーザー

2019/10/11 04:22

有難うございます!!m(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問