2010-10-08 7 views
5

Bir HTML seçme/seçenek açılır listesinde bazı gizli bilgiler (ör: posta kodu) taşımak ve kullanıcı değişiklikleri olduğunda javascript işlevini kullanılabilir hale getirmek istiyorum seçenek kutusu seçimi.HTML seçme/seçenek açılır listesinde bazı ek bilgiler taşımak

Bu, yapmak istediğim türden bir şeydir (ancak çalışmaz).

<select id="sel_activity" onchange="selectionChange(this.info)"> 
    <option info=""  value="CAR">CAR PROBLEM</option> 
    <option info=""  value="COFFEE">Coffee Break</option> 
    <option info="45678" value="INV">INVENTORY COUNT</option> 
    <option info="23567" value="INVDROP">Inventory</option> 
    <option info="" value="LUNCH">Lunch Break</option> 
    <option info="87654" value="MEET">Meeting</option> 
</select> 

. 
. 
. 

function selectionChange(info){  
    alert(info); 
} 
+1

Sorun SelectionChange içinde (this.info), "Bu" anlamına gelir "seçeneğini olduğunu düşünüyorum "seçeneği" yerine ". Seçilen seçeneği almanız ve daha sonra bilgi almanız gerekir. İşte bazı bilgilere bir link: http://www.javascriptkit.com/jsref/select.shtml – Andrew

+2

Kodunuz w3c'nin geçerli olup olmadığı konusunda endişeli misiniz? Değilse, sadece her şey için öznitelikleri yapın. – ScottE

cevap

5

HTML 5 data- * özniteliklerini sağlar, kendi özniteliklerinizi yalnızca veri ile önek tanımlayabilirsiniz. Veri-bilgi, veri-zip ya da her neyse.

+2

Teşekkürler, ama belki bir veya iki yıl içinde ... Kullanıcılarımın hangi tarayıcıları kullandığını sorma .. :( – robert

+1

Gerçekten bunun için değil, sınıf özelliklerini kullanabilirsiniz, seçenek etiketlerinde desteklenmelidir. – Maxem

+1

@robert: Zaten standart olmayan bir özellik olan "bilgi" kullandığınızdan, HTML5 uyumlu hale getirmiş olabilirsiniz. Bunun üzerinde JS çalışmaya devam edecektir ve bu, sınıf özniteliğini kötüye kullanmaktan daha iyi bir seçenektir. – You

3

onchange="selectionChange(this.options.item(this.selectedIndex).getAttribute('info'))"

0

kolay bir paralel dizi ve seçimin değeri göz önüne alındığında, bu size istediğiniz ek bilgi değerini ortaya çıkarmak için dizideki değer bulacaksınız sahip olacaktır.

Diğer bir seçenek,

-1

class ve id bilgi depolama bu tür kullanmak iyi özelliklerdir projenin türüne uygun bir overkill değilse değer verilen bilgi aramak için bir web hizmeti aramak. Akılda tutulması gereken bir şey de, W3C standartlarına göre id'un bir sayı ile başlayamamasıdır, bu yüzden fazladan bilgi olarak numaralarınızı kaydetmeyi umuyor olsaydınız ya class'u kullanmanız ya da sayıyı çeken fazladan bir Javascript uygulamanız gerekir. substr işlevi gibi id'dan.

+2

-1. 'class' ve' id' bilgi depolama için değil. – You

+0

Genellikle, hayır, ama HTML5 ana akım –

+0

ASLA gelene kadar kullanmak iyi bir numara. Bunun için "data-" öznitelikleri kullanılır. –

5

Bu fonksiyonu kullanarak, niteliğin değerini almak için JQuery kullanırsınız: Böyle

attr(attributeName) 

şey:

 $("select").change(function() { 

      $("select option:selected").each(function() { 
       var info = $(this).attr("info"); 
       alert(info); 
       }); 

     }) 
     .trigger('change'); 

ve aynı işleve sahip öznitelik değerini ayarlayabilirsiniz:

attr(attributeName, value) 

check the API

2

Kullanıcılarınız eski tarayıcıları kullandığı için, bir boru veya karakterle ayrılmış bir dizge çalışabilir. Mesela

... Standart JavaScript ile

<select id="sel_activity" onchange="selectionChange(this)"> 
    <option value="|CAR">CAR PROBLEM</option> 
    <option value="|COFFEE">Coffee Break</option> 
    <option value="45678|INV">INVENTORY COUNT</option> 
    <option value="23567|INVDROP">Inventory</option> 
    <option value="|LUNCH">Lunch Break</option> 
    <option value="87654|MEET">Meeting</option> 
</select> 

...

function selectionChange(o) { 
    // an alternative ...  
    var values = o.options[o.options.selectedIndex].value.split("|");    
    alert("Selected Index? "+(o.options.selectedIndex+1) 
    +"\nInfo? "+values[0] 
    +"\nValue? "+values[1]); 
    values = null; 
    }