誰かが書いたこのコードの不具合を修正する必要がありますが、自分でそれを理解できるほど jQuery のスキルがありません。多分ここの誰かが私を助けることができます。まず、何が起こるのかを説明しようと思います...
基本的には、名前の横にチェックボックスがある人のリストを作成するという考え方です。その下には、6 つの使用可能なスロット (空の div) があります。チェックボックスをオンにすると、人物の名前が空の div の 1 つに挿入されます。明らかに最大6つまで。
注意が必要なのは、チェックしたボックスのチェックを外すと、その名前がスロットから消え、その下にあるすべての名前が 1 つ上のスロットに移動してギャップを埋めることです。ここでグリッチが発生しています。ボックスのチェックを 2 回続けて外すと、2 回目は何も起こらず、3 回目は...
これは、これまでに用意した jQuery 関数です。
$(function(){
$('input:checkbox').click(function(){
var $cb = $(this),
id = this.id, // No need for `attr`
member,
prev;
if(this.checked){ // No need for `attr`
$("div[id^=member]").each(function() {
if (!this.firstChild) {
// It's empty, use it
$(this).text($('label[for="'+ id +'"]').text()).attr("data-contents", id);
return false; // Done
}
});
}
else {
member = $('div[data-contents="' + id + '"]');
if (member[0]) {
member.empty('').removeAttr('data-contents');
prev = member[0];
member.nextAll().each(function() {
if (!this.firstChild) {
return false; // Done
}
prev.appendChild(this.firstChild);
prev = this;
});
}
}
});
});
チェックボックスの 1 つといくつかの div の例を次に示します。
<input type='checkbox' name='check[]' id='155' value='155'/>
<label for='155'>John Doe</label>
<input type='checkbox' name='check[]' id='156' value='156'/>
<label for='156'>John Smith</label>
と
<div id="member1" class="member"></div>
<div id="member2" class="member"></div>