根据客户的时区 (JavaScript) 在下拉列表中选择值
Selecting value in dropdown based on client's timezone (JavaScript)
我有一个包含多个时区选项的下拉列表:
<select data-drupal-selector="edit-field-user-timezone" id="edit-field-user-timezone" name="field_user_timezone">
<option value="_none" selected="selected"></option>
<optgroup label="Africa">
<option value="Africa/Asmara">Asmara</option>
<option value="Africa/Bamako">Bamako</option>
<option value="Africa/Bangui">Bangui</option>
<option value="Africa/Banjul">Banjul</option>
我正在尝试通过 JavaScript 根据客户的时区自动选择一个值:
<script>document.getElementById("edit-field-user-timezone").selectedIndex = Intl.DateTimeFormat().resolvedOptions().timeZone</script>
但这并没有做任何事情。我做错了什么?
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
确实以与下拉列表相同的格式输出了我正确的时区。
谢谢
selectedIndex
为您提供当前 selected 选项的数字索引。这是一个只读 属性。要自动 select 一个选项,您必须向其添加 selected 属性。在这种情况下,您必须找到值与时区匹配的选项(或选项的索引),然后切换该选项的 selected
属性。
像这样:
const options = [...document.getElementById('my-select').children]
const targetedValue = 'b' // equivalent to time zone in your case
const desiredOption = options.find(option => option.value === targetedValue)
desiredOption.selected = true
<select id="my-select">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</select>
试试这个:
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
const option = Object.values(document.getElementById("edit-field-user-timezone").options)
option.map(element => {
element.value == timezone ? element.selected = true : false
});
<select data-drupal-selector="edit-field-user-timezone" id="edit-field-user-timezone" name="field_user_timezone">
<option value="_none" selected="selected"></option>
<optgroup label="Africa">
<option value="Africa/Asmara">Asmara</option>
<option value="Africa/Bamako">Bamako</option>
<option value="Africa/Bangui">Bangui</option>
<option value="Africa/Banjul">Banjul</option>
</optgroup>
</select>
我有一个包含多个时区选项的下拉列表:
<select data-drupal-selector="edit-field-user-timezone" id="edit-field-user-timezone" name="field_user_timezone">
<option value="_none" selected="selected"></option>
<optgroup label="Africa">
<option value="Africa/Asmara">Asmara</option>
<option value="Africa/Bamako">Bamako</option>
<option value="Africa/Bangui">Bangui</option>
<option value="Africa/Banjul">Banjul</option>
我正在尝试通过 JavaScript 根据客户的时区自动选择一个值:
<script>document.getElementById("edit-field-user-timezone").selectedIndex = Intl.DateTimeFormat().resolvedOptions().timeZone</script>
但这并没有做任何事情。我做错了什么?
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone)
确实以与下拉列表相同的格式输出了我正确的时区。
谢谢
selectedIndex
为您提供当前 selected 选项的数字索引。这是一个只读 属性。要自动 select 一个选项,您必须向其添加 selected 属性。在这种情况下,您必须找到值与时区匹配的选项(或选项的索引),然后切换该选项的 selected
属性。
像这样:
const options = [...document.getElementById('my-select').children]
const targetedValue = 'b' // equivalent to time zone in your case
const desiredOption = options.find(option => option.value === targetedValue)
desiredOption.selected = true
<select id="my-select">
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
</select>
试试这个:
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone
const option = Object.values(document.getElementById("edit-field-user-timezone").options)
option.map(element => {
element.value == timezone ? element.selected = true : false
});
<select data-drupal-selector="edit-field-user-timezone" id="edit-field-user-timezone" name="field_user_timezone">
<option value="_none" selected="selected"></option>
<optgroup label="Africa">
<option value="Africa/Asmara">Asmara</option>
<option value="Africa/Bamako">Bamako</option>
<option value="Africa/Bangui">Bangui</option>
<option value="Africa/Banjul">Banjul</option>
</optgroup>
</select>