0

我正在动态创建一个菜单列表弹出列表。我将可编辑和打开属性设置为 true。我想做的是能够在用户键入一个尚不存在的项目时添加一个新的菜单列表项目。这可能吗?如果是这样,怎么做?

我正在创建这样的列表:

var ml = document.createElement("menulist");
ml.setAttribute("editable","true");
ml.setAttribute("open","true");
ml.setAttribute("oncommand","alert(this.value)");
var mp = document.createElement("menupopup");
var mi = document.createElement("menuitem");
mi.setAttribute("label","item1");
mi.setAttribute("value","1");
mp.appendChild(mi);
//add as many items as i feel
ml.appendChild(mp);

更改值时,更改项目时会触发警报功能,但是当我输入任何内容时,不会触发警报功能。基本上,我想最终将值传递给我从这里调用的函数,以将项目添加到列表中。

4

1 回答 1

1

首先,您应该认真考虑使用addEventListener而不是更改属性,例如oncommand

ml.addEventListener("command", function(event) {
 alert(this.value);
}, false);

如果您想收到有关文本字段更改的通知,那么您应该在文本字段中添加一个事件侦听器:

ml.appendChild(mp);
ml.inputField.addEventListener("input", function(event)
{
  alert("Text field value changed");
}, false);

请注意,这必须将元素添加到文档之后完成,然后inputField才能定义属性(相应的 XBL 绑定尚未应用)。

供参考:menulist.inputFieldinput事件

于 2012-09-25T19:17:00.327 回答