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

时间:2016-07-17 22:31:09

标签: javascript arrays google-chrome firefox drop-down-menu

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

月份是通过下拉列表生成的,并且具有合适的ID,即1 = 1月2日= 2月等。

我已尝试将myArray中的值更改为实际月份(1月,2月等),但也没有运气。

我哪里出错了?或者这不是它的完成方式吗?

非常感谢任何帮助。

//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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

 var objSelect = document.getElementById("BirthMonth");

objSelect DOM元素没有像您正在使用的options数组一样访问。

var myArray = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];

月份元素的ID值实际为:1 - :9,然后是:a - :c

包含所选月份值的隐藏字段为HiddenBirthMonth。月份字段的标题元素的标识为: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();