Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.09.2018, 15:06
Аспирант
Отправить личное сообщение для Leon2110 Посмотреть профиль Найти все сообщения от Leon2110
 
Регистрация: 04.07.2016
Сообщений: 76

Как более правильно переписать код?
Есть код, который скрывает и показвает элементы при нажатии на пагинацию. #table_paginate
Так же это же скрытие и показыавание должно происходить при нажатии на еще один блок #select, я не осилил ничего лучше чем вот:

$(document).ready(function(){
	$("#table_paginate").click(function(){
		if ($('#q1').is(':checked')) {
			$('#table td:nth-child(1), #table th:nth-child(1)').show();    
		} else {
			$('#table td:nth-child(1), #table th:nth-child(1)').hide();    
		}
		if ($('#q2').is(':checked')) {
			$('#table td:nth-child(2), #table th:nth-child(2)').show();    
		} else {
			$('#table td:nth-child(2), #table th:nth-child(2)').hide();    
		}
		if ($('#q3').is(':checked')) {
			$('#table td:nth-child(3), #table th:nth-child(3)').show();    
		} else {
			$('#table td:nth-child(3), #table th:nth-child(3)').hide();    
		}
		if ($('#q4').is(':checked')) {
			$('#table td:nth-child(4), #table th:nth-child(4)').show();    
		} else {
			$('#table td:nth-child(4), #table th:nth-child(4)').hide();    
		}
		if ($('#q5').is(':checked')) {
			$('#table td:nth-child(5), #table th:nth-child(5)').show();    
		} else {
			$('#table td:nth-child(5), #table th:nth-child(5)').hide();    
		}
		if ($('#q6').is(':checked')) {
			$('#table td:nth-child(6), #table th:nth-child(6)').show();    
		} else {
			$('#table td:nth-child(6), #table th:nth-child(6)').hide();    
		}
    });	
});	
$(document).ready(function(){
	$("#select").click(function(){
		if ($('#q1').is(':checked')) {
			$('#table td:nth-child(1), #table th:nth-child(1)').show();    
		} else {
			$('#table td:nth-child(1), #table th:nth-child(1)').hide();    
		}
		if ($('#q2').is(':checked')) {
			$('#table td:nth-child(2), #table th:nth-child(2)').show();    
		} else {
			$('#table td:nth-child(2), #table th:nth-child(2)').hide();    
		}
		if ($('#q3').is(':checked')) {
			$('#table td:nth-child(3), #table th:nth-child(3)').show();    
		} else {
			$('#table td:nth-child(3), #table th:nth-child(3)').hide();    
		}
		if ($('#q4').is(':checked')) {
			$('#table td:nth-child(4), #table th:nth-child(4)').show();    
		} else {
			$('#table td:nth-child(4), #table th:nth-child(4)').hide();    
		}
		if ($('#q5').is(':checked')) {
			$('#table td:nth-child(5), #table th:nth-child(5)').show();    
		} else {
			$('#table td:nth-child(5), #table th:nth-child(5)').hide();    
		}
		if ($('#q6').is(':checked')) {
			$('#table td:nth-child(6), #table th:nth-child(6)').show();    
		} else {
			$('#table td:nth-child(6), #table th:nth-child(6)').hide();    
		}
    });	
});

Две функии, которые делают одно и тоже, только меняется селектор при нажатии которого они вызываются. Думаю это можно как-то более компактней сделать? Ну и сама эта конструкция с if else? Код работает.

//выше кода блок с чекбоксами, и если первый чекбокс снят, то скрываем первую колонку таблицы и наоборот:
<form action="" method="get" id="select">   
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q1" checked> Дата документа<span></span></label></div>   
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q2" checked> Номер документа<span></span></label></div>  
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q3" checked> Статус<span></span></label></div>  
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q4" checked> Наименование<span></span></label></div>  
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q5" checked> Категория<span></span></label></div>  
<div class="app-checkbox"><label><input type="checkbox" name="column" id="q6" checked> Дата добавления<span></span></label></div>
</form>

Последний раз редактировалось Leon2110, 19.09.2018 в 15:20.
Ответить с цитированием
  #2 (permalink)  
Старый 19.09.2018, 15:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Leon2110,
достаточно 1 раз ready на страницу и можно убрать все id и заменить на класс и минимальный макет html
Ответить с цитированием
  #3 (permalink)  
Старый 19.09.2018, 15:26
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Leon2110,
можно и так ... ждите
Ответить с цитированием
  #4 (permalink)  
Старый 19.09.2018, 15:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Leon2110,
заменить весь код на это
$(function() {
    var input = $("input:checkbox[id^='q']");
    $("#table_paginate, #select").on("click", function() {
        input.each(function(i, el) {
            i++;
            $("#table td:nth-child(" + i + "), #table th:nth-child(" + i + ")").toggle(el.checked)
        })
    })
});

Последний раз редактировалось рони, 19.09.2018 в 15:40.
Ответить с цитированием
  #5 (permalink)  
Старый 19.09.2018, 15:40
Аспирант
Отправить личное сообщение для Leon2110 Посмотреть профиль Найти все сообщения от Leon2110
 
Регистрация: 04.07.2016
Сообщений: 76

Немного где-то чего-то, в общем получается что
первый чекбокс ничего не делает (должен был скрыть первую колонку)
второй чекбокс скрывает первую колонку (нужно второй)
третий чекбокс скрывает вторую колонку (нужно третию)
Где-то надо +1 сделать.
Ответить с цитированием
  #6 (permalink)  
Старый 19.09.2018, 15:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Leon2110,
скопируйте снова
Ответить с цитированием
  #7 (permalink)  
Старый 19.09.2018, 15:49
Аспирант
Отправить личное сообщение для Leon2110 Посмотреть профиль Найти все сообщения от Leon2110
 
Регистрация: 04.07.2016
Сообщений: 76

Сообщение от рони Посмотреть сообщение
Leon2110,
скопируйте снова
Примного благодарен, идеальное решение, раз в 20 короче и способное расширяться под еще дополнительные чекбоксы и столбцы.
Спасибо, вы лучший.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как правильно обращаться к свойствам объект внутри самого объекта ? mitiya Общие вопросы Javascript 12 25.04.2015 21:18
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
javascript обфускатор или как правильно скрыть код syegorius Общие вопросы Javascript 1 19.09.2012 02:58
Как правильно удалить из шаблона, javascript код? QroxZ Общие вопросы Javascript 0 04.11.2011 17:59
Как правильно очистить maxlength в input? Маэстро Events/DOM/Window 10 22.06.2011 18:14