Firefox addon XUL获取所选菜单项的值

Firefox addon XUL获取所选菜单项的值,firefox-addon,xul,dropdown,Firefox Addon,Xul,Dropdown,我正在XUL中创建一个下拉列表,如下所示: <button id="bid" oncommand="alert(event.target.nodeName)" > <menupopup> <menuitem label="one" value="one" /> <menuitem label="two" value="two" /> <menuit

我正在XUL中创建一个下拉列表,如下所示:

<button id="bid" oncommand="alert(event.target.nodeName)" >
    <menupopup>
              <menuitem label="one" value="one" />  
              <menuitem label="two" value="two" />
              <menuitem label="three" value="three" />
    </menupopup>
</button>

我想提醒正在单击的nodeitem的值。使用
event.target.nodeName
nodeName
作为
menuitem
提供,但使用
nodeValue
则在开始获取
按钮的值时重新调整未定义。如何获取单击的菜单项的值。我还尝试了
$(this).val()
,但即使这样也给出了未定义的结果。使用
$(this.attr('value')

也没用。我可以为menuitem设置一个命令,但这似乎不是实际的解决方案。这是获得该值的唯一方法吗

问题中的XUL代码是非功能性的。您应该使用a而不是a,或者您的
需要属性
type=“menu”
type=“menu button”
。如果要在不使用
type=“menu”
属性的情况下使用
,则实际上必须在
的命令事件处理程序中打开,然后从中选择。这似乎不是你想要的。然而,这是完全可行的。我在我的一个外接程序中使用了类似的构造,只是当单击几个项目中的一个时,我打开了它。这允许对窗口中的多个不同项目重复使用单个项目。在这种情况下,
是一个相当大的XUL代码,我不想在XUL中为窗口重复和维护多个副本

所选
值:
您实际的问题是如何获取用户选择的
值。下面的所有代码都经过测试,并且功能正常。正如您可以从代码中看到的,您可以从以下位置获得您选择的
值:
事件.target.value

使用
元素:
最常用的元素是
。当您让用户从多个选项中选择一个将被记住并在以后使用的选项,或用于调整用户界面中显示的内容时,通常会使用此选项。它通常不用于从多个即时操作中进行选择(这些操作已被执行,且选择未被记住)。A是MDN和MDN示例中使用的

这将生成一个如下所示的项目:

您可以单击它打开下拉列表:

如果选择项目:

您将收到一个警报:

然后对象将不显示您的选择:

如果要设置
的标签以反映用户所做的选择,可以使用:

<button type="menu" id="bid2" label="A Button" oncommand="event.target.parentElement.parentElement.label=event.target.value;alert(event.target.value)">
    <menupopup>
              <menuitem label="one" value="one" /> 
              <menuitem label="two" value="two" />
              <menuitem label="three" value="three" />
    </menupopup>
</button>

当选择了
three
时,将产生一个如下按钮:

使用
您也可以使用

当不悬停时,这样做看起来像:

悬停时:

打开以供选择时:

用户界面设计中的选择: 在设计用户界面时,您必须做出许多选择。有许多不同的方法可以达到相同的效果,但外观和感觉有所不同。你真的应该自己尝试这些类型的选择。您可能会发现XULRunner程序在原型化XUL时很有用


在我看来,选择UI元素和外观超出了stackoverflow问题的范围。虽然您可能无法获得特定的XUL帮助,但您可以在以下位置询问UI设计问题:.

在我的情况下,我也希望在单击按钮时弹出一个窗口。然后我想从中选择值。@PankajKumar,你试过看它是什么样子的吗?@PankajKumar,如果你想要一些看起来不同的东西,那么你需要问一个新的问题。您提出的问题是如何在选择
后在
警报中获取
值。如果你确实想在外观上有所不同,我建议你尝试各种各样的东西,看看你想要什么。您也可以浏览或main。@PankajKumar,您可能会发现它在尝试不同的东西时很有用。如果您转到XUL控件页面,您将看到一个按钮的选项,该按钮附带一个下拉菜单。按下按钮打开菜单。
我想要相同的菜单,并想知道这些菜单项中单击了哪个项目。看起来您刚刚进入XUL。您应该知道,对于Firefox,XUL计划。如果可以的话,尤其是在项目的早期阶段,切换到使用。
<button type="menu" id="bid2" label="A Button" oncommand="alert(event.target.value)">
    <menupopup>
              <menuitem label="one" value="one" /> 
              <menuitem label="two" value="two" />
              <menuitem label="three" value="three" />
    </menupopup>
</button>
<button type="menu" id="bid2" label="A Button" oncommand="event.target.parentElement.parentElement.label=event.target.value;alert(event.target.value)">
    <menupopup>
              <menuitem label="one" value="one" /> 
              <menuitem label="two" value="two" />
              <menuitem label="three" value="three" />
    </menupopup>
</button>