Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2012, 03:27
Новичок на форуме
Отправить личное сообщение для registerers Посмотреть профиль Найти все сообщения от registerers
 
Регистрация: 06.12.2012
Сообщений: 2

помогите с головоломкой, плз!!
всем доброго времени суток! я новичок в данном фреймворке, поэтому не судите строго) подскажите, плз, где я ошибаюсь?

вот работающий пример: http://jsfiddle.net/A9h8c/

Описание траблы: есть два блока-контейнера, в одном вместе с уже имеющимися span'ами могут создаваться создаются другие щелчком по ссылке с a#remove. При удалении исходных span'ов необходимо чтобы их значения атрибута attr передавались в div#container

Я повесил на обработчик события $('#add').click событие $('.remove').click не случайно, т.к. без этого щелчек по ссылке "Удалить" на новом элементе не дает никакого эффекта. Но в другом случае - посмотрите какой бред происходит: если сразу удалить вновь созданный span (attr="new"), то после этого удаление первоначальных span'ов вызывает добавление в div#container значений attr по нескольку раз. Итак вопрос, что я не так сделал?

Код:
<!DOCTYPE html>
<html>
	<head>
		<title>add/remove</title>
		<script type="text/javascript" src="jquery-1.8.2.js"></script>
		<script type="text/javascript">
$(document).ready(function(){
	var item = '<span class="a" attr="new"><a href="#" class="remove">Удалить</a></span>';
	$('.remove').click(function(){
		$(this).parents('span').remove();
		attr = $(this).parents('span').attr('attr');
		if (attr != 'new') $('#container').append('<span>'+attr+'</span>');
	});
	$('#add').click(function(){
		$('#items').append(item);
		$('.remove').click(function(){
			$(this).parents('span').remove();
			attr = $(this).parents('span').attr('attr');
			if (attr != 'new') $('#container').append('<span>'+attr+'</span>');
		});
	});
});
		</script>
		<style type="text/css">
span {display:inline-block; margin:10px;}
#items, #container {border:1px solid black;}
#items span a {
	background:#dff;
}
a#add {
	background:#ffd;
}
#container span {background:#fdf;}
		</style>
	</head>
	<body>
		<div id="items">
			<span class="a" attr="1"><a href="#" class="remove">Удалить</a></span>
			<span class="a" attr="2"><a href="#" class="remove">Удалить</a></span>
			<span class="a" attr="3"><a href="#" class="remove">Удалить</a></span>
		</div>
		<div><a id="add" href="#">Добавить</a></div>
		<div id="container">
		</div>
	</body>
</html>

Последний раз редактировалось registerers, 11.12.2012 в 06:53.
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2012, 04:29
Новичок на форуме
Отправить личное сообщение для registerers Посмотреть профиль Найти все сообщения от registerers
 
Регистрация: 06.12.2012
Сообщений: 2

ура! сам разобрался)) пораскинул мозгами и понял, что объект события же создается несколько раз, значит мое "быстрое решение" не прокатит.. а как же прикрутить обработчик события к append'нутому элементу?

Помогла подсказка, данная тут

т.е. надо юзать live в таких случаях, итак, вуаля:

http://jsfiddle.net/jRzQb/

Код:
<!DOCTYPE html>
<html>
	<head>
		<title>add/remove</title>
		<script type="text/javascript" src="jquery-1.8.2.js"></script>
		<script type="text/javascript">
$(document).ready(function(){
    var item = '<span class="a" attr="new"><a href="#" class="remove">Удалить</a></span>';
    $('.remove').live('click',function(){
        $(this).parents('span').remove();
        attr = $(this).parents('span').attr('attr');
        if (attr != 'new') $('#container').append('<span>'+attr+'</span>');
    });
    $('#add').click(function(){
        $('#items').append(item);
    });
});
		</script>
		<style type="text/css">
span {display:inline-block; margin:10px;}
#items, #container {border:1px solid black;}
#items span a {
	background:#dff;
}
a#add {
	background:#ffd;
}
#container span {background:#fdf;}
		</style>
	</head>
	<body>
		<div id="items">
			<span class="a" attr="1"><a href="#" class="remove">Удалить</a></span>
			<span class="a" attr="2"><a href="#" class="remove">Удалить</a></span>
			<span class="a" attr="3"><a href="#" class="remove">Удалить</a></span>
		</div>
		<div><a id="add" href="#">Добавить</a></div>
		<div id="container">
		</div>
	</body>
</html>


Единственное не пойму смысла матюков в файрбаге, эксперты подскажите что это значит и какие недостатки в моем коде?

Вчастности матюк выглядит так:

You've used the same selector more than once.

Selector: "#items"

You should only use the same selector more than once when you know the returned collection will be different. For example, if you've added more elements to the page that may comply with the selector

Последний раз редактировалось registerers, 11.12.2012 в 06:55.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плз с регуляркой zsaz jQuery 1 25.05.2012 18:41
Выезжающая картинка. помогите плз новичку(( animus Элементы интерфейса 4 22.04.2011 14:31
помогите поправит скрипт плз mirazh38ru Javascript под браузер 1 21.04.2011 15:06
Помогите с отсчетом ПЛЗ! DIALUP Общие вопросы Javascript 3 28.03.2010 01:13
Дописать под страницу помогите плз.. N_L Серверные языки и технологии 2 27.10.2009 15:38