2011-07-13 8 views
0

jsbinで問題を再現するのに問題があります(APIからJSONを使用しています)。しかし、周りを回っているように見え、どんな助けや洞察力にも本当に感謝しています。

私は、次のマークアップを開始します。

私は空白の順不同リストを持っています。

<ul id="results-list"> 
    <!-- it is blank for now, and will be populated via jQuery --> 
</ul> 

また入力もあります。

この入力が送信されると、#results-listにJSON応答に基づいてデータを設定するコードが実行されます。すべてがうまい。そのデータの集まりでは、サイドバーのナビゲーション(ユーザーがリンクをクリックし、メインコンテンツエリアのコンテンツがそれに応じて変更されるようなもの)にするために、どこにもないリンクを埋め込みます。これは、初めて初めてうまく動作します。

次に、#results-listのリンクをクリックするために.live()の内部で実行される無名関数があります。

$("#results-list a").live('click', function(){ 
    // populate the main content area with the correct information. 
}); 

大丈夫ですので、これは初めての動作です。ユーザーが入力内容を変更してフォームを再送信すると、メインのコンテンツ領域のすべての項目がそれに応じて変更されますが、2つあります。彼らが再びフォームを再提出すると、3つがあります。等々。

したがって、メインのコンテンツはX回複製されます.Xはフォームが送信された回数です。

これはやや曖昧な質問ですが、誰かが何が起こっているのかについての指針があるかどうかを見たいと思っていましたか?これは、通常の$.getJSONメソッド呼び出し内ですべて起こります。

アイデア?

+2

投稿ごとに「ライブ」機能を呼び出す可能性はありますか? –

+0

あなた自身で問題を診断するために何をしましたか?あなたはあなたの '$ .getJSON'呼び出しからの応答をチェックして、呼び出しごとに何をすべきかを確認していますか?あなたのコードに問題がどこにあるかを知ることで、それを簡単に修正することができます。 –

+0

...それはそれでした。私はとても馬鹿だと感じる。グレアムありがとう!あなたのコメントを答えたいと思うなら、私はupvote&正しいことをマークします! – Connor

答えて

2

各投稿の後にlive関数を呼び出すと、jQueryはDOMにイベントハンドラを追加し続けるので、ハンドラは複数回呼び出されます。これを実現するには、live関数を1回呼び出すか、各ポストの後にイベントハンドラを設定する必要がある場合は、bind関数またはclickなどのより具体的な関数を使用してください()。