ユーザーが事前定義された値を選択できるドロップダウン リストを含むテキスト フィールドを作成したいと考えています。ユーザーは、新しい値を入力するか、ドロップダウン リストから定義済みの値を選択することもできます。そのために 2 つのウィジェットを使用できることはわかっていますが、私のアプリでは、1 つのウィジェットに統合した方が人間工学的に優れています。
標準のウィジェットはありますか、それともサードパーティの JavaScript を使用する必要がありますか?
ブラウザの移植性はどうですか?
ユーザーが事前定義された値を選択できるドロップダウン リストを含むテキスト フィールドを作成したいと考えています。ユーザーは、新しい値を入力するか、ドロップダウン リストから定義済みの値を選択することもできます。そのために 2 つのウィジェットを使用できることはわかっていますが、私のアプリでは、1 つのウィジェットに統合した方が人間工学的に優れています。
標準のウィジェットはありますか、それともサードパーティの JavaScript を使用する必要がありますか?
ブラウザの移植性はどうですか?
<datalist>これは、HTML5の タグを使用して実現できます。
<input type="text" name="product" list="productName"/>
<datalist id="productName">
<option value="Pen">Pen</option>
<option value="Pencil">Pencil</option>
<option value="Paper">Paper</option>
</datalist>
ブラウザで入力テキストをダブルクリックすると、定義されたオプションのリストが表示されます。
CSS と 1 行の JavaScript コードに基づく非常に単純な実装 (基本的な機能のみ)。
.dropdown {
position: relative;
width: 200px;
}
.dropdown select {
width: 100%;
}
.dropdown > * {
box-sizing: border-box;
height: 1.5em;
}
.dropdown input {
position: absolute;
width: calc(100% - 20px);
}
<div class="dropdown">
<input type="text" />
<select onchange="this.previousElementSibling.value=this.value; this.previousElementSibling.focus()">
<option>This is option 1</option>
<option>Option 2</option>
</select>
</div>
注意:古いブラウザー(IE9 未満)ではサポートされpreviousElementSibling()ていないものを使用します。
この<select>タグでは、定義済みのエントリのみを使用できます。この問題の一般的な解決策は、「その他」というラベルの付いたエントリを 1 つ作成し、編集フィールドを無効にすることです ( <input type="text")。[その他] が選択されている場合にのみ編集フィールドを有効にする JavaScript を追加します。
直接編集できるドロップダウンを何らかの形で作成することは可能かもしれませんが、IMO は努力する価値はありません。もしそうなら、Amazon、Google、または Microsoft がそれを行っているでしょう ;-) 最も単純なソリューションで仕事を終わらせるだけです。それはより速く(あなたの上司はそれを好むかもしれません)、通常は維持するのがより簡単です(あなたはそれを好むかもしれません).
ComboBox with TextBox (定義済みの値とユーザー定義の値用。)
JavaScriptなしで自動的に行う方法があるかどうかはわかりません。
必要なのは、ユーザーが選択を行ったときにフォームをサーバーに送信するためにブラウザ側で実行されるものです。したがって、javascript.
また、javascript をオフにしているユーザーのために、別の手段 (送信ボタンなど) があることを確認してください。
良い例: Combo-Box Viewer
昨日、このdhtmlxComboを使用して、さらに洗練されたコンボボックスを作成し、ajax を使用して大量のデータから適切な値を取得しました。
ちょっとした CSS で フィドルは完了です
<div style="position: absolute;top: 32px; left: 430px;" id="outerFilterDiv">
<input name="filterTextField" type="text" id="filterTextField" tabindex="2" style="width: 140px;
position: absolute; top: 1px; left: 1px; z-index: 2;border:none;" />
<div style="position: absolute;" id="filterDropdownDiv">
<select name="filterDropDown" id="filterDropDown" tabindex="1000"
onchange="DropDownTextToBox(this,'filterTextField');" style="position: absolute;
top: 0px; left: 0px; z-index: 1; width: 165px;">
<option value="-1" selected="selected" disabled="disabled">-- Select Column Name --</option>
</select>