Как найти щелкнутый элемент в коллекции
Или как вообще это делается?
Например берем с формы только то, что удовлетворяет некоторым условиям и собираем в коллекцию. 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 и все при нем, но не атрибутах. Или это нормально - валить в атрибуты? |
То есть если я сделаю (в каноничном синтаксисе)
elem.maxlength=(elem.hasAttribute('maxlength'))?parseInt(elem.getAttribute('maxlength'):null; оно точно останется null, а не "null", и 123, а не "123" применительно к девиациям браузеров? Кстати JQ идеологически выдержано возвращает по attr() не значение атрибута, а его имя если таковой имеется из тех самых типа boolean. ПравЕльные там поца все пишут. |
Нихера не понял. В чем проблема-то? В том, что код работает не так, как ты его задумал? Но для этого не достаточно просто "задумать" - браузер не читает мысли..
Цитата:
Цитата:
Цитата:
Что если какой-нибудь погромист вроде тебя напишет if ($el.attr('disabled')) ? Если честно вернуть пустую строку, то у него возникнет батхерт. Как у тебя сейчас. Для таких атрибутов важно не его значение, а факт наличия этого атрибута. Поэтому какая разница что в значении? Тем более, юзать надо prop() , а не attr() . |
Так юзал, он тупо возвращает true/false.
Не в этом дело, вопрос, вроде ясно изложил. Ну напихали вы элементов в коллекцию, то есть рядом с elem:elem лежат его проперти - елемент щелкнули - как их теперь достать? Короче, есть вот такой пердимонокль: http://www.html5rocks.com/en/tutoria...ustomelements/ однако с первой же картинки я задумалсО - а почему это гугль такую классную штуку не юзает, а городит лес из дивов? Да потому что это сука извращенное извращение XSL. Лишь бы блеать не развивать эту технологию, на все готовы, только бы не касаться XML. Ну ладно, вот вы лично как сделали бы? На форме куча элементов (объектов), у них свои атрибуты (которые превращаются в свойства) и как по щелчку найти объект в котором этот самый щелкнутый элемент? Не обязательно именно так - как вообще оно связывается? |
Ну то есть я беру данные из атрибутов, пусть так нельзя, я могу их отпостить сразу объектом с сервера в страницу и профтыкать туда елементы - ну х с того?
То есть пока на сам элемент не повесишь функцию - его придется искать по индексам, правильно? UPD, если и повесишь - те же яйца. Пока в атрибуты не профтыкаешь - придется искать. |
У тебя нестандартные атрибуты? Нахера ты парсишь maxlength? Это же стандартный атрибут, он мапится на свойство maxLength
|
<elem data-custom-attr="blabla"> <script> if (elem.dataset.customAttr == 'blabla') { .. } </script> |
Цитата:
А вот в XML имеется дилемма entity vs. attribute или попсово http://www.w3schools.com/dtd/dtd_el_vs_attr.asp <entity></enity> - сущность которая может быть чем угодно <entity attr="attribute"/> - глухая сущность с атрибутом |
В ES6 есть WeakMap()
Есть полифил, но хз насколько он "weak" var fields = new WeakMap(); fields.set(elem, {some: props}); .. var props = fields.get(event.target); |
Цитата:
Да блин какая разница, могу объектом отпостить с сервера - не в этом дело. Дело в том что связь между элементом и его свойствами разрывается если в него не профтыкать эти свойства атрибутами, блеать. В js-объекте лежит elem и куча пропертей - бестолковая хрень. В elem напихали атрибутов и запарсили - часть браузером, часть сами - нормально. Но что будет с той частью которую сами - она точно не сдохнет в каком-нить православном ИЕ? |
Вот если наоборот - сделать свой event на этот js-объект... но я как-то вообще не представляю как он сгорит в интерфейсе браузера.
|
Цитата:
<input type="text" required="" pattern=".{5,100}"> |
Цитата:
В идеале тут WeakMap нужен. |
По правилам XML required="required" что эквипенисуально <required></required>
pattern уже занят и кроме того есть атрибуты типа multiple="3". Обозначает максимум чего можно замультить, например количество файлов или там количество тыков в select-multiple, что угодно. Так убивается стая зайцев: required="3" определяет необходимый минимум, а multiple="3" ограничивает возможный максимум. <input type="file" required="1" multiple="3"/> Надо закачать минимум 1 файл но не больше 3 всего. Multiple еще могут быть поля email и кажется tel. Я не проверял как они в таком формате уходят на сервер и надо ли добавлять [] в конец им. Так вот именно для файлов не хватает атрибутов. В pattern'е проверка на тип, в maxlength на размер (в Кб), а для пикселяжа надо еще городить. Я пока забил. Смысл возни в том что я хотел сделать уже нормальный объект который бы наследовался от своего метода и все. Но там в шапке объекта получается у всех будет проверка - есть имя, или нет, ивент или елем, потом найти по имени чтобы взять проперти... Не получается по-отдельности. Торчит 1 функция на всех которая тупо роутит проверки по типу поля примерно так methods['validate_'+elem.type]; Вообще да, интересная кухня, у textarea с select'ами никакого type нет в помине, однакож парсер усЁрдно все проверяет по таблице типа как у меня is_input() в php и втыкает проперть type. Колхоз. |
ивент или елем - валидация прогоняется неслышно чтоб все необходимые поля пометить. В функцию может прийти елемент если ее вызываешь из кода, или event если по событию. При этом this тоже плавает...
Получается так, чтобы забиндить свой объект в дом на событие надо сделать из него элемент, какой-то x-form ... несусветные методы ради какого-то гавна - бессмысленной валидации на клиенте. |
Часовой пояс GMT +3, время: 17:03. |