Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Все действия относительно одного блока

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Test11
Отправлено: 15 Марта, 2016 - 15:26:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




Есть два блока, их поочередно добавляем в дом документ.
У этих самых блоков есть схожие id, так вот

Как при добавлении блока присвоить что та, чтобы при клике на элемент в блоке определялся в каком блоке этот самый элемент...

Сейчас присваиваю к id идентификатор, хотелось бы избавится от него...
 
 Top
IllusionMH
Отправлено: 15 Марта, 2016 - 16:04:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Test11, почитайте про "делегация событий в JS"
 
 Top
Test11
Отправлено: 15 Марта, 2016 - 17:47:39
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




У меня в принципе так и сделано, я не совсем об этом...

CODE (javascript):
скопировать код в буфер обмена
  1. document.body.insertAdjacentHTML('beforeBegin', '<div id="id">Первый блок</div>');
  2. document.body.insertAdjacentHTML('beforeBegin', '<div id="id">Второй блок</div>');


Добавили два блока с одинаковыми id, мне необходимо распознать в каком блоке был произведет клик по внутреннему элемену. И так далее работать с этим блока не трогая второй...

Сейчас я присваиваю уникальный{id} в начало атрибута id. Хочу его убрать, но как распознать, как работать относительно конкретного блока. Не совсем понимаю...

(Отредактировано автором: 15 Марта, 2016 - 17:48:39)

 
 Top
IllusionMH
Отправлено: 15 Марта, 2016 - 20:25:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Test11 пишет:
Добавили два блока с одинаковыми id

Дальше мысль можно не продолжать. Нельзя делать 2 уникальных ID и ожидать что это будет работать с JS.

Хочется одинаковые - используйте классы (стиль и просто событие навесить) или data-* атрибуты (для хранения информации).
Как я уже и наванговал выше - читайте про "делегирвоание событий". Коротко - обработчик вешается на одного из общих предков и в обработчики события проверяется элемент из event.target.
Когда есть элемент - вытащить данные это не проблема.

Если тяжело с Vanilla JS, посмотрите в сторону jQuery и и метода .on

(Отредактировано автором: 15 Марта, 2016 - 20:26:54)

 
 Top
Test11
Отправлено: 16 Марта, 2016 - 11:36:41
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




CODE (html):
скопировать код в буфер обмена
  1. <div class="block">
  2.     <div class="click">тыц</div>
  3.         <div class="inner"></div>
  4. </div>
  5.  
  6. <div class="block">
  7.     <div class="click">тыц</div>
  8.         <div class="inner"></div>
  9. </div>
  10.  
  11. <script type="text/javascript">
  12.     document.body.onclick = function(e){
  13.                 e.target.getElementsByClassName('inner').innerHTML = 'Вставляем текст';
  14.     };
  15. </script>


Как сделать так, чтобы при клике на элемент расположенный в первом блоке, текст добавился inner первого блока...
(Добавление)
Количество родительских блоков неизвестно
....
 
 Top
IllusionMH
Отправлено: 16 Марта, 2016 - 12:25:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Test11, интересно вы "массиву" DOM элементов присваиваете innerHTML.
А еще target элемент это тот по которому вы кликаете, т.е. скорее всего
CODE (html):
скопировать код в буфер обмена
  1. <div class="click">тыц</div>

нужный вам еще найти необходимо

первая ссылка по поисковому запросу который я показал выше
http://learn[dot]javascript[dot]ru/event-delegation
 
 Top
Test11
Отправлено: 16 Марта, 2016 - 14:25:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




Там с использованием цикла, перебираем на родителя выше. Без цикла не получится, так чтобы сразу?
(Добавление)
Если каждый из блоков сначала добавим в dom, можно ли что нибудь сообразить с этим?
 
 Top
IllusionMH
Отправлено: 16 Марта, 2016 - 16:26:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




IllusionMH пишет:
Если тяжело с Vanilla JS, посмотрите в сторону jQuery и и метода .on
 
 Top
Test11
Отправлено: 16 Марта, 2016 - 20:25:09
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




Да это понятно, что через цикл перебираемся выше на блок. С этим понятно все...

Тут вот еще что, при добавлении блока в дом. В этом самом блоке имеется cхожий id или если хотите класс.

Так вот, добавил два блока на страницу. Теперь необходимо добавить свой текст в данные блоки id которы классы схожу. Тут без клика, как быть?
 
 Top
IllusionMH
Отправлено: 16 Марта, 2016 - 20:59:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Test11, не понял вопроса. При правильном делегирование пока вы кликаете внутри блока с обработчиком - будет работать на любых блоках - существующих или добавленных позже.
Или что нужно сделать?
 
 Top
Test11
Отправлено: 17 Марта, 2016 - 07:06:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




После того как добавили 2 блока из js, в этих самых блоках есть схожие элементы с схожими классами или id. Так вот, в эти элементы необходимо добавить контент отличительный руг от друга, без кликов.

На сколько я понимаю, вышепредложенный способ. Перебирается по родителям от места щелчка и работает с конкретным блоком....

Сейчас же необходимо без щелчка заменить элемент в блоке после того как добавили два блока...
 
 Top
IllusionMH
Отправлено: 17 Марта, 2016 - 12:35:48
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Test11, получить все элементы по классу или селектороу (querySelectorAll), и потом в цикле перебирать их и по условию известному только вам решать какой контент добавить.
 
 Top
kuller
Отправлено: 17 Марта, 2016 - 15:12:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




Test11 пишет:
Как сделать так, чтобы при клике на элемент расположенный в первом блоке, текст добавился inner первого блока...
(Добавление)
Количество родительских блоков неизвестно


А не проще все таки уникальный class сделать? блоки же наверно в цикле формируются?
дак вот сделать счетчик количества записей, и каждому уже class добавлять число.

PHP:
скопировать код в буфер обмена
  1.  
  2. $i = 0;
  3. while()
  4. {
  5. echo '<div class="click-".$i>тыц</div>';
  6.  
  7. $i++;
  8. }
  9.  

потом уже через js делай что хочешь.
если же нельзя менять class тогда создай уникальный id. вообще не вижу смысла мудрить здесь что та.
 
 Top
Test11
Отправлено: 17 Марта, 2016 - 15:32:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 196
Дата рег-ции: Дек. 2015  


Помог: 0 раз(а)




Сейчас именно так и сделано)

Блин ну ведь наверное можно как нибудь запомнить данный блок при добавлении в дом, и далее работать с ним. Без уникальных айдишников...
 
 Top
kuller
Отправлено: 17 Марта, 2016 - 17:38:40
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 561
Дата рег-ции: Нояб. 2009  


Помог: 2 раз(а)




Test11 пишет:
Сейчас именно так и сделано)

Блин ну ведь наверное можно как нибудь запомнить данный блок при добавлении в дом, и далее работать с ним. Без уникальных айдишников...


посмотри http://javascript[dot]ru/tutorial/dom/search

зачем все усложнять если в этом нет необходимости?

(Отредактировано автором: 17 Марта, 2016 - 17:40:07)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB