【问题标题】:Javascript's default event prevention not workingJavascript的默认事件预防不起作用
【发布时间】:2012-04-15 23:50:54
【问题描述】:

当用户的浏览器启用了 Javascript 时,我正在尝试将“我的个人资料”菜单链接重定向到自定义 URL。我已经编写了一个自定义 url 创建动态函数 getNewURL() 并且连接工作正常。问题是,即使启用了 Javascript(在我的 Chrome 上),href 中的默认页面也会加载,尽管有所有默认的预防代码。我一直在这上面花了几个小时,但无法弄清楚问题出在哪里。任何帮助将不胜感激。

<head>
<script type="text/javascript">
<!--
function init() {
    document.getElementById('profile').onclick=getNewURL;
}

window.onload=function(){
init();
}



function getNewURL(e)
{
    if(!e) e = window.event;
    var a = 'http://www.google.com/'; 
    var b = 'advanced_search?hl=en';//this will actually be a dynamic wikispaces
             //variable - the username. 
    var url = a+b;

    window.location.href = url;

    //Over-riding default action
    //e.cancelBubble is supported by IE
    e.cancelBubble = true;
    e.returnValue = false;

    //e.stopPropagation works only in Firefox.
    if (e.stopPropagation) {
        e.stopPropagation();
        
    }
    e.preventDefault();
    return false;
}
//-->
</script>
</head>

<body>
<div id="menu">
<ul>
    <li><a href="http://www.google.com/" id="profile">My Profile</a></li>
</ul>
</div>
</body>        

【问题讨论】:

  • 您的 e.preventDefault 在您对 e.stopPropagation 的检查中。因此,当您不在 Firefox 上时,它不会那样做。如果你把它移到 if 语句之外,它应该在 chrome 中工作
  • 我希望是这样,但遗憾的是它不是。默认预防仍然不起作用。
  • 我看不到你在哪里调用你的 init 方法。
  • 我认为 init() 是内置的。我的错。将此添加到代码中以调用它。 window.onload=function(){init();} 还是去默认页面。
  • 哦。忘记保存并尝试。现在工作!感谢大家。你们共同帮助我解决了这个问题。

标签: javascript dom-events preventdefault


【解决方案1】:

好像你忘了给函数定义添加参数

function getNewURL(e) ...

【讨论】:

  • 糟糕..错字。我的实际定义中有 e 。还是不行。
【解决方案2】:

什么是e?

function getNewURL()
{
    if(!e) var e = window.event;  <--

应该是

function getNewURL(e)
{
    if(!e) e = window.event;

【讨论】:

  • 嗯,不仅仅是 var
  • 谢谢!现在工作。您的建议帮助解决了部分问题。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多