IE7 preventDefault()无法处理跳过链接

时间:2012-09-07 20:26:21

标签: javascript jquery internet-explorer-8 internet-explorer-7

我目前已跳过跳转到div ID的链接,并且正在使用e.preventDefault()来阻止url在跳转到元素时更改但在IE7和IE8中它根本不能使用e.preventDefault( )如果我把它取出来,则url更改为div,锚标记包含对它的引用。他们是否有任何解决方法或方法?

这是代码

$('body').delegate('a.skiplink-accessible-text', 'click', function (e) {
    //e.preventDefault();
    if (!$.browser.msie) {
        e.preventDefault();
    }
    var jumpTo = $(this).attr('href');
    $('body').find(jumpTo).attr('tabindex', - 1).focus();

});

编辑:以下是一个用于测试目的的小jsbin示例 http://jsbin.com/welcome/20846/edit

3 个答案:

答案 0 :(得分:1)

如果您的事件对象是jquery事件对象,则e.preventDefault()将在IE中工作。 jquery中用于防止默认值的下划线代码使用特征检测为您处理此问题,如此代码段中所示(取自jQuery)

preventDefault: function() {
    this.isDefaultPrevented = returnTrue;

    var e = this.originalEvent;
    if ( !e ) {
        return;
    }

    // if preventDefault exists run it on the original event
    if ( e.preventDefault ) {
        e.preventDefault();

    // otherwise set the returnValue property of the original event to false (IE)
    } else {
        e.returnValue = false;
    }
},

答案 1 :(得分:1)

使用delegate时,我在IE 8中的jsbin中遇到错误。我将其切换到On,现在似乎正在运作。委托在IE 8中抛出脚本错误,这可能是一个jquery错误。

$(document).ready(function(){
  $('a').on('click', function(e){
    e.preventDefault();
    var jumpTo = $(this).attr('href');
    $(jumpTo).attr('tabindex', '-1').focus();
  });
});

http://jsbin.com/epabac/6/edit

编辑:由于您错误地使用了委托,因此委托正在抛出错误。 On仍然是Jquery 1.7+的首选方式。 delgate的正确用法将是:

$('body').delegate('a', 'click', function(e){ // ...  
});

答案 2 :(得分:0)

尝试使用IE e.returnValue = false;

$('body').delegate('a.skiplink-accessible-text', 'click', function (e) {

    if (!$.browser.msie) {
        e.preventDefault();
    } else {
        e.returnValue = false;
    }

    var jumpTo = $(this).attr('href');
    $('body').find(jumpTo).attr('tabindex', - 1).focus();

});