【问题标题】:For the Menu Component of Material Design Web Components, how do I capture the "MDCMenu:selected" event in JavaScript?对于 Material Design Web Components 的 Menu 组件,如何在 JavaScript 中捕获“MDCMenu:selected”事件?
【发布时间】:2019-12-26 03:46:26
【问题描述】:

我正在使用Material Design Web Components component called "Menu."

启动菜单后,我需要能够轻松处理“选择”“菜单项”的所有方式。通过我的框架的模板语言 (vue) 添加点击是有效的,但是,为 on-enter 和其他键添加方法不起作用。示例:

  <li
    v-for="option in options"
    :key="option"
    class="mdc-list-item"
    @click="onChange(option)" // this works
    @keyup.enter="onChange(option)" //this doesn't work
    role="menuitem">

我希望这是因为enter 键具有用于关闭菜单的事件处理程序,这些处理程序正在捕获我的按键。我不完全确定。

无论如何,处理选择的“正确”方式似乎是通过MDCMenu:selected 事件。文档中的描述:

[MDCMenu:selected is] 用于指示何时选择了一个元素。此事件还包括所选项目和该项目的列表索引。

但是,没有关于如何捕获此事件的说明。我试过了:

this.menu = new MDCMenu(this.$refs.menu);
this.menu.root.addEventListener(
  'MDCSimpleMenu:selected', ()=>{console.log('HELLOOOOOO')});

这导致了很多 undefined 错误,这很奇怪,因为我可以访问 this.menu.root 并且它似乎是一个 DOM 元素。

我也试过了:

this.menu = new MDCMenu(this.$refs.menu);
this.menu.addEventListener(
  'MDCSimpleMenu:selected', ()=>{console.log('HELLOOOOOO')});

这引发了关于addEventListener 不是this.menu 上存在的函数的错误;

我搜索了源代码,但没有发现任何关于事件处理或发射的明显内容。

如何捕获MDCMenu:selected 事件?

【问题讨论】:

    标签: javascript html vue.js events mdc-components


    【解决方案1】:

    该函数显然被称为listen,并将完整的字符串事件名称作为第一个参数,将要调用的函数作为第二个参数。

     this.menu.listen('MDCMenu:selected',()=>{
       console.log('hi');
     });
    

    这在我能找到的任何地方都没有记录,我猜到了。如果有人能找到文档,我将接受该答案。

    【讨论】:

    • 感谢您的解决方案。但是很遗憾他们没有任何文件:(
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2019-02-22
    相关资源
    最近更新 更多