Google Chrome ломается, когда onfocus устанавливает выбранный размер
Следующий JavaScript для изменения размера списка разрывов в Google Chrome. Это работает, когда вкладка в поле, но нажатие на нее приводит к "Aw, Snap!" страница ошибки.
<select onfocus="this.setAttribute('size', 3);">
<option>selectList with onfocus</option>
<option>2</option>
<option>3</option>
<option>4</option>
</select>
Прекрасно работает в FF и IE. Это какой-то конфликт между onfocus (нет проблем, если я реализую его onClick) и настройкой атрибута size. Мне сказали, что в Сафари это тоже ломается.
Любая помощь, идеи или обходные пути с благодарностью.
(PS Да, я знаю, это не очень хорошая форма, чтобы изменить размер списка выбора, но это то, что хочет босс / клиент)
3 ответа
Измените строку с выбором на это:
<select onfocus="var that = this; setTimeout(function() {that.setAttribute('size', 3);}, 0);">
Это работает для меня в Chrome. Я не пробовал в Safari, но подозреваю, что это сработает. По сути, все, что мы здесь делаем, это экранирование стека вызовов с помощью setTimeout, который, по-видимому, позволяет обойти ошибку в Webkit.
Я также нашел это:
- http://code.google.com/p/chromium/issues/detail?id=4579
- http://bugs.webkit.org/show_bug.cgi?id=17648
Таким образом, кажется, что это проблема WebKit, и по какой-то причине они не хотят ее исправлять (сделать ее соответствующей стандартам).
Насколько я могу судить, Google Chrome игнорирует ВСЕ атрибуты выбора размера для нескольких блоков выбора.
Смотрите ссылку:
http://www.w3schools.com/TAGS/tryit.asp?filename=tryhtml_select_size
Используйте любой другой браузер, затем попробуйте Google Chrome. Просто основные атрибуты HTML полностью игнорируются Chrome.