通过Javascript[谷歌账户创建页面]从下拉菜单中选择一个值
Selecting a value from a drop down menu via Javascript [Google accounts creation page]
下面是我通过谷歌账户创建页面随机自动选择出生月份的代码片段。
月份通过下拉列表生成,并具有相应的id,即1=1月2=2月等。
我曾尝试将myArray中的值更改为实际月份(一月、二月等),但也没有成功。
我哪里错了?还是不是这样做的?
任何帮助都将不胜感激。
//Get select object
var objSelect = document.getElementById("BirthMonth");
var myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
var rand = myArray[Math.floor(Math.random() * myArray.length)];
//Set selected
setSelectedValue(objSelect, "myArray");
function setSelectedValue(selectObj, valueToSet) {
for (var i = 0; i < selectObj.options.length; i++) {
if (selectObj.options[i].text== valueToSet) {
selectObj.options[i].selected = true;
return;
}
}
}
var objSelect = document.getElementById("BirthMonth");
objSelect
DOM元素没有像您正在使用的那样可以访问的options
数组。
var myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];
月份元素实际上具有值为:1
-:9
,然后为:a
-:c
的Id。
包含所选月份值的隐藏字段为HiddenBirthMonth
。月份字段的标题元素的Id为:0
,需要将其设置为相应的月份标题。我们可以从month元素的textContent
属性中得到。
令人讨厌的一点是,只有单击下拉列表才能渲染各个月份元素。为了解决这个问题,我创建了一个函数来快速触发mousedown
事件两次,然后再继续。
工作解决方案:
function setRandomBirthMonth() {
var hiddenMonthField = document.getElementById("HiddenBirthMonth");
var selectedMonthCaption = document.getElementById(":0");
var monthIds = [':1', ':2', ':3', ':4', ':5', ':6', ':7', ':8', ':9', ':a', ':b', ':c'];
var randomMonth = monthIds[Math.floor(Math.random() * monthIds.length)];
// month options don't render until a 'mousedown' event, so let's simulate it
if (document.getElementById(randomMonth) == null) forceRenderOfMonths();
var selectedMonth = document.getElementById(randomMonth);
hiddenMonthField.value = randomMonth;
selectedMonthCaption.setAttribute("aria-posinset", randomMonth);
selectedMonthCaption.textContent = selectedMonth.textContent;
function forceRenderOfMonths() {
var select = document.getElementsByClassName("jfk-select")[0];
var clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent("mousedown", true, true);
select.dispatchEvent(clickEvent);
clickEvent.initEvent("mousedown", true, true);
select.dispatchEvent(clickEvent);
}
}
setRandomBirthMonth();
相关文章:
- 从选择下拉菜单中获取数据
- 在angularjs UI网格列中选择下拉菜单不适用于外部editcellTemplate
- JS在选择下拉菜单打开时创建延迟
- 选择下拉菜单:实现非精确搜索,每个单词都将被不可重复地搜索
- 在javascript中动态添加一个选择下拉菜单
- html表单上的许多选择(下拉菜单),如何只获取更改的选择的值
- 未选择下拉菜单时更改css
- 存储值后,重复重新选择选择下拉菜单的第一个选项
- 用于关闭和打开的Jquery事件选择下拉菜单,而不是在更改时
- 是否可以在HTML选择下拉菜单的每个选项上附加一个qtip2工具提示
- 如何使用选择下拉菜单更改元素
- 圆角<选择>下拉菜单
- 在选择下拉菜单时创建文本字段
- HTML选择下拉菜单,最大高度为100%,大小自动
- <选择>下拉菜单以定位JavaScript打开的文件
- 将数据加载到动态填充的分部视图中的选择下拉菜单
- 表排序器从选择下拉菜单和自定义时间过滤器中选择多个选项
- angularjs-编辑项目时,在选择下拉菜单中设置所选值
- 输入-选择下拉菜单在firefox中不起作用
- AngularJS-为什么选择下拉菜单;零钱上没有$event