2014-07-21 49 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);