Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как найти щелкнутый элемент в коллекции (https://javascript.ru/forum/events/50844-kak-najjti-shhelknutyjj-ehlement-v-kollekcii.html)

kostyanet 14.10.2014 06:21

Как найти щелкнутый элемент в коллекции
 
Или как вообще это делается?

Например берем с формы только то, что удовлетворяет некоторым условиям и собираем в коллекцию.

var fields={};

for(var i=0; i<form.elements.length;i++)
  
  var elem = form.elements[i];
  
  if(//
  if(//
  if(//

  fields[elem.name]={//some props}

}


Затем общим порядком

form.addEventListener('change', some_func);

где-то выше есть такая функция

var some_func=function(event){
  var elem = event.target;
/*
И вот теперь что мне с этого elem, если я не знаю где он в коллекции, то есть где все его нормализованные props?
*/
};


Поначалу я тупо писал все прямо в атрибуты. Берешь event.target и все при нем.

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

В общем как оно делается в контексте прерываний чтобы получил event.target и все при нем, но не атрибутах. Или это нормально - валить в атрибуты?

kostyanet 14.10.2014 06:24

То есть если я сделаю (в каноничном синтаксисе)

elem.maxlength=(elem.hasAttribute('maxlength'))?parseInt(elem.getAttribute('maxlength'):null;

оно точно останется null, а не "null", и 123, а не "123" применительно к девиациям браузеров?

Кстати JQ идеологически выдержано возвращает по attr() не значение атрибута, а его имя если таковой имеется из тех самых типа boolean. ПравЕльные там поца все пишут.

danik.js 14.10.2014 07:19

Нихера не понял. В чем проблема-то? В том, что код работает не так, как ты его задумал? Но для этого не достаточно просто "задумать" - браузер не читает мысли..
Цитата:

Сообщение от kostyanet
elem.hasAttribute('maxlength')

google "property vs attribute"

Цитата:

Сообщение от kostyanet
Кстати JQ идеологически выдержано возвращает по attr() не значение атрибута, а его имя если таковой имеется из тех самых типа boolean.

google "property vs attribute"

Цитата:

Сообщение от kostyanet
ПравЕльные там поца все пишут

Все несоответствия там по причине бестолковости народа, юзающего эту либу. Если делать все как надо - народ будет ныть что "jQuery не работает". Ну и кое что - ради совместимости.

Что если какой-нибудь погромист вроде тебя напишет if ($el.attr('disabled')) ?
Если честно вернуть пустую строку, то у него возникнет батхерт. Как у тебя сейчас.
Для таких атрибутов важно не его значение, а факт наличия этого атрибута. Поэтому какая разница что в значении? Тем более, юзать надо prop() , а не attr() .

kostyanet 14.10.2014 08:15

Так юзал, он тупо возвращает true/false.

Не в этом дело, вопрос, вроде ясно изложил. Ну напихали вы элементов в коллекцию, то есть рядом с elem:elem лежат его проперти - елемент щелкнули - как их теперь достать?

Короче, есть вот такой пердимонокль: http://www.html5rocks.com/en/tutoria...ustomelements/ однако с первой же картинки я задумалсО - а почему это гугль такую классную штуку не юзает, а городит лес из дивов?

Да потому что это сука извращенное извращение XSL. Лишь бы блеать не развивать эту технологию, на все готовы, только бы не касаться XML.

Ну ладно, вот вы лично как сделали бы? На форме куча элементов (объектов), у них свои атрибуты (которые превращаются в свойства) и как по щелчку найти объект в котором этот самый щелкнутый элемент?

Не обязательно именно так - как вообще оно связывается?

kostyanet 14.10.2014 08:17

Ну то есть я беру данные из атрибутов, пусть так нельзя, я могу их отпостить сразу объектом с сервера в страницу и профтыкать туда елементы - ну х с того?

То есть пока на сам элемент не повесишь функцию - его придется искать по индексам, правильно? UPD, если и повесишь - те же яйца. Пока в атрибуты не профтыкаешь - придется искать.

danik.js 14.10.2014 08:22

У тебя нестандартные атрибуты? Нахера ты парсишь maxlength? Это же стандартный атрибут, он мапится на свойство maxLength

danik.js 14.10.2014 08:24

<elem data-custom-attr="blabla">
<script>
if (elem.dataset.customAttr == 'blabla') { .. }
</script>

kostyanet 14.10.2014 08:29

Цитата:

Сообщение от danik.js
google "property vs attribute"

Нет у елемента пропертей кроме тех, которые запарсены с атрибутов.

А вот в XML имеется дилемма entity vs. attribute или попсово http://www.w3schools.com/dtd/dtd_el_vs_attr.asp

<entity></enity> - сущность которая может быть чем угодно
<entity attr="attribute"/> - глухая сущность с атрибутом

danik.js 14.10.2014 08:30

В ES6 есть WeakMap()
Есть полифил, но хз насколько он "weak"

var fields = new WeakMap();

fields.set(elem, {some: props});

..

var props = fields.get(event.target);

kostyanet 14.10.2014 08:34

Цитата:

Сообщение от danik.js
У тебя нестандартные атрибуты? Нахера ты парсишь maxlength? Это же стандартный атрибут, он мапится на свойство maxLength

Этот стандартный, а required="5" не стандартный.

Да блин какая разница, могу объектом отпостить с сервера - не в этом дело. Дело в том что связь между элементом и его свойствами разрывается если в него не профтыкать эти свойства атрибутами, блеать.

В js-объекте лежит elem и куча пропертей - бестолковая хрень. В elem напихали атрибутов и запарсили - часть браузером, часть сами - нормально. Но что будет с той частью которую сами - она точно не сдохнет в каком-нить православном ИЕ?


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