2009-06-02 4 views
0

まず、関連性の高い提案されたすべての質問を読み、問題を解決したものは何も見つかりませんでした。第二に、もしこれがすでにどこかで解決されていれば、私はそれを十分に検索しませんでした。最後に、問題について。 :DJavascriptを使用して広告申込情報を追加するとき、HTML要素IDとJavascript参照をどのように処理しますか?

「広告申込情報」があるページがあります。 'line item'は、HTML入力の行を構成するHTML要素の束です(例:Pieces、Description、Weight、Unit Rate、Total Rateなどの列を想像してください)。広告申込情報のHTMLコントロールの1つは、実際にはJavascriptを発行するカスタムサーバーコントロールです。とりわけ、JavascriptがニュースまでそのようなタイプXのオブジェクト:今

var whatever = new X(constructor values);

を、ユーザーが[追加]ボタンでラインアイテムを追加することができます。現在、広告申込情報を構成するHTMLのクリーンコピーを複製するだけです。これにより、Javascriptコードもクローンされ、すべての広告申込情報にvar whatever = new X(constructor values);が表示されるようになりました。これは、すべて同じJavaScript変数(つまり、whatever)を参照する複数の行が存在するという問題を提起します。

これはもちろん、私はwhateverをそれぞれ別のインスタンスとして参照する必要があります。同じインスタンスではありません。このような状況に対処する方法があるのだろうかと思います。どのようにカスタムサーバーコントロールを使用しますが、各行が発行するJavaScriptをまだ参照していますか?または、この問題を回避する方法で新しい広告申込情報を作成するにはどうすればよいですか?

私はDOMを使用しているJavaScriptを使用していることに変わりはありません。ベストプラクティスや参考になるものが見つからないようですので、少し迷っています。

これはすべて意味がありますか?そうでない場合は、私には何ができないのかを教えてください。そして、できる限り私はそれをクリアしようとします。

編集:ここに小さなコードサンプルがあります。

これはJavaScriptオブジェクトの宣言がどのように見えるまさにされています

var example = new SmartDropDown('uomSDD','75','1','7','','','','',2);

最初のパラメータはレンダリング要素の一つのHTML IDですので、私はできないだけその理由の(答えの1つに言及されているように、配列を使用してください;私がその細部について言及するのを忘れてしまったと気づくまで、すばらしい答えです)。私はのIDを変更する方法を考え出す必要があります。

SmartDropDownオブジェクトの一部のメソッドは、ShowOptions,HideOptionsBindOptionsです。ボタンがクリックされたときに呼ばれていたコードについては

は、ここにある:それからの入力、選択、スパン、などと:要約するので

function AddLineItem() 
{ 
    var lineItemsParent = $("lineItems"); 
    var newRow = lineItemTemplateNode.cloneNode(true); 
    lineItemsParent.appendChild(newRow); 
} 

、行項目のHTMLは通常のものが含まれています上記のJS宣言。上記のコードを使用して新しい広告申込情報を追加するため、JS変数もクローンになります。そして、私は1)要素のIDを変更する方法と2)すべてのJS参照(配列が既に示唆している)を追跡する方法が必要です。

+0

各広告申込情報のJavaScriptオブジェクトxの目的は何ですか。 –

+0

JSをレンダリングするコントロールは、自社で作成されたソートの自動完成ドロップダウンであり、レンダリングするJSオブジェクトはJSを介した相互作用を可能にするオブジェクトです。それは十分な情報ですか? –

答えて

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, ...); 
+0

ああ、パンチに殴ら!私はコードサンプルに小さな省略記号があった。 ;) –

+0

ああ、そうだ。面白い。私はこれを少しおもちゃにして、私が思いつくことができるものを見てみましょう。 –

+0

ああ、撃つ。コンストラクタのパラメータの1つがHTML IDであることを忘れていたので、各ラインアイテムに対して新しい一意のIDを生成する必要がありました。 –

0

私はあなたにこれについて良い答えを与えることができるように少し詳しい情報が必要だと思います。この機能をどのように呼び出すか、var whateverなどに割り当てられている情報など、いくつかのコード例を示してください。より多くの方が良い!

できれば喜んでお手伝いします。

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) 
    }); 
} 

これは、いくつかの要素を作成し、それらにイベントを接続します。私は "someDiv"に自分のIDとイベントを持ったたくさんのものを押しつけることができます。

関連する問題