【问题标题】:dojo's event.preventDefault() not working on <a> tagdojo 的 event.preventDefault() 不适用于 <a> 标记
【发布时间】:2011-11-03 14:49:00
【问题描述】:

我对 Dojo 很陌生,但我正在尝试将现有的 javascript 界面从纯 javascript 转换为 Dojo。

我被以下问题困扰

基本上我尝试转换

<a id="myLink" onclick="myfunction()">bla</a>

function myfunction() {
//some funny code
return false; //To PREVENT default link behaviour
}

到下面

var handle = dojo.connect(dojo.byId('myLink'),'onclick',function (evt) {
    evt.preventDefault(); //took from dojo reference
        //same code that worked in pure js

});

我无法解决问题。 Chrome 和 Firefox 都不会触发任何错误或异常,所以我猜,没有语法错误。

我尝试将该函数连接到输入提交而不是链接,并且它起作用了,但我需要将它连接到链接......

也许我只是累了,但我发誓我看不到错误......

【问题讨论】:

  • 你不能用return false;吗?
  • 您是否从原始链接中删除了 onclick 属性?此外,请确保将链接处理程序包装在 dojo.ready() 中,或者链接处理程序出现在 HTML 中的元素之后。
  • @PeeHaa 如果你想添加 return false;在回调的底部,我尝试过,但它不起作用。我想弄清楚为什么上面的代码不起作用:(

标签: javascript html dojo


【解决方案1】:

在您的 HTML 正文中:

<a id="myLink">bla</a>

在您的 HTML 标头上:

<script type="text/javascript>
    dojo.ready(function(){
        dojo.connect(dojo.byId("myLink"), "onclick", null, function(evt){
            evt.preventDefault();
            console.debug("Default behaviour prevented");
        });
    });
</script>

更多信息在这里:http://dojotoolkit.org/reference-guide/quickstart/events.html

【讨论】:

【解决方案2】:

我刚遇到同样的问题,并认为我要疯了。但后来我发现了这个道场方法:

event.stopImmediatePropagation();

在这里:http://dojotoolkit.org/reference-guide/quickstart/events.html,这最终阻止了超链接做它的事情。显然,dojo 提供了自己的事件对象,其行为与原生事件对象不同。

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2020-10-05
    • 2021-12-10
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多