Javascript 更改事件处理程序只触发一次,jQuery

Javascript 更改事件处理程序只触发一次,jQuery,javascript,jquery,onchange,Javascript,Jquery,Onchange,当我在我的下拉菜单中选择一个元素时,我试图执行我的代码。我正在使用jQuery的更改。我的问题是,一旦我第一次执行这个函数。它不会响应任何其他选定项目或其他更改。我在底部做了测试块,代码在每次更改时都会触发。在我的第一个变更代码中,我做错了什么 JSFiddle: 附带问题;我注意到,当我问一个问题并选择一个答案时,有些问题会出现在我的个人资料上,而有些问题即使我选择了答案也不会出现。他们注册需要时间吗 function timeToHexColor() { var color = Ma

当我在我的下拉菜单中选择一个元素时,我试图执行我的代码。我正在使用jQuery的更改。我的问题是,一旦我第一次执行这个函数。它不会响应任何其他选定项目或其他更改。我在底部做了测试块,代码在每次更改时都会触发。在我的第一个变更代码中,我做错了什么

JSFiddle:

附带问题;我注意到,当我问一个问题并选择一个答案时,有些问题会出现在我的个人资料上,而有些问题即使我选择了答案也不会出现。他们注册需要时间吗

function timeToHexColor() {
    var color = Math.floor(Math.random() * 999999);
    if (color >= 0 && color <= 9 || color >= 1000 && color <= 9999) {
        color = "#00" + color;
    } else if (color >= 10 && color <= 99 || color >= 10000 && color <= 99999) {
        color = "#0" + color;
    } else if (color >= 100 && color <= 999) {
        color = "#000" + color;
    } else if (color > 999999) {
        color = "#" + (color - 1);
    } else {
        color = "#" + color;
    }
    document.getElementById("container").innerHTML += 
        "<div  style='border:solid 1px white;color:white;background-color:" + color + ";'>" + color + "</div>";
}

function Colors(interval) {
    this.interval = interval;
    switch (this.interval) {
        case 'second':
            document.getElementById('options').disabled = true;
            x = setInterval(timeToHexColor, 1000);
            setTimeout(stopColors, 10000);
            break;
        case 'minute':
            x = setInterval(timeToHexColor, 60000);
            document.getElementById('options').disabled = true;
            break;
        case 'hour':
            x = setInterval(timeToHexColor, 60000 * 60);
            document.getElementById('options').disabled = true;
            break;
        case 'day':
            x = setInterval(timeToHexColor, 1000);
            document.getElementById('options').disabled = true;
            setTimeout(stopColors, 10000);
            break;
        default:
            alert(this.interval + " is not a valid interval option");
            break;
    }
}

function stopColors() {
    clearInterval(x);
    document.getElementById('options').disabled = false;

}

$("#options").prop('selectedIndex', -1);
//this will only fire once and that's it. Is it process getting halted?
$("#options").change(function () {
    Colors($("#options").val());
});


// This test  will fire on change every time.
$("#x").change(function () {
    alert($("#x").val());
});

我不知道为什么,但您的document.getElementById干扰了清除间隔并导致jQuery没有响应

document.getElementById("container").innerHTML += 
    "<div  style='border:solid 1px white;color:white;background-color:" + color + ";'>" + color + "</div>";
看看小提琴


我不知道为什么,但您的document.getElementById干扰了清除间隔并导致jQuery没有响应

document.getElementById("container").innerHTML += 
    "<div  style='border:solid 1px white;color:white;background-color:" + color + ";'>" + color + "</div>";
看看小提琴


你能和JSFIDLE链接分享这个问题的html吗:每次处理“Colors”函数时,你的选项下拉列表都会自动禁用。我曾经/正在尝试在函数启动时禁用该控件。我这样做的原因是,如果我从下拉列表中选择另一个项目,而第一组颜色尚未完成打印,下一轮将无限打印。我还尝试删除disable属性,然后单击下拉列表,仍然不会触发。您能否与JSFIDLE链接共享html并将问题分组:每次处理“颜色”函数时,您的选项下拉列表都会禁用自身。我曾经/正在尝试在函数启动时禁用控件。我这样做的原因是,如果我从下拉列表中选择另一个项目,而第一组颜色尚未完成打印,下一轮将无限打印。我还尝试删除disable属性,然后单击下拉列表,仍然不会触发。另外,如果你想让秒之外的其他选项停止,你需要添加一个合适的setTimeOutTopColor,600100;对于其他人来说,这很奇怪@Trevor,我希望有人能在这个帖子中理解这一点,并感谢jQ的回答!此外,如果您想停止除秒以外的其他选项,则需要添加适当的SetTimeOutTopColor,600100;对于其他人来说,这很奇怪@Trevor,我希望有人能在这个帖子中理解这一点,并感谢jQ的回答!
 setTimeout(stopColors, 10100);