2016-07-18 7 views
0

同じである私は、AJAX呼び出しが、結果は常に

$("#helpicons li").click(function() { 
var self = this; 

$.post('/SubCategories/GetSubCat/' + $(self).data('id'), function (data) 
{ 

    for (var i = 0; i < data.length; i++) 
    { 
     var helplist = data[i]; 

      $('<li/>').html("<h5>" + helplist.scat + "</h5>" +"<ul id='qlist'></ul>").appendTo('#taglist'); 



     $.post('/Questions/GetQuestion/' + helplist.scatid, function (dd) 
     { 
      for (var j = 0; j < dd.length; j++) 
      { 
       var helpquestion = dd[j]; 

       (function() { 

        $('<li/>').html("<p>" + helpquestion.quest + "</p>") 
        .click(function() { 

         alert(helpquestion.quest);//Problem is here 

        }).appendTo('#qlist'); 

       })(); 
      } 
     }); 
    } 
}); 

}); 

で自己呼び出し関数の式を有するが、アラートの各<li><ul id="qlist">で結果をクリックすると、最後の行であるときリスト内のすべてのliタグで同じです。自己呼び出しは機能していないようです。必要に応じて

私の行動:

[HttpPost] 
    public JsonResult GetQuestion(int id) 
    { 
     var ajaxq = db.Questions.Where(e => e.SubCategoryId == id).Select(e => new 
     { 
      quest=e.Qu, 
      answe=e.Ans 
     }).ToList(); 

     return Json(ajaxq); 
    } 

[HttpPost] 
    public JsonResult GetSubCat(int? id) 
    { 
     //:TODO 
     if (id == null) 
     { 
      //return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 


     var result = db.SubCategories.Where(e => e.CategoryId == id).Select(e => new 
     { 
      scat = e.SubCategoryName, 
      scatid = e.Id 

     }).ToList(); 
+0

クロージャ。クリックイベントが発生すると、 'helpquestion'はもはやそれではありません。 –

+0

ありがとうございます。申し訳ありません、名前を忘れました(Closures)。 –

答えて

1

あなたは、現在の項目を見てではなく、いくつかの変数を保持しようとするあなたのイベントハンドラを変更することができます。

$('<li/>').html("<p>" + helpquestion.quest + "</p>") 
    .click(function() { 

      alert($(this).text()) 

    }).appendTo('#qlist'); 
+0

おかげで解決しました。私はコメントであなたの助けによって問題を見つける、あなたに1000 times.justちょっと質問していただきありがとうございます。この方法では、パフォーマンスが悪いですか? –

+0

'$(this).'を使用すると影響はありません(データを覚えておく必要がないため影響は少ないでしょう)。それは 'click'イベントのため、タイムクリティカルではありません(あなたは10mill回実行していません)。イベントデリゲートを使用することで効率を上げることができます。質問ごとに1つのクリックハンドラを用意するだけで済みます。あるいは、すべての質問を追加した後にハンドラを割り当てるだけです(なぜ$(this ) ') –

+0

本当にありがとうございます。できるだけ早くあなたの提案を実装する必要があります。ありがとうございます.100質問未満ですので、今はそれほど緊急なものではないと思います。 '' var test = helpquestion; '' alert(test.answe);をクリックすると、うまく動作します。 –

関連する問題