通过Javascript[谷歌账户创建页面]从下拉菜单中选择一个值

Selecting a value from a drop down menu via Javascript [Google accounts creation page]

本文关键字:选择 下拉菜单 一个 谷歌 Javascript 创建 通过      更新时间:2023-09-26

下面是我通过谷歌账户创建页面随机自动选择出生月份的代码片段。

月份通过下拉列表生成,并具有相应的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");

objSelectDOM元素没有像您正在使用的那样可以访问的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();