Просто вставьте желаемое значение по умолчанию во входной тег. Никакого дополнительного кодирования JavaScript не требуется
<input list="skills" value="DBA">
<datalist name="skills" id="skills">
<option value="PHP">Zend PHP</option>
<option value="DBA">ORACLE DBA</option>
<option value="APEX">APEX 5.1</option>
<option value="ANGULAR">ANGULAR JS</option>
</datalist>
Можно передать Hash.new
, функционируют блок, который выполняется для получения значения по умолчанию в случае, если запрошенное значение еще не существует:
h = Hash.new { |h, k| h[k] = Hash.new }
, Конечно, это может быть сделано рекурсивно.
РЕДАКТИРОВАНИЕ/: Ничего себе, существует статья , отвечающая на этот самый вопрос.
Ради полноты, вот решение от статьи для хешей произвольной глубины:
hash = Hash.new(&(p=lambda{|h,k| h[k] = Hash.new(&p)}))
Кредиты переходят к Кенту от Шум Данных .
Автовивификация, как ее называют, является и благословением, и проклятием. Проблема может заключаться в том, что если вы «посмотрите» на значение до того, как оно будет определено, вы застрянете с этим пустым хешем в слоте, и вам понадобится удалить его позже.
Если вы не возражаете, анархия, вы всегда можете просто заклинить в объявлениях стиля or-equals, которые позволят вам построить ожидаемую структуру при запросе:
((h ||= { })['w'] ||= { })['z']