最初に、関連性が中途半端に思えた提案された質問をすべて読みましたが、私の問題に対処するものは何も見つかりませんでした。第二に、これがすでにどこかで対処されている場合、私はそれを十分に検索していませんでした. 最後に、問題に進みます。:D
「項目」があるページがあります。ここでいう「品目」とは、HTML 入力の行を形成する水平方向の行にある HTML 要素の集まりです (たとえば、個数、説明、重量、単位レート、合計レートなどの列を想像してください)。項目の HTML コントロールの 1 つは、実際には Javascript を発行するカスタム サーバー コントロールです。とりわけ、Javascript は次のように型 X のオブジェクトをニュースアップします。
var whatever = new X(constructor values);
これで、ユーザーは [追加] ボタンで項目を追加できるようになりました。現在、広告申込情報を形成する HTML のクリーン コピーを複製しているだけです。これにより、Javascript コードも複製されるため、すべての項目にvar whatever = new X(constructor values);
. これは、すべて同じ Javascript 変数 (つまり、whatever
) を参照する複数の行があるという問題を引き起こします。
もちろん、これにより、各 をwhatever
同じインスタンスではなく個別のインスタンスとして参照する必要があるため、すべてが台無しになります。この状況を処理するためのアプローチがあるかどうか疑問に思っています。カスタム サーバー コントロールを使用しながら、各行が生成する Javascript を参照するにはどうすればよいですか? または、この問題を回避する方法で新しい広告申込情報を作成するにはどうすればよいですか?
私は Javascript を使用して DOM を変更する分野全体に不慣れであり、役立つベスト プラクティスや例を見つけることができないため、少し途方に暮れています。
これはすべて意味がありますか?そうでない場合は、何がそうでないか教えてください。できる限り解決するように努めます。
編集: これは小さなコード サンプルです。
これはまさに JavaScript オブジェクト宣言がどのように見えるかです:
var example = new SmartDropDown('uomSDD','75','1','7','','','','',2);
最初のパラメーターは、レンダリングする要素の 1 つの HTML ID であり、そのため、配列を使用することはできませんでした(回答の 1 つに記載されているように、素晴らしい回答ですが、言及するのを忘れていたことに気付くまで)その詳細)。ID を変更して配列を使用する方法を考え出す必要があります。
SmartDropDown オブジェクトのメソッドの一部はShowOptions
、、、HideOptions
ですBindOptions
。
ボタンがクリックされたときに呼び出されるコードについては、次のとおりです。
function AddLineItem()
{
var lineItemsParent = $("lineItems");
var newRow = lineItemTemplateNode.cloneNode(true);
lineItemsParent.appendChild(newRow);
}
つまり、要約すると、行項目の HTML には通常のもの (inputs、selects、spans など) と、上記の JS 宣言が含まれています。また、(上記のコードを使用して) 新しい項目を追加する方法により、JS 変数も複製されます。そして、1) 要素の ID を変更し、2) すべての JS 参照を追跡する方法が必要です (配列は既に提案されています)。