dojo 的 event.preventDefault() 在 dojo 1.8 版本上不工作

dojo's event.preventDefault() not working on dojo 1.8 version

我正在将 DOJO 从 1.4 升级到 1.8 版本。现在,我定义了 dojo acccordian widget.I 需要在 onclick 事件中停止扩展 Accordian 小部件。

当我们使用 dojo 版本 1.4 时它起作用了,我们使用以下代码片段来停止 onclick 事件。

模板如下:

<div data-dojo-type="dijit.layout.AccordionContainer" style="height: 300px;" onclick="onClickHandler">

J 如下所示:

function onClickHandler(evt){
    dojo.stopEvent(evt);
}

在 1.8 Dojo 版本上遇到以下问题:

根据 dojo 官方网站 https://dojotoolkit.org/reference-guide/1.8/dojo/stopEvent.html# ,他们报告 dojo.stopEvent() deplrecated.we 需要使用 evt.preventDefault() 和 evt.stopPropagation( ) 反而。

当我尝试如下所示的 onclickhandler 时,它不会停止 onclick 事件。

function onClickHandler(evt){
    //dojo.stopEvent(evt);
    evt.preventDefault(); //Instead of the stopEvent
    evt.stopPropagation();
}

我无法弄清楚问题所在。 Chrome 和 Firefox 都不会引发任何错误或异常,因此据我所知,没有语法错误。

我尝试 'return false' 而不是上面提到的 preventDefault 和 stopPropagation 作为 well.even 尽管它没有停止手风琴面板的 onclick 事件。

请帮我解决一下

提前致谢

首先,将 id 添加到您的 accordionContainer 并移除 onclickHandler us on event。

<div id="accordionContainer_1" data-dojo-type="dijit.layout.AccordionContainer" style="height: 300px;">

使用以下代码后:

require(["dijit/registry","dojo/ready","dojo/_base/array"],
    function(registry,ready,array){
       ready(function(){
            var accordionContainer = registry.byId("accordionContainer_1");
            array.forEach(accordionContainer.getChildren(), function(childPane) { 
                // set click on title event as empty function 
                childPane._buttonWidget._onTitleClick = function(){};
                // set also keyboard keyDwon(up) on title event as empty function  
                childPane._buttonWidget._onKeyPress = function(){};
            });
       }
    }
});

所以现在当页面加载时,accordionContainer_1 AcordionContainer 中的 accordionPane 被 slieUp(Down) 禁用。

这是通过为 _onTitleClick 和 _onKeyPress 分配一个空函数来完成的(pane->_buttonWidget->_onTitleClick 函数 ...)

如果您想按需启用或禁用事件,您可以关注 My sample in GitHUB , 运行 Web 服务器中的文件。