JQuery kullanarak seçenekleri seçmek için ek veri ekleme


139

Umarım çok basit bir soru.

Bunun <select>gibi olağan kutum var

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

Seçilen değeri (kullanarak $("#select").val()) ve seçilen öğenin görüntüleme değerini (kullanarak) alabilirim $("#select :selected").text().

Ancak <option>etikete nasıl ek bir değer gibi kaydedebilirim ? Gibi bir şey yapmak <option value="3.1" value2="3.2">other</option>ve value2özniteliğin değerini almak istiyorum (ki bu örnekte 3.2 olurdu).


seçim kutusuna bir öğe eklemek ister misiniz? ya da bir kerede birden fazlasını seçip sonuçları almak mı istiyorsunuz?
zsalzbank

hayır sadece <option> etiketinde bir value2 = "" gibi olmak istiyorum, ama bu işe yaramaz
jim smith

Sorunuz net değil (bana göre, her neyse). "Seçme seçeneklerinde başka bir değer depola" ile ne demek istiyorsun? Seçime, açıldığında kullanıcıya görünecek yeni bir seçenek eklemek mi istiyorsunuz?
Phrogz

15
mantığa ya da akla karşı gelmez, tanrım. Ben seçimler arasındaki değerleri karşılaştırabilir ve bu seçimin değerlerini / metinlerini korurken diğerinin seçeneklerinin metnini kaydedebilirsiniz benzer bir soru / durum var, mümkün gibi görünüyor bir yolu aşağıdaki cevap veri yoluyla. SİZİN bunu düşünmemesi mantığa ve mantığa aykırı olduğu anlamına gelmez. OP, sadece doğru yönde işaret edilmesi gereken büyük bir bardak kendini beğenmiş olması gereken yeterince iyi bir soruydu.
user1783229

1
veri-her şeyi kullanarak .data ('herhangi bir') kullanarak .value değerini istediğiniz yere her zaman istediğiniz sayıda ekstra parametre ekleyebilirsiniz. sadece değer2 veya beğeninize benzer bir şey değiştirin

Yanıtlar:


320

HTML İşaretlemesi

<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>

kod

// 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');

Bunu burada jQuery kullanarak çalışan bir örnek olarak görün : http://jsfiddle.net/GsdCj/1/
Bunu burada düz JavaScript kullanarak çalışan bir örnek olarak görün: http://jsfiddle.net/GsdCj/2/

HTML5'teki veri özniteliklerini kullanarak , sözdizimsel olarak geçerli bir şekilde jQuery'den kolayca erişilebilen öğelere ekstra veri ekleyebilirsiniz.


@jimsmith Evet, olacak. (Bu yanıtlardan herhangi birini yararlı bulursanız, oylama yapmanız gerekir. Sorununuzu en iyi şekilde çözdüğünü tespit ederseniz, birini "kabul edilmiş" olarak işaretlemeniz gerekir.)
Phrogz

1
Ne? Hayır olmaz. HTML5 veri özelliklerini destekleyen tüm tarayıcılarda çalışır.
glomad

13
@ithcy Tüm tarayıcılar, işaretlemedeki "geçersiz" özellikleri ve bunları DOM aracılığıyla almayı / ayarlamayı destekler (ve 10 yıldan fazladır). HTML5 "veri" özellikleri, yalnızca bir adlandırma düzenine ve bunların yasal olduğunu bildiren yeni bir standarda sahip özel özelliklerdir.
Phrogz

@Phrogz Bunu biliyorum. Bu, tarayıcıların geçersiz özellikleri "desteklemesi" değil, onları görmezden gelmesi meselesidir. Gerçekten kullanılabilir bir web tarayıcısı yazmak için başka bir yolu yoktur :) Ancak veri özniteliklerini "sözdizimsel olarak geçerli" olarak adlandırmak için bir streç olduğunu düşünüyorum - bu bağlamınıza bağlıdır. Bir HTML5 dokümanınız varsa, evet, geçerlidir. Aksi takdirde W3C doğrulamasının başarısız olmasına neden olurlar.
glomad

@ithcy yanlarında hiçbir şey special gibi tarayıcılar sürece bunları 'görmezden' ama yok değil onlar için tamamen hazır oldukları sürece, onları görmezden getAttribute(). Cevabımın tüm tarayıcılarda işe yaramayacağı yönündeki ilk iddianıza yanıt veriyordum. "Tüm" tarayıcılarda çalışacağını ifade ediyorum (bu durumda 'hepsi' nin oldukça cömert bir tanımı için). Bana jQuery destekleyen ancak HTML5 dokümanı olmayan bu veri öznitelikleriyle çalışmayan bir tarayıcı göster ve sözlerimi yiyeceğim.
Phrogz

5

Bana göre yeni bir özellik mi yaratmak istiyorsunuz? İstiyor musun

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

Bunu yapmak için yapabilirsin

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

Ve sonra onu almak için

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

Geçerli bir kod olmayacak, ama sanırım bu işi yapıyor.


Diğer yöntem ise hala geçerli olan $ (selector) .data ('değer2', "değeriniz") ve $ (seçici) .data ('değer2') 'yi kullanmaktır.
mikesir87

Orijinal işaretlemede standart olmayan niteliklere sahip olmak sözdizimsel olarak geçerli olmaz, ancak a) NS4 günlerinden bu yana herhangi bir sorun olduğundan daha önce hiç tarayıcı görmedim ve b) DOM'yi değiştirebilirseniz "sözdizimsel olarak geçersiz" bir şey üretmek için, gerçekten mi?
Phrogz

evet, bu gerçekten ... geçersiz. html5 standardında data- * özellikleri tanımlandığında neden keyfi özellikler kullanmalısınız.
stephenbayer

3
@Stephenbayer'den bahsedildiği gibi ... bunu yapmanın doğru yolu html5 destekli data- * özelliklerini kullanmaktır. Bu özellikler aslında 2010 yılında geri cevap zaman gerçekten etrafında / kullanımda değildi :)
mikesir87


-1

HTML / JSP İşaretlemesi:

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

JQUERY KODU: Etkinlik: değişiklik

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

Libelle.val () veya libelle.text () öğesine sahip olmak


<form: seçenek veri-libelle-compte = "$ {compte.libelle} veri-raison =" $ {compte.raison} "veri-compte =" $ {compte.numero} "> <c: çıkış değeri =" $ {compte.libelleCompte} MAD "/> </ form: option>
Fadid

-4

Seçeneklerde başka bir değer saklamak için:

$("#select").append('<option value="4">another</option>')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.