javascript - mdl-menu material-design-lite 中的 mdl-textfield

标签 javascript html css material-design material-design-lite

我正在尝试使用 material-design-lite mdl-textfieldmdl-menu 里面.

问题是,当我打开菜单并单击文本字段 ( <input> ) 时,它会关闭菜单。

有谁知道如何在不手动重新创建/设置菜单样式的情况下避免这种情况?

示例代码如下:

#button {
  margin-left:20px;
  margin-top:20px;
}
<script src="https://code.getmdl.io/1.2.1/material.min.js"></script>
<link href="https://code.getmdl.io/1.2.1/material.indigo-pink.min.css" rel="stylesheet"/>


<button class="mdl-button mdl-js-button mdl-color--blue mdl-color-text--white" id="button">
  Open Menu
</button>
<ul for="button" class="mdl-menu mdl-js-menu">
  <li>
    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input class="mdl-textfield__input" type="text" id="sample3">
        <label class="mdl-textfield__label" for="sample3">Clicking here will close me :(</label>
    </div>
  </li>
  <li>item</li> 
  <li>item</li> 
  <li>item</li>
</ul>

更新

用一个快速的 Angular Directive(指令)解决了这个问题:

.directive('stopPropagation', function() {
    return {
        restrict: 'A',
        link: function($scope, $element) {
            $element.on('click', function($event) {
                $event.stopPropagation();
            });
        }
    };
});

最佳答案

尝试为输入字段添加一个事件处理程序,以防止事件传播

document.querySelector('.mdl-textfield__input').addEventListener('click', function(e) {e.stopPropagation()});

请参阅下面的代码段。

#button {
  margin-left:20px;
  margin-top:20px;
}
<script src="https://code.getmdl.io/1.2.1/material.min.js"></script>
<link href="https://code.getmdl.io/1.2.1/material.indigo-pink.min.css" rel="stylesheet"/>



<button class="mdl-button mdl-js-button mdl-color--blue mdl-color-text--white" id="button">
  Open Menu
</button>
<ul for="button" class="mdl-menu mdl-js-menu">
  <li>
    <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
        <input class="mdl-textfield__input" type="text" id="sample3">
        <label class="mdl-textfield__label" for="sample3">Clicking here will close me :(</label>
    </div>
  </li>
  <li>item</li> 
  <li>item</li> 
  <li>item</li>
</ul>
<script>document.querySelector('.mdl-textfield__input').addEventListener('click', function(e) {e.stopPropagation()});</script>

关于javascript - mdl-menu material-design-lite 中的 mdl-textfield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927482/

相关文章:

javascript - 软件故障注入(inject)的真正用途是什么?

html - 基于背景的边框颜色

css - Jquery 照片库的 CSS 样式问题

javascript - JointJS - 鼠标点击事件触发单元格位置改变事件

javascript - WebRTC远程视频不流畅

javascript - 路由 "#"问题仍然发生angularjs

html - 一个div,相互独立,在整个body的中间偏左,高度变为

javascript - 运行多事件函数的更简洁的方式

javascript - JQuery Toggle Class 加号和减号图标问题

javascript - 使用 CSS、JS 和 asp.net 显示 toast