ユーザーがボタンをクリックすると、availableTags
配列が取得され、 new に格納されvar tagsToWorkWith
ます。次に、 にあったすべてのタグを移動するために、各行を繰り返しtagsToWorkWith
実行します。moveTag()
availableTags
の中でmoveTag()
、その行をavailableTags
使用から削除していsplice()
ます。ただし、何らかの理由で、これは から行を削除しているためtagsToWorkWith
、関数が1 行おきfor()
にしか実行されません。moveTag()
splice()
から行を削除するのはなぜtagsToWorkWith
ですか? この問題を回避するために、明示的に tagsToWorkWith をオリジナルと同じに設定しavailableTags
ていますが、それは機能していないようです。
以下のコードはhttp://jsfiddle.net/EdnxH/のエラーで実行されます
var availableTags = [{"label":"Label A","value":"1"},{"label":"Label B","value":"2"}, {"label":"Label C","value":"3"}];
$(document).on('click', '#clickButton', function () {
var tagsToWorkWith = availableTags;
for(var countera=0; countera< tagsToWorkWith.length; countera++) {
alert(tagsToWorkWith[countera].label);
moveTag(tagsToWorkWith[countera].label, tagsToWorkWith[countera].value);
//This should match the first alert label, since we haven't increased the counter yet. But, for some reason, moveTag()'s splice() removes the row from tagsToWorkWith.
alert(tagsToWorkWith[countera].label);
}
});
function moveTag(itemToMove, itemToMoveValue) {
var selectedTagArrayIndex = -1;
for(var counter=0; counter< availableTags.length; counter++) {
if (availableTags[counter].value == itemToMoveValue) {
selectedTagArrayIndex = counter;
}
}
if (selectedTagArrayIndex > -1) {
availableTags.splice(selectedTagArrayIndex, 1);
}
}