Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.11.2017, 18:08
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от Nexus
Можете объяснить зачем вообще нужен массив созданных элементов?
Зачем при клике на data-id=1 удалять data-id=13 и наоборот?
Вот такой алгоритм придумал SergoMorello.
При клике на 1 добавляется 13 как зависимость к 1, как я понял. При повторном клике две картинки под этими айдишниками удаляются, и массив соответственно.
Ответить с цитированием
  #12 (permalink)  
Старый 02.11.2017, 18:17
Интересующийся
Отправить личное сообщение для SergoMorello Посмотреть профиль Найти все сообщения от SergoMorello
 
Регистрация: 06.05.2011
Сообщений: 21

Сообщение от Rasy Посмотреть сообщение
Вот такой алгоритм придумал SergoMorello.
При клике на 1 добавляется 13 как зависимость к 1, как я понял. При повторном клике две картинки под этими айдишниками удаляются, и массив соответственно.
да, так и есть, по другому я не могу представить как это можно сделать, надо дать возможность юзеру выделять и снимать выделение)

а по поводу моей проблемы, я видимо тупой, несколько раз перечитал ваш ответ, ну никак не могу понять почему условие if (obj==13) {set_car_obj(1,0);} не удалит 1 айди, ну реально, вот чувствую что истина гдето рядом но никак не могу её увидеть, да и к тому же на сторонней функции поиска по массиву почему всё работает тогда?
Ответить с цитированием
  #13 (permalink)  
Старый 02.11.2017, 18:29
Интересующийся
Отправить личное сообщение для SergoMorello Посмотреть профиль Найти все сообщения от SergoMorello
 
Регистрация: 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);
}
большое спасибо, ваша функция отлично работает, и занимает значительно меньше места
Ответить с цитированием
  #14 (permalink)  
Старый 02.11.2017, 18:32
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от SergoMorello
if (obj==13) {set_car_obj(1,0);}
Пересмотрел. Да, должен удалиться сразу элемент со значением 13, а потом элемент со значением 1.
Ответить с цитированием
  #15 (permalink)  
Старый 02.11.2017, 18:51
Интересующийся
Отправить личное сообщение для SergoMorello Посмотреть профиль Найти все сообщения от SergoMorello
 
Регистрация: 06.05.2011
Сообщений: 21

Сообщение от Rasy Посмотреть сообщение
Пересмотрел. Да, должен удалиться сразу элемент со значением 13, а потом элемент со значением 1.
да должен но почему то не удаляется, после нажатия на 1 обьект и появления картинок в массиве видим [1,13], нажатие на обьект 13 приводит к тому что в массив добавляются ещё раз 13,1 и получается [1,13,13,1] ну и картинки по верх предыдущих накладываются, повторное нажатие на обьект 13 приводит к удалению 13,1 и в массиве остаётся [1,13] ну и чтобы удалить надо опять нажать на 1 обьект, короче говоря чудеса какие то, к тому же как я уже сказал ранее со сторонне й функцией поиска по массиву всё сразу же заработало как надо.

Ладно, огромное спс за помощь вам и Nexus, конечно хотелось бы разобраться но чувствую не получится
Ответить с цитированием
  #16 (permalink)  
Старый 02.11.2017, 18:58
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от SergoMorello
конечно хотелось бы разобраться но чувствую не получится
Я бы и сам написал быстрее другую реализацию, но интересно было разобраться в чем проблема. А проблема оказалась элементарная.
Написал html чтобы разобраться. В первом аргументе передается строка, а не число, поэтому проблемы с индексацией.

В строку 13 нужно добавить
obj = +obj

var arr = ["13", 1];
alert(arr.indexOf(13));
Ответить с цитированием
  #17 (permalink)  
Старый 02.11.2017, 19:29
Интересующийся
Отправить личное сообщение для SergoMorello Посмотреть профиль Найти все сообщения от SergoMorello
 
Регистрация: 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);}
Ответить с цитированием
  #18 (permalink)  
Старый 02.11.2017, 19:50
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 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". Поэтому добавляются две новые картинки, а не удаляются. Вот третий клик уже находит элементы в массиве и удаляет две последние картинки.

Когда кликаем при первом вызове передается строка из атрибута, а не число. Второй вызов передает всегда число.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Налажал гдето в коде и не могу понять где. злобная_пипа jQuery 4 24.10.2015 16:31
Люди не могу понять Virby Общие вопросы Javascript 0 08.10.2015 18:15
Помогите пожалуйста не могу вывести информацию из mysql Геворг Серверные языки и технологии 4 01.03.2011 20:24
Помогите не могу справится... Prostenikii Работа 2 18.02.2011 10:46
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22