0

最初に、関連性が中途半端に思えた提案された質問をすべて読みましたが、私の問題に対処するものは何も見つかりませんでした。第二に、これがすでにどこかで対処されている場合、私はそれを十分に検索していませんでした. 最後に、問題に進みます。: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 参照を追跡する方法が必要です (配列は既に提案されています)。

4

3 に答える 3

2

配列を使用しますか?

   var lineItems = [];
   ...
   // when the button is clicked
   lineItems[lineItems.length] = new X(constructor values); 

同時に新しいIDを生成する必要がある場合は、配列インデックスの前に文字列を追加できます。

   var lineItems = [];
   ...
   // when the button is clicked
   var id = 'item_' + lineItems.length.toString()
   lineItems[lineItems.length] = new X(id, ...); 
于 2009-06-02T21:15:57.683 に答える
1

これは、JavaScriptフレームワークが本当に便利な場所です。多くの場合、この種のことを簡単にする優れたコンストラクターがあります。たとえば、Prototypeを使用すると、次のことができます。

function buildMe(counter) {
    var tempHTML = new Element('div',{'id':'bleh'+counter,className:'product'})
    tempHTML.insert(new Element('a',{className:'prodTitleLinkA',href:'/here'})

    $('someDiv').insert(tempHTML)
    Event.observe('bleh'+count, 'click', function(event) {
       alert(element.id)
    });
}

これにより、いくつかの要素が作成され、イベントがそれらに接続されます。それぞれ独自のIDとイベントを持つ「someDiv」に好きなだけ押し込み続けることができます。

于 2009-06-02T21:15:29.043 に答える
0

これについて良い答えを出すには、もう少し情報が必要だと思います。あなたのこの関数がどのように呼び出されるか、varに割り当てられるもの、および必要な/提供できるその他の情報を示すサンプルコードをいくつか示してください。多いほど良いです!

できれば喜んでお手伝いさせていただきます。

于 2009-06-02T21:14:59.870 に答える