Сделать элемент не в состоянии сфокусироваться - PullRequest
2 голосов
/ 18 мая 2011

Итог: я бы хотел отключить (с помощью 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 () имеет достаточную задержку, чтобы было видимое моргание (даже с решением одиночного дня). Поэтому я бы хотел другой подход или, возможно, просто исправление для IE8.

Можно ли вообще отключить ссылку, чтобы она вообще не фокусировалась?

Ответы [ 3 ]

2 голосов
/ 29 июля 2013

Однажды у меня была та же проблема, лучшее решение, которое я нашел, было установить attr "tabindex" элемента в "-1". Например:

$('.invalid > a').attr('tabindex','-1');
2 голосов
/ 18 мая 2011

Задержка, вероятно, связана с созданием объекта jQuery. Вы можете сделать это быстрее, если вызовете нативный метод blur:

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

Хотя я думаю, что вы, вероятно, должны сделать это с focus, чтобы пользователи не могли перейти к вашим элементам:

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

Другой вариант - заменить все ваши «недействительные» ссылки элементами span, используя jQuery:

$('.invalid > a').replaceWith(function() {
    return $('<span/>', {
        html: this.innerHTML,
        'class': 'disabled-link'
    });
});
1 голос
/ 18 мая 2011

Вы можете рассмотреть возможность переключения всех недействительных ссылок на разметку span, используя jQuery; это будет на стороне клиента, а не на стороне сервера. Есть ли особая причина для удаления фокуса с этих ссылок? Если они на самом деле не ссылаются ни на что полезное, конечно, это тот случай, когда на стороне сервера вы должны заменить ссылки просто текстом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...