当我在我的下拉菜单中选择一个元素时,我正在尝试执行我的代码。我正在使用jQuery的更改()。我的问题是,一旦我第一次执行该功能。它不会响应任何其他选定的项目(也称为其他更改)。我在底部制作了测试块,并且每次更改都会触发该代码。在我的第一个更改代码中,我做错了什么?
JSFiddle:http://jsfiddle.net/nysteve/QHumL/#base
附带问题;我注意到,当我提出问题并选择答案时,其中一些问题出现在我的个人资料中,即使我选择了答案,也有些问题没有。是否需要时间进行注册?
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());
});
答案 0 :(得分:1)
我不确定为什么但是你的document.getElementById干扰了明确的间隔并导致jQuery没有响应。
document.getElementById("container").innerHTML +=
"<div style='border:solid 1px white;color:white;background-color:" + color + ";'>" + color + "</div>";
如果你使用jQuery追加它,你就没有问题。
$("#container").append("<div style='border:solid 1px white;color:white;background-color:" + color + ";'>" + color + "</div>");
我还为你的设置超时添加了100毫秒,这样你的函数就可以运行十次而不是9次。
setTimeout(stopColors, 10100);
查看小提琴