8

非同期で生成されているアンカーのクリックをログに記録しようとしています。

完全に正常に動作する非同期呼び出しは、次のようになります。

 $("#txt_search").keyup(function() {
    var search = $("#txt_search").val();

    if (search.length > 0)
    {
      $.ajax({
        type: "post",
        url: "<?php echo site_url ('members/searchmember') ;?>",
        data:'search=' + search,
      success: function(msg){
        $('#search_results').html("");
        var obj = JSON.parse(msg);

        if (obj.length > 0)
        {
          try
          {
            var items=[];   
            $.each(obj, function(i,val){                      
                items.push($('<li class="search_result" />').html(
                  '<img src="<?php echo base_url(); ?>' + val.userImage + ' " /><a class="user_name" href="" rel="' + val.userId + '">'
                  + val.userFirstName + ' ' + val.userLastName 
                  + ' (' + val.userEmail + ')</a>'
                  )
                );
            }); 
            $('#search_results').append.apply($('#search_results'), items);
          } 
          catch(e) 
          {   
            alert(e);
          }   
        }
        else
        {
          $('#search_results').html($('<li/>').text('This user does not have an account yet'));   
        }   

      },
      error: function(){            
        alert('The connection is lost');
      }
      });
    }
  });

行きたいアンカーは<a class="user_name" href="" rel="' + val.userId + '">' + val.userFirstName + ' ' + val.userLastName + ' (' + val.userEmail + ')</a>'

この関数を使用して、これらのアンカーのクリックを検出します。

  // click op search results
  $("a.user_name").on('click', function(e) {
    e.preventDefault(); 
  });

問題は、preventDefaultが何もしていないようです... Stackoverflow でこの問題に関連するほとんどの質問を調べ、トピックに関する jQuery 独自のドキュメントを確認しましたが、何が問題なのかを見つけることができないようです。おそらく非同期呼び出しが問題である可能性があるため、AJAX呼び出しにステートメントを追加しようとしましたasync: falseが、それは修正されませんでした。

4

6 に答える 6

3

これはあなたのために働くはずです-

$('.search_result').on('click', 'a.user_name', function(){
    // your code here
    // code
    return false;   
});
于 2013-05-27T12:01:08.663 に答える