2014-07-21 20 views
28

Yani dinamik seçilen liste başlatmak için tek bir seçimden, kendisini doldurmak zorunda çalışıyorumaddEventListener, "değişim" ve opsiyon seçimi

addEventListener("select", addActivityItem, false); 

Sorun şu ki, tek bir öğeniz olduğunda çeşitli olaylar tetiklenmez: "değiştir" çünkü bu öğeyi seçtiğinizde metin farklı olmaz; "seç" (kabaca benzer bir nedenden dolayı), seçmem çünkü b/c hiçbir şey seçmiyorum çünkü sadece bir tane var. Buraya ateş edilmesi gereken olay nedir? Opsiyon listesinde boş bir öğeyi listelemenin aptalca görünmesi aptalca görünüyor, umarım başka bir çözüm vardır. Yoksa en iyi çözüm bu mu?

+0

Öğelerin sayısını denetleyen ayrı bir onclick işleyicisini çalıştırmak istediğiniz gibi görünüyor ve yalnızca bir tane varsa addActivityItem öğesini çağırır. –

+0

Sadece şu andaki tek bir öğeyle seçtiğim öğeye tıkladığımda (eğer varsa) hangi olayın tetiklendiğini anlamaya çalışıyorum, çünkü şu anda ateş etmemesi gerekenler. – NovaDev

+0

tıklatırsanız, bir tıklama olayı tetiklenir. Seçme olayını tetiklemek istiyorsanız, açıkça document.getElementById ('activitySelector') 'ı ateş edebilirsiniz. Click() – Shovan

cevap

23

Tanımladığınız davranış türlerini işlemek için bir tıklama olayına ihtiyacınız vardır.

İlk önce, birden fazla seçeneğin olup olmadığını kontrol edin.

Değilse, addActivityItem işlevinizi çağırın.

aşağıdaki pasajı bunu başarmak nasıl gösterir:

var activities = document.getElementById("activitySelector"); 

activities.addEventListener("click", function() { 
    var options = activities.querySelectorAll("option"); 
    var count = options.length; 
    if(typeof(count) === "undefined" || count < 2) 
    { 
     addActivityItem(); 
    } 
}); 

activities.addEventListener("change", function() { 
    if(activities.value == "addNew") 
    { 
     addActivityItem(); 
    } 
}); 

function addActivityItem() { 
    // ... Code to add item here 
} 

canlı demo here on JSfiddle olduğunu.

+0

Hata kodumun başka bir yerinde olduğunu ve tıklama olayının istediğim şey olduğunu anladım. Yaptığım şey bu ve benim düşüncem boyuncaydı, bu yüzden onay iyi. Teşekkür ederim! – NovaDev

4

Sorun, seç seçeneğini kullanmanızdır; bu, yanlış gittiğiniz yerdir. Seç, bir metin kutusunun veya textArea'nın bir odağı olduğunu belirtir. Yapmanız gereken, değiştirmeyi kullanmaktır. "Seçme öğesinde yeni bir seçim yapıldığında tetiklenir", ayrıca bir metin kutusundan veya textArea'dan uzaklaşırken bulanıklık gibi kullanılır.

function start(){ 
     document.getElementById("activitySelector").addEventListener("change", addActivityItem, false); 
     } 

function addActivityItem(){ 
     //option is selected 
     alert("yeah"); 
} 

window.addEventListener("load", start, false);