Google Chrome: проблема Фокуса с полосой прокрутки

var today = DateTime.Today;
var month = new DateTime(today.Year, today.Month, 1);       
var first = month.AddMonths(-1);
var last = month.AddDays(-1);

Встраивают их, если Вам действительно нужны одна или две строки.

7
задан Spooky 20 June 2015 в 18:20
поделиться

5 ответов

Раньше я тоже сталкивался с такой ситуацией и этим занимаюсь.

$('html').click(function() {
    hasFocus = 0;
    hideResults();
});

и в поле ввода я сделаю это

$('input').click()
{
    event.stopPropagation();

}

Таким образом, это закроет раскрывающийся список, если щелкнуть где-нибудь за пределами div (даже полосы прокрутки). Но я подумал, может ли кто-нибудь предложить более логичное решение.

1
ответ дан 7 December 2019 в 03:18
поделиться

Не могли бы вы настроить событие размытия на срабатывание и для выпадающего div? Таким образом, когда вход или раскрывающийся список теряет фокус, он исчезнет ...

0
ответ дан 7 December 2019 в 03:18
поделиться

Мне любопытно ...
Вы используете последнюю версию каждого браузера, почему бы вам не попробовать ее в Chrome 4.0.202?

0
ответ дан 7 December 2019 в 03:18
поделиться

Что ж, у меня была та же проблема с моим выпадающим списком. Я спросил разработчиков Chrome по поводу этой проблемы, они сказали, что это ошибка , которая не будет исправлена ​​в ближайшем будущем, потому что «многие люди не сообщали о ней, и исправление нетривиально» . Так что давайте' Посмотрим правде в глаза: эта ошибка останется как минимум еще на год.

Однако для этого конкретного случая (раскрывающийся список) есть обходной путь. Уловка заключается в следующем: когда один щелчок по полосе прокрутки, событие «мышь вниз» приходит к элементу-владельцу этой полосы прокрутки. Мы можем использовать этот факт, чтобы установить флаг и проверить его в обработчике onblur. Вот объяснение:

<input id="search_ctrl">
<div id="dropdown_wrap" style="overflow:auto;max-height:30px">
  <div id="dropdown_rows">
    <span>row 1</span>
    <span>row 2</span>
    <span>row 2</span>
  </div>
</div>

div "dropdown_wrap" получит вертикальную полосу прокрутки, поскольку его содержимое не соответствует фиксированной высоте. Как только мы получим щелчок, мы почти уверены, что была нажата полоса прокрутки и фокус будет снят. Теперь немного кода, как с этим справиться:

search_ctrl.onfocus = function() {
  search_has_focus = true
}

search_ctrl.onblur = function() {
  search_has_focus = false
  if (!keep_focus) {
    // hide dropdown
  } else {
    keep_focus = false;
    search_ctrl.focus();
  }
}

dropdow_wrap.onclick = function() {
  if (isChrome()) {
    keep_focus = search_has_focus;
  }
}

Вот и все. Нам не нужны хаки для FF, поэтому есть проверка для браузера. В Chrome мы обнаруживаем щелчок по полосе прокрутки, позволяем размывать фокус, не закрывая список, а затем немедленно восстанавливаем фокус обратно для управления вводом. Конечно, если у нас есть логика для "search_ctrl.onfocus", ее тоже следует изменить. Обратите внимание, что нам нужно проверить, был ли фокус у search_ctrl, чтобы предотвратить проблемы с двойным щелчком.

Вы можете догадаться, что лучше было бы отменить событие onblur, но это не сработает в Chrome. Не уверен, является ли это ошибкой или функцией.

PS "dropdown_wrap" не должен иметь отступов или границ, иначе пользователь может щелкнуть в этих областях, и мы будем рассматривать это как щелчок полосы прокрутки.

5
ответ дан 7 December 2019 в 03:18
поделиться

Вместо того, чтобы обнаружить размытие, обнаружить документ. Те или щелкните окна и вытащите кнопку мыши. Определите, стоит ли эта точка мыши вне поля меню. Presto, вы обнаружили, когда они нажали за рамки!

0
ответ дан 7 December 2019 в 03:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: