使元素无法获得焦点

时间:2011-05-18 08:51:39

标签: javascript jquery internet-explorer-8

底线:我想禁用(使用jQuery)某些元素能够获得焦点,而不是删除已经应用的焦点。我的问题可能是IE-8特定的,所以我会考虑IE-8专注的解决方案。

例如,我有一个月份导航,有时几个月可能不是有效的选择,但我想仍然呈现月份。通过切换到跨度而不是无效月份的链接,而不是混乱我的服务器端逻辑并使我的标记变得复杂,我只是在li(链接容器)中添加“无效”类

<li class="valid">
    <a href="/subpubs/yearMonth/2011-1">Jan</a>
</li>       

<li class="invalid">
    <a href="/subpubs/yearMonth/2011-2">Feb</a>
</li>

[etc.]

这个jQuery可以关闭链接并删除焦点:

$('.invalid  > a').click(function () { $(this).blur(); return false; });

但是在IE8中(虽然不是IE7,不知道IE9),.blur()删除焦点有足够的延迟,有一个可见的眨眼(即使使用lonesomeday的解决方案)。所以我想要另一种方法,或者只是修复IE8。

是否只是禁用链接才能完全关注?

3 个答案:

答案 0 :(得分:2)

延迟可能是构建jQuery对象。如果您调用本机blur方法,则可以更快地执行此操作:

$('.invalid  > a').click(function () { this.blur(); return false; });

虽然我认为您可能应该使用focus执行此操作,以便用户无法选择自己的元素:

$('.invalid  > a').focus(function () { this.blur(); return false; });

另一种选择是使用jQuery替换所有与span元素无关的链接:

$('.invalid > a').replaceWith(function() {
    return $('<span/>', {
        html: this.innerHTML,
        'class': 'disabled-link'
    });
});

答案 1 :(得分:2)

我曾遇到过同样的问题,我找到的最佳解决方案是将元素的“tabindex”attr设置为“-1”。例如:

$('.invalid > a').attr('tabindex','-1');

答案 2 :(得分:1)

您可以考虑使用jQuery将所有无效链接切换到span标记;这将是客户端而不是服务器端。有没有特别的理由从这些链接中删除焦点?如果他们实际上没有链接到任何有用的东西,那么服务器端你应该用文本替换链接吗?