jQueryを使用してオプションを選択するための追加データの追加


139

とても簡単な質問です。

私は<select>このような通常の箱を持っています

<select id="select">
    <option value="1">this</option>
    <option value="2">that</option>
    <option value="3">other</option>
</select>

選択した値(を使用して$("#select").val())と選択したアイテムの表示値(を使用して)を取得できます$("#select :selected").text()

しかし、<option>タグに追加値のように格納するにはどうすればよいですか?私は何かのよう<option value="3.1" value2="3.2">other</option>にしてvalue2属性の値を取得できるようにしたいと思います(例では3.2になります)。


選択ボックスにアイテムを追加しますか?または、一度に複数を選択して結果を取得したいですか?
zsalzbank 2010

いいえ、単に<option>タグにvalue2 = ""のようにしたいのですが、それは機能しません
jim smith

あなたの質問は明確ではありません(とにかく私にとって)。「選択オプションに別の値を保存する」とはどういう意味ですか?選択時に新しいオプションを追加することを意味しますか?それは、開いたときにユーザーに表示されます
Phrogz

15
論理や理由に逆らわない、そうね。私は同様の質問/ケースを持っているので、selectの間の値を比較し、そのselectの値/テキストを維持しながら、1つのオプションのテキストを他のオプションに保存できます。あなたがそれを考えなかったからといって、それが論理と理由に逆らうという意味ではありません。OPは、彼が正しい方向に向けられるだけで十分なまともな質問でした。
user1783229 2013

1
data-anythingを使用し、.data( 'anything')を使用して、他の方法で.valueを実行する場合はいつでも、いつでも任意の数の追加パラメーターを追加できます。value2または好きなものと同様のものを交換するだけ

回答:


320

HTMLマークアップ

<select id="select">
  <option value="1" data-foo="dogs">this</option>
  <option value="2" data-foo="cats">that</option>
  <option value="3" data-foo="gerbils">other</option>
</select>

コード

// JavaScript using jQuery
$(function(){
    $('select').change(function(){
       var selected = $(this).find('option:selected');
       var extra = selected.data('foo'); 
       ...
    });
});

// Plain old JavaScript
var sel = document.getElementById('select');
var selected = sel.options[sel.selectedIndex];
var extra = selected.getAttribute('data-foo');

ここではjQueryを使って作業したサンプルとしてこれを参照してください:http://jsfiddle.net/GsdCj/1/
ここに、プレーンJavaScriptを使用して作業をサンプルとしてこれを参照してください。http://jsfiddle.net/GsdCj/2/

HTML5のデータ属性を使用することで、jQueryからも簡単にアクセスできる構文的に有効な方法で要素にデータを追加できます。


@jimsmithはい、そうです。(これらの回答のいずれかが有用である場合は、投票する必要があります。問題を最も
適切に

1
何?いいえ、ありません。HTML5データ属性をサポートするすべてのブラウザーで機能します。
glomad 2010

13
@ithcyすべてのブラウザーは、マークアップ内の「無効な」属性をサポートし(10年以上持つ)、DOMを通じてこれらを取得/設定します。HTML5の「データ」属性は、命名スキームとそれらが合法であることを宣言する新しい標準を持つ単なるカスタム属性です。
Phrogz、

@Phrogz私はこれを知っています。これは、無効な属性を「サポート」するブラウザの問題ではなく、無視することの問題です。使用可能なWebブラウザーを作成する方法は他にありません:)しかし、データ属性を「構文的に有効」と呼ぶのは一筋縄ではないと思います。コンテキストによって異なります。あなたがHTML5 doctypeを持っているなら、そうです、それらは有効です。そうでなければ、そうではなく、W3C検証が失敗します。
glomad

@ithcyブラウザは、特別な処理を行わない限り「無視」しますが、完全に使用できる限り無視しませgetAttribute()。私の回答はすべてのブラウザーで機能するとは限らないというあなたの最初の主張に応えました。私はそれが「すべての」ブラウザで機能するという私の声明を支持します(この場合は「すべて」のかなり寛大な定義のために)。jQueryをサポートしているが、これらのデータ属性(HTML5以外のdoctypeを使用している場合でも)で動作しないブラウザーを見せてください。
Phrogz、2011年

5

私には、新しい属性を作成したいようですが?欲しいですか

<option value="2" value2="somethingElse">...

これを行うには、行うことができます

$(your selector).attr('value2', 'the value');

そして、それを取得するために、あなたは使うことができます

$(your selector).attr('value2')

それは有効なコードにはなりませんが、私はそれがうまくいくと思います。


もう1つの方法は、$(selector).data( 'value2'、 "your value")と$(selector).data( 'value2')を使用して取得することです...まだ有効です。
mikesir87 2010

まあ、元のマークアップに非標準の属性を含めることは構文的に有効ではありませんが、a)NS4の時代にこれに問題があったため、ブラウザを見たことはありません。b)DOMを変更できるかどうか「構文的に無効」なものを生成するために、それは本当にですか?
Phrogz、

はい、それは本当に...無効です。html5標準でdata- *プロパティが定義されているときに、任意のプロパティを使用する理由
stephenbayer 2014

3
@stephenbayerが述べているように...これを行う正しい方法は、html5でサポートされているdata- *プロパティを使用することです。2010年に最初に返答されたとき、これらのプロパティは実際に使用されていなかった/頻繁に使用されていなかった:)
mikesir87


-1

HTML / JSPマークアップ:

<form:option 
data-libelle="${compte.libelleCompte}" 
data-raison="${compte.libelleSociale}"   data-rib="${compte.numeroCompte}"                              <c:out value="${compte.libelleCompte} *MAD*"/>
</form:option>

JQUERY CODE:イベント:変更

var $this = $(this);
var $selectedOption = $this.find('option:selected');
var libelle = $selectedOption.data('libelle');

要素libelle.val()またはlibelle.text()を持つには


<form:option data-libelle-compte = "$ {compte.libelle} data-raison =" $ {compte.raison} "data-compte =" $ {compte.numero} "> <c:out value =" $ {compte.libelleCompte} MAD "/> </ form:option>
2014

-4

選択オプションに別の値を保存するには:

$("#select").append('<option value="4">another</option>')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.