0

我目前有跳转到 div id 的跳过链接,并且在跳转到元素时使用 e.preventDefault() 来阻止 url 更改,但在 IE7 和 IE8 中,使用 e.preventDefault() 并且如果我把锚标记包含引用的 div 的 url 更改取出来。他们有什么解决方法或解决方法吗?

这是代码

$('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

4

3 回答 3

1

使用delegate. 我把它切换到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){ // ...  
});
于 2012-09-07T21:05:29.520 回答
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;
    }
},
于 2012-09-07T20:42:00.140 回答
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();

});
于 2012-09-07T20:31:04.937 回答