Link to home
Start Free TrialLog in
Avatar of Pete Winter
Pete WinterFlag for United Kingdom of Great Britain and Northern Ireland

asked on

Reduce JQuery Code Advice

See my JQuery code below. Can you please advise the best way to reduce the amount of duplicate code. You will notice variables are duplicated, but when I move them out of the event functions the process no longer works. I have also adding them in a $.getScript(); function, but this causes a problem too. Any advice appreciated.

function loadtooltip() {
	$('[data-toggle="tooltip"]').tooltip();
}

function getmediafilter(elem) {
	
		if (elem.length > 0) {
			return elem.data("media-filter-value");
		}
	
}

$(document).ready(function() {
		
		$('#ListResults').html('<div class="FirstLoad"><img src="/materials/guide2/images/ajax-loader.gif" width="31" height="31" alt="Loading..."/></div>');
	
		var hash = window.location.hash;
	
		if (hash.substring(0, 6).toLowerCase() == "#page=" && hash.length > 6) {

			var page_hash_num = hash.substring(6);
	
		}
				
	    $.ajax({
          url: 'media_script.php',
		  data: { 
			  page: page_hash_num
		  },
          dataType: 'html',
          type: 'POST',
		  success: function(data) {   
				
        		$( "#ListResults" ).html( data );
			  	
			  	loadtooltip();
				$.getScript("js/media_filter_sorts.js");
				$('.selectpicker').selectpicker();
																	
    		}
			
		 });
	
	
		// Start of page number change
		$('#ListResults').on('click','.pagination a', function(event) {
				event.preventDefault();
			
				var page_num = $(this).attr('rel');
				var items_per_page = $( "#ListResults #items-per-page" ).val();
			
				$('.loadingDiv').show();

				var media_filter_brand_value = getmediafilter($(".media-filter-brand input:checkbox:checked"));
				var media_filter_section_value = getmediafilter($(".media-filter-section input:checkbox:checked"));

				var media_filter_ink_type_values = $(".media-filter-ink_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_media_type_values = $(".media-filter-media_type_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_applications_values = $(".media-filter-media_applications input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_finish_values = $(".media-filter-media_finish input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var name_search = $('#media-search-name input').val();
				var code_search = $('#media-search-code input').val();
						
				$.ajax({
				  url: 'media_script.php',
				  data: { 
					  page: page_num,
					  brand: media_filter_brand_value,
					  section: media_filter_section_value,
					  ink_compat: media_filter_ink_type_values,
					  media_type_compat: media_filter_media_type_values,
					  media_applications: media_filter_applications_values,
					  media_finish: media_filter_finish_values,
					  name_search: name_search,
					  code_search: code_search,
					  items_per_page: items_per_page
				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   

						$( "#ListResults" ).html( data );
					  	$('.loadingDiv').hide();
					  				  
						loadtooltip();
					  	$.getScript("js/media_filter_sorts.js");
					  	$('.selectpicker').selectpicker();
					  
					}

				 });
			
		});
		// End of page number change
	
		// Start of checkbox change
		$('#ListResults').on('change','input[type="checkbox"]', function() {
			
				var page_num = $('.pagination .active a').attr('rel');
				var items_per_page = $( "#ListResults #items-per-page" ).val();
							
				$('.loadingDiv').show();

				var media_filter_brand_value = getmediafilter($(".media-filter-brand input:checkbox:checked"));
				var media_filter_section_value = getmediafilter($(".media-filter-section input:checkbox:checked"));

				var media_filter_ink_type_values = $(".media-filter-ink_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_media_type_values = $(".media-filter-media_type_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_applications_values = $(".media-filter-media_applications input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_finish_values = $(".media-filter-media_finish input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var name_search = $('#media-search-name input').val();
				var code_search = $('#media-search-code input').val();
			
				$.ajax({
				  url: 'media_script.php',
				  data: { 
					  page: page_num,
					  brand: media_filter_brand_value,
					  section: media_filter_section_value,
					  ink_compat: media_filter_ink_type_values,
					  media_type_compat: media_filter_media_type_values,
					  media_applications: media_filter_applications_values,
					  media_finish: media_filter_finish_values,
					  name_search: name_search,
					  code_search: code_search,
					  items_per_page: items_per_page,
					  filterchange: "true"
				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   

						$( "#ListResults" ).html( data );
					  	$('.loadingDiv').hide();
					  	
					  	loadtooltip();
					  	$.getScript("js/media_filter_sorts.js");
					  	$('.selectpicker').selectpicker();
					  
					}

				 });
			
		});
		// End of checkbox change
	
		// Start of name search
		$('#ListResults').on('click','.media-search .media-search-icon', function() {
			
				var page_num = $('.pagination .active a').attr('rel');
				var items_per_page = $( "#ListResults #items-per-page" ).val();
							
				$('.loadingDiv').show();

				var media_filter_brand_value = getmediafilter($(".media-filter-brand input:checkbox:checked"));
				var media_filter_section_value = getmediafilter($(".media-filter-section input:checkbox:checked"));

				var media_filter_ink_type_values = $(".media-filter-ink_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_media_type_values = $(".media-filter-media_type_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_applications_values = $(".media-filter-media_applications input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_finish_values = $(".media-filter-media_finish input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var name_search = $('#media-search-name input').val();
				var code_search = $('#media-search-code input').val();
						
				$.ajax({
				  url: 'media_script.php',
				  data: { 
					  page: page_num,
					  brand: media_filter_brand_value,
					  section: media_filter_section_value,
					  ink_compat: media_filter_ink_type_values,
					  media_type_compat: media_filter_media_type_values,
					  media_applications: media_filter_applications_values,
					  media_finish: media_filter_finish_values,
					  name_search: name_search,
					  code_search: code_search,
					  items_per_page: items_per_page,
					  filterchange: "true"
				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   

						$( "#ListResults" ).html( data );
					  	$('.loadingDiv').hide();
					  	
					  	loadtooltip();
					  	$.getScript("js/media_filter_sorts.js");
					  	$('.selectpicker').selectpicker();
					  
					}

				 });
			
		});
		// End of name search
	
		// Start of reset all filters
		$('#ListResults').on('click','#reset_all_filters', function() {
			
				$('.loadingDiv').show();
			
				$.ajax({
				  url: 'media_script.php',
				  data: { 

				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   

						$( "#ListResults" ).html( data );
					  	$('.loadingDiv').hide();
			  			loadtooltip();
					  	$('.selectpicker').selectpicker();
					  
					}

				 });
			
		});
		// End of reset all filters
	
		/* Start of Media Filter List Search */
		$('#ListResults').on('keyup','.media-search-box', function(){

		var searchTerm = $(this).val().toLowerCase();
		var mediafiltername = $(this).closest(".media-filter").data("media-filter");

			$(this).closest('.media-filter').find('.media-search-list li').each(function(){

				if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
					$(this).show();
				} else {
					$(this).hide();
				}

			});

			if ($(this).closest('.media-filter').find('.media-search-list').children(':visible').length === 0) {
		   // action when all are hidden
				$(this).closest('.media-filter').find('.media-search-list').prepend('<li class="filter-search-blank">No ' + mediafiltername + ' for that search</li>');
			} else {
				$(this).closest('.media-filter').find('.media-search-list .filter-search-blank').remove();
			}

		});

		$('#ListResults').on('click','.media-search-clear', function() {
				$(this).closest('.text-filter-box').find('.media-search-box').val("");
				$(this).closest('.media-filter').find('.media-search-list li').show();
				$(this).closest('.media-filter').find('.media-search-list .filter-search-blank').remove();
		});
		/* End of Media Filter List Search */
	
		// Start of Remember Per Page Cookie
		$('#ListResults').on('change','#items-per-page', function() {
			
				var items_per_page = $( "#ListResults #items-per-page" ).val();
			
				$.ajax({
				  url: 'templates/per_page_cookies.php',
				  data: { 
					  items_per_page: items_per_page
				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   
					  
					}

				 });
				
				
				var page_num = $('.pagination .active a').attr('rel');
				$('.loadingDiv').show();

				var media_filter_brand_value = getmediafilter($(".media-filter-brand input:checkbox:checked"));
				var media_filter_section_value = getmediafilter($(".media-filter-section input:checkbox:checked"));

				var media_filter_ink_type_values = $(".media-filter-ink_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_media_type_values = $(".media-filter-media_type_compat input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_applications_values = $(".media-filter-media_applications input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var media_filter_finish_values = $(".media-filter-media_finish input:checkbox:checked").map(function () {
					return "'" + $(this).data("media-filter-value") + "'";
				}).get();

				var name_search = $('#media-search-name input').val();
				var code_search = $('#media-search-code input').val();
			
				$.ajax({
				  url: 'media_script.php',
				  data: { 
					  page: page_num,
					  brand: media_filter_brand_value,
					  section: media_filter_section_value,
					  ink_compat: media_filter_ink_type_values,
					  media_type_compat: media_filter_media_type_values,
					  media_applications: media_filter_applications_values,
					  media_finish: media_filter_finish_values,
					  name_search: name_search,
					  code_search: code_search,
					  items_per_page: items_per_page,
					  filterchange: "true"
				  },
				  dataType: 'html',
				  type: 'POST',
				  success: function(data) {   

						$( "#ListResults" ).html( data );
					  	$('.loadingDiv').hide();
					  	
					  	loadtooltip();
					  	$.getScript("js/media_filter_sorts.js");
					  	$('.selectpicker').selectpicker();
					  
					}

				 });

		});
		// End of Remember Per Page Cookie
		
});

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of ste5an
ste5an
Flag of Germany image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of Pete Winter

ASKER

Many thanks