Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在dijit.菜单上设置最大高度_Javascript_Css_Dojo - Fatal编程技术网

Javascript 在dijit.菜单上设置最大高度

Javascript 在dijit.菜单上设置最大高度,javascript,css,dojo,Javascript,Css,Dojo,我有一个使用dijit.menu的弹出子菜单,由于动态输入,它可能很长。我想将最大高度和溢出-y:auto设置为dijit.menu。因此,它将有一个滚动条时,变得太长 var subMenu = new dijit.Menu({ parentMenu: this.mainMenu}); //....add a lots of submenu items here this.mainMenu.addChild(new dijit.PopupMenuItem({label: "some la

我有一个使用dijit.menu的弹出子菜单,由于动态输入,它可能很长。我想将最大高度和溢出-y:auto设置为dijit.menu。因此,它将有一个滚动条时,变得太长

var subMenu  = new dijit.Menu({ parentMenu: this.mainMenu});

//....add a lots of submenu items here

this.mainMenu.addChild(new dijit.PopupMenuItem({label: "some label", popup: subMenu}));
问题是dijit.menu的顶层是一个,max height对它不起作用。此外,与dijit.form.select不同,dijit.menu不将maxHeight作为参数

我注意到很久以前在dojo上有一张描述这个问题的罚单,并标记为已修复。但是,我仍然不知道如何在菜单上设置maxheight。修复程序似乎也不再存在


任何关于我如何能做到这一点的暗示都会被说服

正如您所指出的,Dojo处理dijit.Menu小部件的DOM创建的方式存在问题。问题不在于maxHeight不被接受为参数,因为您可以将其作为对象或字符串的一部分传递到小部件的style属性中,而在于如何应用样式

您提到菜单小部件的顶层是节点。然而,这并不是全部事实。Dojo将该节点作为顶级domNode呈现给客户机,但菜单实际上包装在另一个节点中,您无法直接从小部件访问该节点,您的样式应该应用于该节点

它的属性class=dijitpoup-dijitMenuPopup,但我怀疑您是否希望全局地将样式设置为Dijit弹出窗口/菜单。为了避免这种情况,您可以在小部件上设置baseClass属性,如下所示:

new Menu({
    baseClass: "myCustomMenu",
    targetNodeIds: ["myTarget"]
});
这将把顶层属性更改为读取class=dijitpoup MyCustomMenupOpp。这为您提供了一个类,您可以使用实现目标所需的CSS样式对其进行修改:

.myCustomMenuPopup {
    max-height: 200px;
    overflow-y: auto;
    overflow-x: hidden;
} 

正如您所指出的,在JSFIDLE中,Dojo处理dijit.Menu小部件的DOM创建的方式存在问题。问题不在于maxHeight不被接受为参数,因为您可以将其作为对象或字符串的一部分传递到小部件的style属性中,而在于如何应用样式

您提到菜单小部件的顶层是节点。然而,这并不是全部事实。Dojo将该节点作为顶级domNode呈现给客户机,但菜单实际上包装在另一个节点中,您无法直接从小部件访问该节点,您的样式应该应用于该节点

它的属性class=dijitpoup-dijitMenuPopup,但我怀疑您是否希望全局地将样式设置为Dijit弹出窗口/菜单。为了避免这种情况,您可以在小部件上设置baseClass属性,如下所示:

new Menu({
    baseClass: "myCustomMenu",
    targetNodeIds: ["myTarget"]
});
这将把顶层属性更改为读取class=dijitpoup MyCustomMenupOpp。这为您提供了一个类,您可以使用实现目标所需的CSS样式对其进行修改:

.myCustomMenuPopup {
    max-height: 200px;
    overflow-y: auto;
    overflow-x: hidden;
} 

在jsfiddle中。

感谢您给出了令人惊讶的答案!我花了很多时间试图找到如何在没有运气的情况下访问这个菜单中的div小部件……没问题,很高兴我能提供帮助:顺便说一句,如果您确实需要直接访问它,您可以访问domNode的父元素。谢谢您提供了令人惊讶的答案!我花了很多时间试图找到如何在没有运气的情况下访问这个菜单中的div小部件……没问题,很高兴我能提供帮助:顺便说一句,如果您确实需要直接访问它,您可以只访问domNode的父元素。