私のフォーラムベースのウェブサイトには、迷惑メールや不正行為を報告するためのすべての投稿の下にリンクがあります。このリンクがクリックされるたびに、サーバー上でWebサービスが呼び出され、呼び出しが返ってくると、リンクを含むスパン(下のコードを参照)が '投稿の報告'のように更新されます。正しいスパンを更新するには?
<script src="/js/MicrosoftAjax.js" type="text/javascript" language="javascript"></script>
<script type="text/javascript" language="javascript">
var spanToUpdate;
function ReportPost(updateSpan, postID)
{
if (confirm("Are you sure you want to report this post as spam or abuse?"))
{
spanToUpdate = updateSpan;
var proxy = SiteWS.ReportPost(postID, onReportPostSuccess, onReportPostFailure);
}
}
function onReportPostSuccess(sender, e)
{
spanToUpdate.innerHTML = "Post reported";
}
function onReportPostFailure(sender, e)
{
spanToUpdate.innerHTML = "An error occurred while reporting the post";
}
</script>
そして、これは報告リンクです:あなたが保持するため、私は変数、spanToUpdateを使用し、見ることができるように
<div class="post">
<p>post text here</p>
<span><a href="#" onclick="ReportPost(this.parentNode, <%= post.ID %>);return false;" title="Report spam or abuse">Report Post</a></span>
</div>
Other posts ...
エラーがポスト「を報告しながら、これはjavascriptのコードで発生しましたレポートリンクを含むスパンへの参照。つまり、ユーザーがコールリターンの前に別の投稿を報告した場合(つまり、別のレポートリンクをクリックした場合) urns、最後の投稿のスパンは2回更新され、前のものはまったく更新されませんが、これに対する回避策はありますか?
感謝
+1これは良いアイデアのようですが、私はこれを試してみるつもりです。ありがとう –
うーん..ちょっと思っていますが、匿名メソッドが呼び出されたときにupdateSpanが同じスパンを参照していますか? –
クロージャを作成する関数の内側でupdateSpanスコープを宣言すると、そのクロージャを作成したときの値を保持します。 – Anonymous