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.

Я также нашел это:

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

Насколько я могу судить, Google Chrome игнорирует ВСЕ атрибуты выбора размера для нескольких блоков выбора.

Смотрите ссылку:

http://www.w3schools.com/TAGS/tryit.asp?filename=tryhtml_select_size

Используйте любой другой браузер, затем попробуйте Google Chrome. Просто основные атрибуты HTML полностью игнорируются Chrome.

Другие вопросы по тегам