dojo的event.preventDefault()不适用于dojo 1.8版本

时间:2016-02-02 17:29:19

标签: javascript dojo

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

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

如下模板:

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

Js喜欢以下:

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

在1.8 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都不会触发任何错误或异常,因此据我所知,没有语法错误。

我试图'返回false'而不是上面提到的preventDefault&amp; stopPropagation也是如此,尽管它没有停止手风琴窗格的onclick事件。

请帮我解决。

提前致谢

1 个答案:

答案 0 :(得分:1)

首先,在您的id中添加accordionContainer,然后删除onclickHandler我们的事件。

<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(){};
            });
       }
    }
});

现在,当加载页面时,accordionPane accordionContainer_1内的AcordionContainer已从slieUp(向下)停用。

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

如果您想要按需提高或禁用该活动,您可以关注 My sample in GitHUB,在Web服务器中运行该文件。