誰かが私を正しい方向に向けることができることを願っています。
私はOOPに不慣れではありませんが、Javascriptでどのように機能するかについてはあまり詳しくありません。jsのクラスはオブジェクトであるという概念を理解しています。
いくつかのhtmlを記述し、ユーザーがいくつかの要素を追加または削除できるようにするスクリプトを書いています。いずれかのインスタンスの[チェックボックスの追加]をクリックした場合を除いて、すべてが正常に機能します。HTMLは、それ自体ではなく、最後のインスタンスで更新されます(これにより、ある種のスコープまたはカプセル化の失敗があると私は信じます)。
問題を単純化してフィドルを投稿しました。「colors」インスタンスの「AddCheckbox」をクリックすると、代わりにhtmlが「animals」グループに追加されていることがわかります。25行目の私のjsコメントに注意してください。
var CheckboxGroup = function(label){
return this.init(label);
}
CheckboxGroup.prototype = {
type: "checkbox",
label: null,
description: null,
$label: null,
init: function(label){
if(!label) label = "Checkboxes";
self = this;
this.$wrap = $("<div class='checkBoxGroup'></div>");
this.$label = $("<div>"+label+"</div>").appendTo(this.$wrap);
this.$options = $("<div></div>").appendTo(this.$wrap);
this.$add = $("<div class='n'>Add Checkbox</div>").appendTo(this.$wrap);
this.$add.click(function(){
self.addOption("New Option");
});
this.options = [];
return this;
},
addOption: function(label){
$option = $("<div class='c'><input type='checkbox' name='"+label+"'><span class='l'>"+label+"</span></div>").appendTo(this.$options);
$remove = $("<span class='rm'>x</span>").appendTo($option);
$remove.click(function(){
var r=confirm("Remove Option?");
if (r==false) return;
$(this).parents('.c').remove();
});
this.options.push($option);
return $option;
},
get: function(){
return this.$wrap;
}
}
// === CREATE SOME INSTANCES ===
a = new CheckboxGroup("Colors");
a.addOption('red');
a.addOption('green');
a.addOption('blue');
$('body').append(a.get());
b = new CheckboxGroup("Animals");
b.addOption('dog');
b.addOption('cat');
$('body').append(b.get());
洞察をありがとう。