2016-12-15 6 views
1

私はjQuery初心者です。必要な書込み量を減らすために変数を使用しようとしましたが、何らかの理由で動作しません。以下はコードであり、私が試したが動作しなかったコードです。この問題に関する助けをいただければ幸いです。ありがとう!jQueryチェーンの一部の変数を作成するにはどうすればよいですか?

$(document).ready(function() { 
    var defaultValue, 
     defaultColor, 
     likeButton = $(this).closest('.pic-section').find('.like-button'), 
     likeCount = $(this).closest('.pic-section').find('.like-count'), 
     flashHeartActivateLikeIconAndAddToLikeCount = function() { 
      if (+$(this).closest('.pic-section').find('.like-count').text() === 0) { 
       $(this).closest('.pic-section').prepend('<div class="heart"></div>'); 
       $('.heart').delay(300).fadeOut(); 
       // likeCount.text(1) => why doesn't this work? 
       $(this).closest('.pic-section').find('.like-count').text(1); 
      } else { 
       $(this).closest('.pic-section').find('.like-count').text(0); 
       $('.heart').remove(); 
      } 
      if ($(this).closest('.pic-section').find('.like-button').css('background-position-x') === '-276px') { 
       $(this).closest('.pic-section').find('.like-button').css({ 
        'background-position-x': '-155px', 
        'background-position-y': '-229px' 
       }); 
      } else { 
       $(this).closest('.pic-section').find('.like-button').css({ 
        'background-position-x': '-276px', 
        'background-position-y': '-180px' 
       }); 
      } 
     }, 
     ActivateLikeIconAndAddToLikeCount = function() { 
      if ($(this).css('background-position-x') === '-276px') { 
       $(this).css({ 
        'background-position-x': '-155px', 
        'background-position-y': '-229px' 
       }); 
       $(this).closest('.pic-section').find('.like-count').text(1); 
      } else { 
       $(this).css({ 
        'background-position-x': '-276px', 
        'background-position-y': '-180px' 
       }); 
       $(this).closest('.pic-section').find('.like-count').text(0); 
      } 
     }, 
     clearValueAndChangeToBlack = function() { 
      defaultValue = $(this).val(); 
      defaultColor = $(this).css('color'); 
      $(this).css('color', 'black'); 
      if ($(this).val() === defaultValue) $(this).val(''); 
     }, 
     addDefaultValueAndChangeToGray = function() { 
      if ($(this).val().length === 0) { 
       $(this).val(defaultValue); 
       $(this).css('color', defaultColor); 
      } 
     }, 
     submitWithEnter = function(key) { 
      if (key.which === 13) { 
       var str = $(this).closest('.pic-section').find('input').val(); 
       $(this).css('color', 'rgb(153, 153, 153)'); 
       $(this).closest('.pic-section').find('.comments').append('<div class="new-comment"><b>ctoppel</b> ' + str + '</div>'); 
       $(this).val('Add a comment...'); 
       $(this).blur(); 
      } 
     }; 
    $.get('https://codesmith-precourse.firebaseio.com/instagram/-JqL35o8u6t3dTQaFXSV.json', function(data) { 
     var user = "<div class='pic-user'><div class='avatar'></div>ctoppel</div>", 
      time = "<div class='pic-time'>2d</div>", 
      header = "<div class='pic-header'>" + user + time + "</div>", 
      likes = "<div class='likes'><span class='like-count'>0</span> likes</div>", 
      comments = "<div class='comments'></div>", 
      addComment = "<div class='add-comment'><div class='like-button'></div><input class='comment-input' name='comment' value='Add a comment...'></input></div>", 
      footer = "<div class='pic-footer'>" + likes + comments + addComment + "</div>"; 
     for (var i = 0; i < data.length; i++) { 
      function testImage(URL) { 
       var tester = new Image(); 
       tester.onload = imageFound; 
       tester.src = URL; 
      } 

      function imageFound(pic) { 
       $('.feed-container').append('<div class="pic-section">' + header + '<img src="' + pic.currentTarget.src + '">' + footer + '</div>'); 
      } 
      testImage(data[i]); 
     }; 
    }); 
    $('.feed-container').on('dblclick', 'img', flashHeartActivateLikeIconAndAddToLikeCount); 
    $('.feed-container').on('click', '.like-button', ActivateLikeIconAndAddToLikeCount); 
    $('.feed-container').on('focus', 'input', clearValueAndChangeToBlack); 
    $('.feed-container').on('focusout', 'input', addDefaultValueAndChangeToGray); 
    $('.feed-container').on('keypress', 'input', submitWithEnter); 
}); 

答えて

0

移動関数内の変数は、現在thisは、

flashHeartActivateLikeIconAndAddToLikeCount = function() { 
      var section = $(this).closest('.pic-section'); 
      likeButton = section.find('.like-button'), 
      likeCount = section.find('.like-count'), 
      heart = $('.heart'); 
      if (likeCount.text() == 0) { 
       section.prepend('<div class="heart"></div>'); 
       heart.delay(300).fadeOut(); 
       likeCount.text(1); 
      } else { 
       likeCount.text(0); 
       heart.remove(); 
      } 
      if (likeButton.css('background-position-x') === '-276px') { 
       likeButton.css({ 
        'background-position-x': '-155px', 
        'background-position-y': '-229px' 
       }); 
      } else { 
       likeButton.css({ 
        'background-position-x': '-276px', 
        'background-position-y': '-180px' 
       }); 
      } 
     } 
+0

ありがとうございました! $(this)はウィンドウオブジェクトを参照していますが、divにはありません。$(this)が必要です。これを解決するお手伝いをありがとう! – Curt

+0

緑色のチェックをクリックして回答を受け入れることを忘れないでください:) – madalinivascu

0

あなたはこのような変数のいくつかを、使用していないfeed-container要素にないウィンドウを指し

var defaultValue, 
     defaultColor, 
     likeButton = $(this).closest('.pic-section').find('.like-button'), 
     likeCount = $(this).closest('.pic-section').find('.like-count'); 

変数はJqueryで簡単に宣言します:

var xyz = $(this).val(); 

上記のコードをすべて確認し、変数を正しく使用してください。 それはうまくいくはずです。

関連する問題