Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Делегирование (https://javascript.ru/forum/dom-window/51937-delegirovanie.html)

sloyi 26.11.2014 15:21

не не не чуточку меня не понял вот подробнее :)


допустим есть кнопка и див в который мы выводим
<div class='vivod'>Вывести</div>

<div class='all-form'>

</div>


далее с помощью события я вывожу несколько дивов

$(document).ready(function(){
	$('.vivod').click(function (){
		$.post("/netcat/modules/default/tegs-vivod-tovar.php",
						{
						podrazdel:podrazdel
						},
					function(data)
						{
						document.getElementById('all-form').innerHTML = data;
						}
				);
	});


В файле tegs-vivod-tovar.php идет вывод дивов. и вывели мы в див с классом all-form

далее у меня появляються такие дивы

<div class='all-form'>
	<span>1 значение</span>
	<div class='otpravit'>Отправить</div>
	</div>
	 
	<div class='otpravka'>
	<span>2 значение</span>
	<div class='otpravit'>Отправить</div>
	</div>
	 
	<div class='otpravka'>
	<span>3 значение</span>
	<div class='otpravit'>Отправить</div>
        </div>
</div>


теперь мне нужно событие при нажатии на кнопку с классом otpravit

пример:

$('.otpravit').click(function (){
    alert('Привет');
});


но он не работает т.к. при создании страницы данных дивов нет и он не понимает к кому его заставляют обратиться

и как вот справиться мне с данной проблемой

kostyanet 26.11.2014 15:21

Чуваки с SO подсказывают: http://learn.javascript.ru/play/m6Ixl

нулевый елемент делается кроме того disabled и его попросту нельзя выбрать. Еще можно засунуть все в optgroup кстати.

kostyanet 26.11.2014 15:24

Цитата:

Сообщение от sloyi
т.к. при создании страницы данных дивов нет и он не понимает к кому его заставляют обратиться

Ну так вешайте свои вектора когда див появился. После того как. В чем тут проблема-то?

sloyi 26.11.2014 15:25

извени не понял тебя(
куда вешать?

sloyi 26.11.2014 15:28

впринцапе можно сделать вот так

$.post("/netcat/modules/default/tegs-vivod-tovar.php",
						{
						podrazdel:podrazdel
						},
					function(data)
						{
						document.getElementById('all_tovar').innerHTML = data;
                                                $('.otpravit').change(function() {
	                                             alert('Привет');
                                                });
						}
				);


и тогда будет работать. но там будут еще различные события и тогда придеться писать внутри внутри и внутри событий. а так не устраивает((((

kostyanet 26.11.2014 15:33

У вас родительский контейнер существует отродясь или аяксом зарождается?

<div class='all-form'>

на него вешаете обработчик щелчка и затем все что внутри появится будет доступно как я понимаю по event.target.

sloyi 26.11.2014 15:35

да он у меня есть изначально

Цитата:

обработчик щелчка и затем все что внутри появится будет доступно как я понимаю по event.target.
если вам не сложно, можно примерчик маленький.

kostyanet 26.11.2014 15:39

document.getElementById('all_tovar').innerHTML = data;

То есть список как хтмл что ли приходит? Ну зашибись. Ну ищите тогда чудесное преследование, или как там - делегирование в сферического коня.

Сделайте разметку под интерфейс, сделайте родителей, скройте что еще не имеет значения, получайте данные в json, делайте детей родителям и не придется искать пятое колесо зайцу.

То есть каноничный способ только через аякс. Вместо перезагрузок с рендером - подгрузка с рендером.

sloyi 26.11.2014 15:43

:thanks: ладно спасибо большое за помощь попробую как нибудь разобраться;)

kostyanet 26.11.2014 15:44

Кстати, говорят на js есть такая хуерага как ShadowDom. Дом Теней внатури, ну, то есть ob_start().

Цитата:

Сообщение от sloyi
если вам не сложно, можно примерчик маленький.

Не могу сообразить как в песочнице организовать XMLHttpRequest. Можно примерчик маленький? event.target можете прямо сейчас у себя отследить в консоли на любом щелчке.


Часовой пояс GMT +3, время: 03:17.