rnDesto
rnDesto

Reputation: 259

call object value with jquery not working

I'm trying to call data object with jquery. I have problem to show data with it. How I can display result only label and kategori when anchor clicked.

Also Is there any suggestion to simplify click event to call object

thank you

$(document).ready(function(){
     var data = [  
  {  
    "id":1,
    "label":"Sean",
    "kategori":"Produk"
  },
  {  
    "id":2,
    "label":"Howard",
    "kategori":"Produk"
  },
  {  
    "id":3,
    "label":"Paul",
    "kategori":"Produk"
  },
  {  
    "id":4,
    "label":"Eugene",
    "kategori":"Unit"
  },
  {  
    "id":5,
    "label":"Johnny",
    "kategori":"Unit"
  },
  {  
    "id":6,
    "label":"Jacqueline",
    "kategori":"Unit"
  },
  {  
    "id":7,
    "label":"Shirley",
    "kategori":"Artikel"
  },
  {  
    "id":8,
    "label":"Julia",
    "kategori":"Project"
  },
  {  
    "id":9,
    "label":"Russell",
    "kategori":"Project"
  },
  {  
    "id":10,
    "label":"William",
    "kategori":"Collection"
  }
];
 
		$('.callProduct').on('click', function(e){
      e.preventDefault();
			var call = $(this);
			var data_target = call.data('target');
			var results = '';
			$.each(data, function( index, value ) {
				var resName = value.label.toString().toLowerCase();
				var resCat = value.kategori.toString().toLowerCase();
				if( resName != '' && data_target == resCat) {
					results += '<li>'+value.label+' - '+value.kategori+'</li>';
					}
				});
				if (results != '') {
					$('.resultProduct').append(results);
				}
		});
    
    		$('.callUnit').on('click', function(e){
      e.preventDefault();
			var call = $(this);
			var data_target = call.data('target');
			var results = '';
			$.each(data, function( index, value ) {
				var resName = value.label.toString().toLowerCase();
				var resCat = value.kategori.toString().toLowerCase();
				if( resName != '' && data_target == resCat) {
					results += '<li>'+value.label+' - '+value.kategori+'</li>';
					}
				});
				if (results != '') {
					$('.resultProduct').append(results);
				}
		});
  
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><div class="callData">
<ul>
  <li><a href="#product" class="callProduct" data-target="product">product</a></li>
  <li><a href="#unit" class="callUnit" data-target="unit">unit</a></li>
  <li><a href="#artikel" class="callArtikel" data-target="artikel">artikel</a></li>
  <li><a href="#project" class="callProject" data-target="project">project</a></li>
</ul>
</div>

<div class="resultData">
  <div id="product">
    <ul class="resultProduct"></ul>
  </div>
  <div id="unit">
    <ul class="resultUnit"></ul>
  </div>
  <div id="artikel">
    <ul class="resultArtikel"></ul>
  </div>
  <div id="project">
    <ul class="resultProject"></ul>
  </div>
</div>

Upvotes: 0

Views: 49

Answers (1)

Marylyn Lajato
Marylyn Lajato

Reputation: 1171

You're almost there. You can get the [label] and [kategori] values calling it via its object's properties indexes followed by their key(s) you wanted to retrieved.

Inside your $.each() method, you can call them by:

// In getting the [label] value
var sDataLabel = data[index].label; //Sean, Howard, Paul

// In getting the [kategori] value
var sDataCategory = data[index].kategori; //product

Now you want to consider the idea that those keys may not exist, so you need to check if [label] and [kategori] exists or not. You might want to set condition whether or not those key(s) exists in each objects

// Like this:
var data = [{'id' : 10}, {'id' : 11, 'label' : 'Label1', kategori : 'products'}];
var sDataLabel = (data[index].hasOwnProperty('label') === true) ? data[index].label : 'No Label'; // No Label, Label 1
var sDataCategory = (data[index].hasOwnProperty('kategori') === true) ? data[index].kategori : 'No Category'; // No Category, 'products'

When you get those needed values, then you can append the results in your [.resultProduct] DOM

var resName = sDataLabel.toLowerCase();
var resCat = sDataCategory.toLowerCase();
if (resName != '' && data_target === resCat) {
    results += '<li>' + resName + ' - ' + resCat + '</li>';
}

// This should be outside of your $.each method
$('.resultProduct').append(results);

Here's a sample jsfiddle for further reference: http://jsfiddle.net/5wLm4t2n/

Hope this helps for you.

Upvotes: 1

Related Questions