Javascript jQuery访问事件列表器“ this”内的全局变量

我是初学者。我试图访问jquery事件列表器中的对象,但未定义或出现typerror。我尝试了几种尝试用这种方式发送对象的方法(结果:结果),但是它不起作用,给了我未定义的错误。我找不到适合我的情况的答案。 预先感谢

jQuery完整代码

$(document).ready(function() {
//var $addhere = $("#addhere");
$.ajax({
    type: "GET",url: "/newsfeed/retrieve",//datatype: "JSON",success: function(datas){
        //console.log(data);
        // Check the length of success data.data
        const data = datas;
        var datalength = Object.keys(data.data).length;
        // Calling the result function
        var count = 0;
        result(data,datalength);
        reactions(data,datalength,count);

    }
});

function result(result,datalength){
    // Values are here im result
    console.log(result);
    var myPostHtml = '';
    // Values in the first place of object array
    //console.log(result.data[0].uploads);
    for(i=0;i<datalength;i++)
    {
      //if(result.data[i].uploads.attr("src","No files uploaded")){
        //$("img").hide();
      //}
        myPostHtml += `<img src="${result.data[i].uploads}" id="contentAreaHomePageTweetPhoto" alt="post-image" class="img-responsive post-image" />
        <div class="post-container">
          <img src="${result.data[i].uploads}" id="" alt="user" class="profile-photo-md pull-left" />
          <div class="post-detail">
            <div class="user-info">
              <h5><a href="/timeline" id="" class="profile-link">${result.data[i].username}</a> <!--<span class="following">following</span>--></h5>
              <p class="text-muted"id="contentAreaHomePageTime">${result.data[i].createdAt}</p>
            </div>
            <div class="reaction">
              <button class="btn text-green" id="contentAreaHomePageLikeButton${result.data[i]._id}"><i class="icon ion-thumbsup"></i>0</button>
              <button class="btn text-red" id="contentAreaHomePageUpdateButton${result.data[i]._id}"><i class="fa fa-pencil-square-o"></i></button>
              <button class="btn text-red" id="contentAreaHomePageDeleteButton${result.data[i]._id}"><i class="icon ion-android-delete"></i></button>
            </div>
            <div class="line-divider"></div>
            <div class="post-text">
              <p><i class="em em-anguished"></i> <i class="em em-anguished"></i> <i class="em em-anguished"></i></p>
            </div>
            <!--<div class="line-divider"></div>-->
            <div class="">
              <!--<img src="images/users/user-11.jpg" alt="" class="profile-photo-sm" />-->
              <p id="contentAreaHomePagePostText"><b><!--<a href="/timeline" class="profile-link"></a><i class="em em-laughing"></i>-->${result.data[i].post}</b></p>

            <!--</div>
            <div class="post-comment">
              <img src="images/users/user-4.jpg" alt="" class="profile-photo-sm" />
              <p><a href="/timeline" class="profile-link">John</a> Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,quis nostrud </h5>
            </div>
            <div class="post-comment">
              <img src="images/users/user-1.jpg" alt="" class="profile-photo-sm" />
              <input type="text" class="form-control" placeholder="Post a comment">
            </div>-->
          </div>
        </div>
        </div>
        <div class="line-divider"></div>`

    };

    $(".post-content").append(myPostHtml);
};

function reactions(result,count){ 
  console.log("Entered inside",result,datalength);

for(i=0;i<datalength;i++){
    $('#contentAreaHomePageLikeButton'+result.data[i]._id).on('click',{results: result},function(event){
      console.log("I am button",$(this),event.data.results.data[i]);
      var like = {
        id: event.data.results.data[i]._id
      }
      console.log("This is the like",like);
      //passdata = result.data.[i]_id;
      //$(this).html(count);
      $.ajax({
        url: "/newsfeed/update",type: "POST",datatype: "JSON",data: {id: result.data[i]._id},success: function(data){
          $("#contentAreaHomePageLikeButton"+result.data[i]._id).html(count++);

        }
       });
    })
    $('#contentAreaHomePageUpdateButton'+result.data[i]._id).on('click',function(){
      console.log("I am Button");
      //$(this).html("Mayank");
      $.ajax({
        url: "/newsfeed/update",success: function(data){
          $("#contentAreaHomePageUpdateButton"+result.data[i]._id).html(count++);

        }
       });
    })
    $('#contentAreaHomePageDeleteButton'+result.data[i]._id).on('click',function(){
      console.log("I am Button");
      console.log("I am Button",result.data[i]._id);
      //$(this).html("Mayank");
      $.ajax({
        url: "/newsfeed/delete",success: function(data){
          $("#contentAreaHomePageDeleteButton"+result.data[i]._id).hide();

        }
      });
    })

问题在代码中

for(i=0;i<datalength;i++){
    $('#contentAreaHomePageLikeButton'+result.data[i]._id).on('click',event.data.results.data[i]); // This gives undefined
      var like = {
        id: event.data.results.data[i]._id
      }
      console.log("This is the like",like); // This gives typeerror exact error added at end
      //passdata = result.data.[i]_id;
      //$(this).html(count);
      $.ajax({
        url: "/newsfeed/update",success: function(data){
          $("#contentAreaHomePageLikeButton"+result.data[i]._id).html(count++);

        }
       });
    })
  

homepageJquery.js:84未捕获的TypeError:无法读取未定义的属性'_id'       在HTMLButtonElement。 (homepageJquery.js:84)

houtiecong 回答:Javascript jQuery访问事件列表器“ this”内的全局变量

我想说的是您可能被“关闭”绊倒了。在这里,您有一个 outer 循环,它发出异步JavaScript请求。神奇的是,i的当前值可供他们使用。但是,不能保证在实际执行该语句时,data[]数组实际上包含该元素。

我在这里看到了其他各种印刷错误问题……result vs。 results,依此类推。非常仔细地检查您的逻辑,并确保您完全了解它应该在做什么。

本文链接:https://www.f2er.com/3020602.html

大家都在问