09.11.2016, 21:37
|
Новичок на форуме
|
|
Регистрация: 08.11.2016
Сообщений: 3
|
|
Сократить код.
Приветствую! При помощи библиотеки "jQuery maphilight" написал скрипт, который при клике на определенный чекбокс подсвечивает область на схеме и выделяет определенным стилем строку в таблице с описанием данной области. Код получился однотипный, но я не пойму как его сократить. Буду рад любой помощи.
$(function() {
$('.map').maphilight({
fillColor: '008800'
});
$("#check1").click(function(e) {
var row = $(this).parent().parent();
var id = row.attr("id");
var data = $("#lot").mouseout().data('maphilight') || {};
data.alwaysOn = !data.alwaysOn;
if (this.checked) {
row.addClass("selected");
$("#lot").data('maphilight', data).trigger('alwaysOn.maphilight');
} else {
row.removeClass("selected");
$("#lot").data('maphilight', data).trigger('alwaysOn.maphilight');
}
});
$("#check2").click(function(e) {
var row = $(this).parent().parent();
var id = row.attr("id");
var data = $("#lot1").mouseout().data('maphilight') || {};
data.alwaysOn = !data.alwaysOn;
if (this.checked) {
row.addClass("selected");
$("#lot1").data('maphilight', data).trigger('alwaysOn.maphilight');
} else {
row.removeClass("selected");
$("#lot1").data('maphilight', data).trigger('alwaysOn.maphilight');
}
});
$("#check3").click(function(e) {
var row = $(this).parent().parent();
var id = row.attr("id");
var data = $("#lot2").mouseout().data('maphilight') || {};
data.alwaysOn = !data.alwaysOn;
if (this.checked) {
row.addClass("selected");
$("#lot2").data('maphilight', data).trigger('alwaysOn.maphilight');
} else {
row.removeClass("selected");
$("#lot2").data('maphilight', data).trigger('alwaysOn.maphilight');
}
});
$("#check4").click(function(e) {
var row = $(this).parent().parent();
var id = row.attr("id");
var data = $("#lot3").mouseout().data('maphilight') || {};
data.alwaysOn = !data.alwaysOn;
if (this.checked) {
row.addClass("selected");
$("#lot3").data('maphilight', data).trigger('alwaysOn.maphilight');
} else {
row.removeClass("selected");
$("#lot3").data('maphilight', data).trigger('alwaysOn.maphilight');
}
});
});
|
|
09.11.2016, 21:59
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,127
|
|
Marius90,
макет бы минимальный, а так можно тригер из условия вынести, перед или после условия поставить, значения не имеет.
|
|
09.11.2016, 22:14
|
Аспирант
|
|
Регистрация: 31.08.2016
Сообщений: 49
|
|
$(function() {
$('.map').maphilight({
fillColor: '008800'
});
var list = {"#lot":"#check1","#lot1":"check2",...};
for(var key in list){
$(list.key).click(function(e) {
...
$(key).data('maphilight', data)...
};
});
как-то так имхо
|
|
09.11.2016, 22:25
|
Новичок на форуме
|
|
Регистрация: 08.11.2016
Сообщений: 3
|
|
Полный скрипт в архиве. Спс за предложенные методы решения, буду пробовать.
|
|
09.11.2016, 23:08
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,127
|
|
Marius90,
$(function() {
$(".map").maphilight({
fillColor: "008800"
});
var d = $("map area");
$("#areas tbody tr").each(function(e, b) {
var c = d.eq(e),
a = c.data("maphilight") || {};
$('input[type="checkbox"]', b).on("click", function() {
a.alwaysOn = !a.alwaysOn;
$(b).toggleClass("selected", a.alwaysOn);
c.data("maphilight", a).trigger("alwaysOn.maphilight")
})
})
});
|
|
09.11.2016, 23:13
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
рони, называй, пожалуйста, переменные говорящими именами. До одной буквы их прекрасно сократит минификатор.)
__________________
29375, 35
|
|
09.11.2016, 23:15
|
Новичок на форуме
|
|
Регистрация: 08.11.2016
Сообщений: 3
|
|
Сообщение от рони
|
Marius90,
$(function() {
$(".map").maphilight({
fillColor: "008800"
});
var d = $("map area");
$("#areas tbody tr").each(function(e, b) {
var c = d.eq(e),
a = c.data("maphilight") || {};
$('input[type="checkbox"]', b).on("click", function() {
a.alwaysOn = !a.alwaysOn;
$(b).toggleClass("selected", a.alwaysOn);
c.data("maphilight", a).trigger("alwaysOn.maphilight")
})
})
});
|
спс большое, все работает)
|
|
09.11.2016, 23:22
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,127
|
|
Aetae,
$(function() {
$(".map").maphilight({
fillColor: "008800"
});
var areas = $("map area");
$("#areas tbody tr").each(function(indx, tr) {
var area = areas.eq(indx),
data = area.data("maphilight") || {};
$('input[type="checkbox"]', tr).on("click", function() {
data.alwaysOn = !data.alwaysOn;
$(tr).toggleClass("selected", data.alwaysOn);
area.data("maphilight", data).trigger("alwaysOn.maphilight")
})
})
});
|
|
09.11.2016, 23:24
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,590
|
|
рони, дык это не для меня же, а для тех кому отвечаешь.)
__________________
29375, 35
|
|
09.11.2016, 23:25
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,127
|
|
Aetae,
ок.
|
|
|
|