我正在使用 jQuery 和 jQuery UI 根据用户配置的数字动态构建滑块。但是我遇到了麻烦,当我创建滑块时,它似乎使所有滑块都变成了最后一个滑块。例如,我有八个滑块,每个滑块在滑动时都会将相应文本区域的值更改为我需要的值。然而,现在所有的滑块都改变了第八个文本区域,而不是它们对应的一个。
代码:
function buildSliders() {
for(b = 0; b < bankCount; b ++)
{
$( "#slider"+b ).slider({
value:20,
min: 0,
max: 254,
step: 1,
change: function( event, ui ) {
sendDimCommand(b);
}
});
}
};
function sendDimCommand(dimmerChannel) {
var targetChannel = "sliderValue"+dimmerChannel;
alert(targetChannel);
document.getElementById(targetChannel).innerHTML = "blue";
}
我很确定有办法解决这个问题,我已经研究过 .clone 和 .each 之类的东西,但是它们对我来说是不熟悉的概念,我不知道它们如何或是否会起作用。正如你所看到的,当滑动值改变时的功能都非常相似,它们只需要改变目标。
任何帮助将不胜感激,谢谢。
**编辑
这是我用来解决这个问题的代码:
函数 buildSliders() {
for(b = 0; b < bankCount; b ++)
{
$( "#slider"+b ).slider({
value:20,
min: 0,
max: 254,
step: 1,
change: function( event, ui ) {
sendDimCommand(this.attributes["value"].value);
}
});
}
};
function sendDimCommand(dimmerChannel) {
var targetChannel = "sliderValue"+dimmerChannel;
alert(targetChannel);
$( "#"+targetChannel ).text($( "#slider"+dimmerChannel ).slider( "value" ) )
}
当我创建 div 时:
for(r = 0; r < bankCount; r ++)
{
var trTag = document.createElement("tr");
tableTag.appendChild(trTag);
var sliderLabelTag = document.createElement("td");
sliderLabelTag.className = "RelayLabel";
sliderLabelTag.colSpan= 2;
sliderLabelTag.innerHTML = relayNames[r] + ": Slider Value";
trTag.appendChild(sliderLabelTag);
var sliderValueTag = document.createElement("td");
sliderValueTag.id = "sliderValue" + r;
sliderValueTag.innerHTML = "Waiting to Query";
trTag.appendChild(sliderValueTag);
var trTag = document.createElement("tr");
tableTag.appendChild(trTag);
var sliderCell = document.createElement("td");
sliderCell.id = "Slider" + r;
sliderCell.className = "sliderCell";
sliderCell.colSpan = 3;
sliderCell.innerHTML = "<div id=\"slider" + r + "\" value=\"" + r + "\" class=\"" + r + "\" name=\"" + r + "\"></div>";
trTag.appendChild(sliderCell);
}