底线:我想禁用(使用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。
是否只是禁用链接才能完全关注?
答案 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标记;这将是客户端而不是服务器端。有没有特别的理由从这些链接中删除焦点?如果他们实际上没有链接到任何有用的东西,那么服务器端你应该用文本替换链接吗?