jQuery と jQuery UI を使用して、ユーザーが構成した数値に基づいてスライダーを動的に作成しています。ただし、スライダーを作成すると、最後に作成されたスライダーがすべて作成されるように見えるという問題があります。たとえば、8 つのスライダーがあり、それぞれをスライドさせると、対応するテキスト領域の値が必要な値に変更されます。ただし、現時点では、すべてのスライダーが、対応するテキスト領域ではなく、8 番目のテキスト領域を変更します。
コード:
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);
}