Pete Winter
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
});
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER