2014-07-21 84 views
28

所以我想有動態選擇列表填充自身,從單一的選擇開始:的addEventListener,「變」,選項選擇

<select id="activitySelector"> 
     <option value="addNew">Add New Item</option> 
</select> 

,然後JavaScript代碼,我們有:

addEventListener("select", addActivityItem, false); 

問題是,當你有一個項目時,各種事件不會觸發:不是「更改」,因爲選擇該項目時文本沒有區別;不是「選擇」(就像我在這裏),原因大致相同,因爲我沒有真正選擇任何B/C只有一個項目。這裏應該解僱什麼樣的事件?在我的選項列表中列出一個空白項目以激發事件似乎很愚蠢,所以我希望有另一種解決方案。或者這是最好的解決方案?

+0

好像你希望它火的獨立onclick處理程序,檢查的項目數,並且如果只有一個,叫addActivityItem。 –

+0

我想我只是試圖找出什麼事件(如果有的話)被點燃,當我點擊選擇項目只有一個項目,因爲現在,應該觸發的事件不會。 – NovaDev

+0

如果您點擊,點擊事件將被觸發。如果你想觸發一個選擇事件,你可以明確觸發 document.getElementById('activitySelector')。點擊() – Shovan

回答

23

您需要點擊事件來處理您描述的行爲類型。

首先,檢查是否存在多個選項。

如果沒有,請致電您的addActivityItem函數。

下面的代碼演示如何您可能做到這一點:

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 
} 

現場演示是here on JSfiddle

+0

我意識到錯誤是在我的代碼中的其他地方,並且click事件是我想要的。這就是我所做的,並且一直在思考,所以確認是好的。謝謝! – NovaDev

4

問題是你用的選擇選項,這是你出錯的地方。 選擇表示文本框或textArea有焦點。 您需要做的是使用更改。 「在選擇元素中進行新選擇時觸發」,當從文本框或textArea移開時也用於模糊。

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

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

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