XUL 获取选中的 MENUITEM 的值

XUL get the value of MENUITEM selected

我正在像这样在 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.nodeNamenodeName 作为 menuitem 但使用 nodeValue 重新调整未定义,因为它开始获取 button 节点的值。如何获得单击的菜单项的值。我也试过 $(this).val() 但即使那样也未定义。使用 $(this).attr('value') 也没有帮助。我可以为 menuitem 设置 oncommand 但这似乎不是实际的解决方案。这是获得价值的唯一方法或某种方法吗?

问题中的 XUL 代码是 non-functional。要么您应该对 window 中的多个不同项目使用 <menulist> instead of a <button>, or your <button> needs the property type="menu" or type="menu-button". If you are going to use a <button> without the type="menu" property, you would actually have to open a popup in the command event handler for the <button> and then select from there. That does not appear to be what you are wanting. It is, however, quite doable. I use a construction like that in one of my add-ons, except I have it open when one of several <label> items is clicked. This allows re-use of a single <menupopup>。在那种情况下,<menupopup> 是相当大量的 XUL 代码,我不想在 window.

的 XUL 中重复和维护多个副本。

<menuitem>value selected:

您的实际问题是如何获取用户编辑的 <menuitem> select 的 value。下面的所有代码都经过测试并且可以正常工作。正如您从代码中看到的那样,您可以从以下位置获得 <menuitem>value 您 select(在 selection 时):event.target.value.

使用 <menulist> 元素:

最常用的元素是 <menulist>。当您让用户 select 从多个选项中选择一个将被记住并在以后使用的选项,或者用于调整用户界面中显示的内容时,通常会使用此选项。它通常不会用于 select 多个即时操作(已执行但未记住选择)。 MDN 上的 <menulist> is what is used in the examples for <menuitem> and <menupopup>

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

上面的代码会给你一个看起来像按钮的东西,当你点击它时,它有一个 selection of <menuitem> 条目。它将 alert 与您 select 编辑的 <menuitem> 的值。

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

您可以点击它打开一个 drop-down 列表:

如果您 select 一个项目:

您将收到警报:

然后该对象将显示您的 selection:

使用 <button> 元素:

也可以使用指定了 属性 type="menu"type="menu-button"<button> 元素。但是,这不会向用户提供关于当前 select 哪个选项的视觉反馈。 [注意:您的 JavaScript 可以手动更改 <button> label 属性 以提供此反馈。]如果是产生即时操作的按钮,您可以使用这种类型的元素而不是被记住的select离子。

代码:

<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>

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

您可以点击它打开一个 drop-down 列表:

如果您 select 一个项目:

您将收到警报:

然后该对象将 NOT 显示您的 selection:

如果你想设置<button>的标签来反映用户制作的select离子,你可以使用:

<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 被 selected 时,会产生一个如下所示的按钮:

使用 <toolbarbutton>:

您也可以使用 <toolbarbutton>

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

悬停时:

当打开 selection:

UI设计中的选择:

在设计用户界面时,您必须做出很多选择。有许多不同的方法可以获得相同的有效结果,但外观和感觉略有不同。您真的应该自己尝试这些类型的选项。您可能会发现 XULRunner 程序 XUL Explorer 在制作 XUL 原型时很有用。

选择 UI 元素和外观,在我看来,超出了 Whosebug 问题的范围。虽然您可能得不到具体的 XUL 帮助,但您可以在以下位置询问 UI 设计问题:User Experience stack exchange.