函数不会在JS

时间:2016-12-12 20:53:47

标签: jquery json

我的代码存在问题。目前,我从JSON数据库中提取项目,并且页面上显示了很多项目。我有一个名为showProduct的类,它会在页面上单击项目时触发。这将执行一项功能,将项目缩小为一个项目,并在DIV中显示其名称,图像等。

在我的代码中,我试图再次调用相同的函数(showProduct)。我希望它用正确的项目重新加载页面。是否与我已经调用过此函数的事实有关,我试图再次调用它?以下是我的代码谢谢。

$(document).ready(function() {

  'use strict';

  $.ajax({
    dataType: "jsonp",
    url: 'path to json',
    success: function(json){

      //check for window hash and display appropriate product category  
      var currentHash = window.location.hash;
      switch(currentHash) 
      {
          case '#tomatoes':
               displayTomatoes(); 
               break;
          default:
               displayAll();
               break;
      }

      //display product category based on click
      $("#tomatoes").click(function(event){
         displayTomatoes(); 
            event.preventDefault();
            window.location.hash = '#tomatoes'; 
      }); 
      $("#displayall").click(function(event){
         displayAll();
      });

      //display tomatoes function 
      function displayTomatoes() {
          var categoryImage = '';

          $.each(json, function (i, item) {
              if (item.itemCommodity == "1120" && item.itemBrandLetter == "C") {
                     categoryImage += '<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">' + '<a href="#"' + 'class="showProduct"' + 'data-itempageurl="' + item.itemName + '"' + 'data-itemgmo="' + item.itemGMOFree + '"' + 'data-itembpa="' + item.itemBPAFree + '"' + 'data-itemgluten="' + item.itemGlutenFree + '"' + 'data-itemimage="' + item.imageURL + '"' + 'data-itemname="' + item.itemName + '"' + 'data-itemoz="' + item.itemPackSize + '"' + 'data-itemdescription="' + item.itemDescription + '"' + 'data-itemupc="' + item.itemFullUPC + '">' + '<img class="img-responsive img-hover productImagesCategory" src="' + item.imageURL + '">' + '<h3>' + item.itemName + '</h3>' + '</a>' + '</div>';
              }
          });



$('#imagesCategoryProducts').hide().html(categoryImage).fadeIn('slow');

              //show individual product function on click
              $(".showProduct").click(function(event){

                 //hide all current products
                 $('#productCategories').hide();

                 //get passed data from other function
                 var clickedItemName = '<h1>' + $(this).data('itemname') + '</h1>';
                 var clickedItemUPC = $(this).data('itemupc');
                 var clickedItemOZ = '<h2>' + $(this).data('itemoz') + '</h2>';
                 var clickedItemDescription = '<p>' + $(this).data('itemdescription') + '</p>';
                 var clickedItemImage = '<img class="img-responsive img-rounded center-block" src="' + $(this).data('itemimage') + '">';
                 var clickedItemGluten = $(this).data('itemgluten');
                 var clickedItemBPA = $(this).data('itembpa');
                 var clickedItemGMO = $(this).data('itemgmo');
                 var clickedItemPageURL = $(this).data('itempageurl');

                 //check if clicked data equals correct item
                 $.each(json, function (i, item) {
                   if (item.itemName === clickedItemName) {
                      clickedItemName 
                   }
                   if (item.itemFullUPC === clickedItemUPC) {
                      clickedItemUPC
                   }
                   if (item.itemPackSize === clickedItemOZ) {
                      clickedItemOZ
                   }
                   if (item.itemDescription === clickedItemDescription) {
                      clickedItemDescription
                   }
                   if (item.imageURL === clickedItemImage) {
                      clickedItemImage
                   }
                   if (item.itemGlutenFree === clickedItemGluten) {
                      clickedItemGluten
                   }
                   if (item.itemBPAFree === clickedItemBPA) {
                      clickedItemBPA
                   }
                   if (item.itemGMOFree === clickedItemGMO) {
                      clickedItemGMO
                   }

                   //assign window hash to each product
                   if (item.itemName === clickedItemPageURL) {
                      event.preventDefault();
                      clickedItemPageURL = clickedItemPageURL.replace(/\s/g, '');
                      window.location.hash = clickedItemPageURL; 
                   }
                 });

                   //remove extra characters from UPC
                   var originalUPC = clickedItemUPC;
                   var strippedUPC = '<h2>' + originalUPC.slice(1, -1); + '</h2>'; 

                   //show individual product information
                   $('#productSocialShare').show();
                   $('#individualProduct').show();
                   $('#relatedProducts').show();   

                   //append product information to appropriate DIV
                   $('#productTitle').html(clickedItemName);
                   $('#productUPC').html(strippedUPC);
                   $('#productOZ').html(clickedItemOZ);
                   $('#productDescription').html(clickedItemDescription);
                   $('#productImage').html(clickedItemImage);

                   //check if gluten free is true and show image
                   if (clickedItemGluten == "Y") {
                       clickedItemGluten = '<img class="img-responsive img-rounded img-margin" src="../images/misc/gluten_free_test.jpg">';
                       $('#productGlutenFree').html(clickedItemGluten);
                       $('#productGlutenFree').show();
                   } else { 
                       $('#productGlutenFree').hide();
                   }

                   //check if bpa free is true and show image
                   if (clickedItemBPA == "Y") {
                       clickedItemBPA = '<img class="img-responsive img-rounded img-margin" src="../images/misc/bpa_free_test.jpg">';
                       $('#productBPAFree').html(clickedItemBPA);
                       $('#productBPAFree').show();
                   } else { 
                       $('#productBPAFree').hide();
                   }

                   //check if gmo free is true and show image
                   if (clickedItemGMO == "Y") {
                       clickedItemGMO = '<img class="img-responsive img-rounded img-margin" src="../images/misc/gmo_test.jpg">';
                       $('#productGMOFree').html(clickedItemGMO);
                       $('#productGMOFree').show();
                   } else { 
                       $('#productGMOFree').hide();
                   }

                });
              closeNav();
          }

          //display all products function 
          function displayAll() {
              var categoryImage = '';

              $.each(json, function (i, item) {

                         categoryImage += '<div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">' + '<a href="#"' + 'class="showProduct"' + 'data-itempageurl="' + item.itemName + '"' + 'data-itemgmo="' + item.itemGMOFree + '"' + 'data-itembpa="' + item.itemBPAFree + '"' + 'data-itemgluten="' + item.itemGlutenFree + '"' + 'data-itemimage="' + item.imageURL + '"' + 'data-itemname="' + item.itemName + '"' + 'data-itemoz="' + item.itemPackSize + '"' + 'data-itemdescription="' + item.itemDescription + '"' + 'data-itemupc="' + item.itemFullUPC + '">' + '<img class="img-responsive img-hover productImagesCategory" src="' + item.imageURL + '">' + '<h3>' + item.itemName + '</h3>' + '</a>' + '</div>';

              });

              $('#imagesCategoryProducts').hide().html(categoryImage).fadeIn('slow');

              //show individual product function on click
              $(".showProduct").click(function(event){

                 //hide all current products
                 $('#productCategories').hide();

                 //get passed data from other function
                 var clickedItemName = '<h1>' + $(this).data('itemname') + '</h1>';
                 var clickedItemUPC = $(this).data('itemupc');
                 var clickedItemOZ = '<h2>' + $(this).data('itemoz') + '</h2>';
                 var clickedItemDescription = '<p>' + $(this).data('itemdescription') + '</p>';
                 var clickedItemImage = '<img class="img-responsive img-rounded center-block" src="' + $(this).data('itemimage') + '">';
                 var clickedItemGluten = $(this).data('itemgluten');
                 var clickedItemBPA = $(this).data('itembpa');
                 var clickedItemGMO = $(this).data('itemgmo');
                 var clickedItemPageURL = $(this).data('itempageurl');

                 //check if clicked data equals correct item
                 $.each(json, function (i, item) {
                   if (item.itemName === clickedItemName) {
                      clickedItemName 
                   }
                   if (item.itemFullUPC === clickedItemUPC) {
                      clickedItemUPC
                   }
                   if (item.itemPackSize === clickedItemOZ) {
                      clickedItemOZ
                   }
                   if (item.itemDescription === clickedItemDescription) {
                      clickedItemDescription
                   }
                   if (item.imageURL === clickedItemImage) {
                      clickedItemImage
                   }
                   if (item.itemGlutenFree === clickedItemGluten) {
                      clickedItemGluten
                   }
                   if (item.itemBPAFree === clickedItemBPA) {
                      clickedItemBPA
                   }
                   if (item.itemGMOFree === clickedItemGMO) {
                      clickedItemGMO
                   }

                   //assign window hash to each product
                   if (item.itemName === clickedItemPageURL) {
                      event.preventDefault();
                      clickedItemPageURL = clickedItemPageURL.replace(/\s/g, '');
                      window.location.hash = clickedItemPageURL; 
                   }
                 });

                   //remove extra characters from UPC
                   var originalUPC = clickedItemUPC;
                   var strippedUPC = '<h2>' + originalUPC.slice(1, -1); + '</h2>'; 

                   //show individual product information
                   $('#productSocialShare').show();
                   $('#individualProduct').show();
                   $('#relatedProducts').show();   

                   //append product information to appropriate DIV
                   $('#productTitle').html(clickedItemName);
                   $('#productUPC').html(strippedUPC);
                   $('#productOZ').html(clickedItemOZ);
                   $('#productDescription').html(clickedItemDescription);
                   $('#productImage').html(clickedItemImage);

                   //check if gluten free is true and show image
                   if (clickedItemGluten == "Y") {
                       clickedItemGluten = '<img class="img-responsive img-rounded img-margin" src="../images/misc/gluten_free_test.jpg">';
                       $('#productGlutenFree').html(clickedItemGluten);
                       $('#productGlutenFree').show();
                   } else { 
                       $('#productGlutenFree').hide();
                   }

                   //check if bpa free is true and show image
                   if (clickedItemBPA == "Y") {
                       clickedItemBPA = '<img class="img-responsive img-rounded img-margin" src="../images/misc/bpa_free_test.jpg">';
                       $('#productBPAFree').html(clickedItemBPA);
                       $('#productBPAFree').show();
                   } else { 
                       $('#productBPAFree').hide();
                   }

                   //check if gmo free is true and show image
                   if (clickedItemGMO == "Y") {
                       clickedItemGMO = '<img class="img-responsive img-rounded img-margin" src="../images/misc/gmo_test.jpg">';
                       $('#productGMOFree').html(clickedItemGMO);
                       $('#productGMOFree').show();
                   } else { 
                       $('#productGMOFree').hide();
                   } 

                   //show random recipe for each item
                   var url = 'path to json';

                    $.getJSON(url, function(json) {

                        var randomRecipe = json[Math.floor(Math.random() * json.length)];

                        randomRecipe += '<div>' + '<a href="' + randomRecipe.recipePageURL +'">' + '<img class="img-responsive" src="' + randomRecipe.recipeImageCategoryURL + '">' + '</a>' + '<a href="' + randomRecipe.recipePageURL +'">' + '<h3 class="recipeSubCategoryImgCaption">' + randomRecipe.recipeName + '</h3>' + '</a>' + '</div>';

                        $('#featuredRecipe').append(randomRecipe);

                   });

                   // get similar product for each item
                   var similarProduct = '';

                   $.each(json, function (i, item) {

                        similarProduct += '<div>' + '<a href="#"' + 'class="showProduct"' + '">' + '<img class="img-responsive img-rounded center-block productImage" src="' + item.imageURL + '">' + '<h3 class="recipeSubCategoryImgCaption">' + item.itemName + '</h3>' + '</a>' + '</div>';

                   });

                   $('#productSimilar').html(similarProduct)

                });
              closeNav();
          }

       }
   });
});

1 个答案:

答案 0 :(得分:0)

想出来了。为了使其工作,我能够使用窗口位置哈希并将其与项目UPC匹配,因为UPC已经附加到哈希的末尾。这使我可以匹配两者并显示正确的项目。