02.11.2017, 18:08
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
Сообщение от Nexus
|
Можете объяснить зачем вообще нужен массив созданных элементов?
Зачем при клике на data-id=1 удалять data-id=13 и наоборот?
|
Вот такой алгоритм придумал SergoMorello.
При клике на 1 добавляется 13 как зависимость к 1, как я понял. При повторном клике две картинки под этими айдишниками удаляются, и массив соответственно.
|
|
02.11.2017, 18:17
|
Интересующийся
|
|
Регистрация: 06.05.2011
Сообщений: 21
|
|
Сообщение от Rasy
|
Вот такой алгоритм придумал SergoMorello.
При клике на 1 добавляется 13 как зависимость к 1, как я понял. При повторном клике две картинки под этими айдишниками удаляются, и массив соответственно.
|
да, так и есть, по другому я не могу представить как это можно сделать, надо дать возможность юзеру выделять и снимать выделение)
а по поводу моей проблемы, я видимо тупой, несколько раз перечитал ваш ответ, ну никак не могу понять почему условие if (obj==13) {set_car_obj(1,0);} не удалит 1 айди, ну реально, вот чувствую что истина гдето рядом но никак не могу её увидеть, да и к тому же на сторонней функции поиска по массиву почему всё работает тогда?
|
|
02.11.2017, 18:29
|
Интересующийся
|
|
Регистрация: 06.05.2011
Сообщений: 21
|
|
Сообщение от Nexus
|
Попробуйте так:
var imgs={//Список данных изображений
1:{
src:'p_bamper_l.png',
left:5,
top:46
},
2:{
src:'p_krilo_l.png',
left:21,
top:38
}
};
$("div#set_obj").on("click",function(e){
set_car_obj($(this).attr("obj_id"),1);
});
function set_car_obj(id, type){
var node=document.getElementById('objimg_'+id);
if(!!node)
$(node).remove();
else{
if(!imgs[id])
throw new Error('Element not found');
var item=imgs[id];
$('<img/>').attr({
src:'/img/zak_book/'+item.src,
id:'objimg_'+id
}).css({
'z-index':79,
'position':'absolute',
'margin-left':item.left,
'margin-top':item.top
}).appendTo('#objblock');
}
if (type!=1)
return;
if(id==1 || id==13)
set_car_obj(id==1?13:1,0);
else if(id==6 || id==8)
set_car_obj(id==6?8:6,0);
}
|
большое спасибо, ваша функция отлично работает, и занимает значительно меньше места
|
|
02.11.2017, 18:32
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
Сообщение от SergoMorello
|
if (obj==13) {set_car_obj(1,0);}
|
Пересмотрел. Да, должен удалиться сразу элемент со значением 13, а потом элемент со значением 1.
|
|
02.11.2017, 18:51
|
Интересующийся
|
|
Регистрация: 06.05.2011
Сообщений: 21
|
|
Сообщение от Rasy
|
Пересмотрел. Да, должен удалиться сразу элемент со значением 13, а потом элемент со значением 1.
|
да должен но почему то не удаляется, после нажатия на 1 обьект и появления картинок в массиве видим [1,13], нажатие на обьект 13 приводит к тому что в массив добавляются ещё раз 13,1 и получается [1,13,13,1] ну и картинки по верх предыдущих накладываются, повторное нажатие на обьект 13 приводит к удалению 13,1 и в массиве остаётся [1,13] ну и чтобы удалить надо опять нажать на 1 обьект, короче говоря чудеса какие то, к тому же как я уже сказал ранее со сторонне й функцией поиска по массиву всё сразу же заработало как надо.
Ладно, огромное спс за помощь вам и Nexus, конечно хотелось бы разобраться но чувствую не получится
|
|
02.11.2017, 18:58
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
Сообщение от SergoMorello
|
конечно хотелось бы разобраться но чувствую не получится
|
Я бы и сам написал быстрее другую реализацию, но интересно было разобраться в чем проблема. А проблема оказалась элементарная.
Написал html чтобы разобраться. В первом аргументе передается строка, а не число, поэтому проблемы с индексацией.
В строку 13 нужно добавить
obj = +obj
var arr = ["13", 1];
alert(arr.indexOf(13));
|
|
02.11.2017, 19:29
|
Интересующийся
|
|
Регистрация: 06.05.2011
Сообщений: 21
|
|
Сообщение от Rasy
|
Я бы и сам написал быстрее другую реализацию, но интересно было разобраться в чем проблема. А проблема оказалась элементарная.
Написал html чтобы разобраться. В первом аргументе передается строка, а не число, поэтому проблемы с индексацией.
В строку 13 нужно добавить
obj = +obj
var arr = ["13", 1];
alert(arr.indexOf(13));
|
вау, действительно, работает! Но интересно почему это происходило, почучается когда эти условия с зависимостями срабатывали они вместо числа в функцию передавали строку, но указано же конкретно число, кавычек никаких нет, если бы было написано так set_car_obj("13",0); то тут понятно 13 передаётся строкой, ещё одна загадка?)
if (obj==1) {set_car_obj(13,0);}
if (obj==13) {set_car_obj(1,0);}
|
|
02.11.2017, 19:50
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
Сообщение от SergoMorello
|
ещё одна загадка
|
К счастью нет
Клик на 1. Передаем в функции строку 1, потом второй вызов функции с числом 13.
Массив ["1", 13];
Второй клик на 1. Cнова передаем строку 1, удаляем "1" из массива, потом программа передает 13 и удаляет число 13.
При клике на 13 аналогично, только наоборот ["13", 1].
Если кликнуть на 1, потом на 13 получим массив - ["1", 13, "13", 1].
Т.е теперь при клике на 13 передается строка "13" а в массиве число 13, повторный вызов функции передает число один а в массиве строка "1". Поэтому добавляются две новые картинки, а не удаляются. Вот третий клик уже находит элементы в массиве и удаляет две последние картинки.
Когда кликаем при первом вызове передается строка из атрибута, а не число. Второй вызов передает всегда число.
|
|
|
|