Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.09.2016, 12:15
Новичок на форуме
Отправить личное сообщение для Albionix Посмотреть профиль Найти все сообщения от Albionix
 
Регистрация: 09.09.2016
Сообщений: 9

Да кодом выше. Только такое поведение наблюдается у прописанных заранее элемнгтов. У созданных кнопки вообще не работают
Ответить с цитированием
  #12 (permalink)  
Старый 10.09.2016, 13:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если структура кода кнопок и поля ими обслуживающего такова:

<div class="korpus">
    <label><input name="city_id" type="radio" value="6600001500000"> Новоуральск</label>
    <label><input name="city_id" type="radio" value="6600002300000"> Н. Тагил</label>
    <label><input name="city_id" type="radio" value="6600000100000"> Екатеринбург</label>
</div>
<div class="box">
    <input type="text" name="city[]" placeholder="Город">
</div>


то код обработчика (собственно как и все обработчики иные) лучше сделать через делегирование. В примере для этих кнопок делегируется BODY, но если все динамически вставляемые элементы имеют общего ближайшего родителя присутствующего в документе, например форма, то лучше ему:

$('body').on('change', 'div.korpus input', function() {
        $(this).closest('.korpus').next().find('input').val(this.value)
     });


В этом случае добавляемые динамически элементы будут обрабатываться. Единственно что не понятно вот с этим:

<script>$('[name="city2"]').kladr({type: $.kladr.type.city});</script>

Это также вставляется в документ динамически? А нужно после добавления div.box найти в нем input и подключить kladr:

(вставляемый код).appendTo(selector).find('input').kladr({type: $.kladr.type.city});


Я удалил id у меток, кнопок и поля, вполне можно обойтись и без них. У добавляемых радио кнопок (группы из трех) имена должны отличать от имен других групп.
Поле ввода именовано так как я писал ранее. Как могут у сервера не закипеть мозги, если ему прислать ключи city1, city2, city3, ... cityN? Это же просто очень не удобно для обработки.

Последний раз редактировалось laimas, 10.09.2016 в 13:56.
Ответить с цитированием
  #13 (permalink)  
Старый 10.09.2016, 20:20
Новичок на форуме
Отправить личное сообщение для Albionix Посмотреть профиль Найти все сообщения от Albionix
 
Регистрация: 09.09.2016
Сообщений: 9

Огромное спасибо за помощь, все в принципе заработало. Единственно, еще 2 диллетантских вопроса напоследок. У меня функции обработки клика по полю завязаны на id label'a как быть в случае city_id[] b city[]....

и второе как в скрипт добавления вставить еще скрипт...?? Из-за закрывающего тега скрипт не работает ( пробовал разбивать на ск+рипт все равно ен взлетает (
Ответить с цитированием
  #14 (permalink)  
Старый 11.09.2016, 05:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Albionix
все в принципе заработало
Если заработало, это хорошо, хотя у меня после показа кода о кнопках есть чувство, что я не правильно представлял задачу и советовал не то. Ну да ладно.

Сообщение от Albionix
У меня функции обработки клика по полю завязаны на id label'a как быть в случае city_id[] b city[]....
Связать метку с полем можно не обязательно по id посредством for, можно и обернуть меткой связанный с ней элемент, как я и сделал. Если по каким-то причинам удобен обработчик не по полю, а именно по метке, то обратиться к полю в обработчике, это сослаться на ее дочерний элемент. Если элемент обернут меткой так:

<label><input name="a" /></label>

то есть первым дочерним элементом label будет обязательно поле ввода, то это так:

$('label').click(function() {
    //для примера получили имя поля           
    console.log(this.childNodes[0].name)
})


Если же <label>текст к полю <input /></label>, то средствами JS нужно получить не текстовый узел. Но в среде JQ это описать легко. В общем в данном случае большой надобности применения id тоже нет. Тем более, что в представленном ранее коде что-то не видно, чтобы <input type="text" name="city2" placeholder="Город"> был обернут в метку. Код обращение к нему из обработчика щелчков по радио кнопкам без всяких id я показал. Не зная о каких еще метках речь и причем тут имя поля, я ничего не могу сказать.

Именно потому, что динамическое добавление полей, я бы сразу отказался от id - следить за этим, усложнять код связями, это не выгодно. Также не выгодно именовать поля как city1, city2, ... На сервере придется работать либо с каждым из полей (ключом) индивидуально, при этом зная размерность массива, либо отбрасывать ключи, получать значения, связывать их так, чтобы не допустить ошибки. Это еще более не выгодно, чем чехарда на клиенте, ибо индивидуальность будет предполагать и отдельную запись в базу каждого поля, а этого крайне не желательно делать.

Было предположение, что запросы к КЛАДР для того, чтобы получить адресные данные и пополнить ими свою базу. Но радио кнопки "Новоуральск", "Н. Тагил", "Екатеринбург" никак не вяжутся с таким предположением. Во первых странностью, во-вторых сохранением идентификаторов типа 6600000100000. КЛАДР, это DBF база, идентификаторы ее есть строки, а связь записей определяется частью этой строки. Если нужно просто "сграбить" себе, то лучше связать у себя в базе ключами используемой базы данных, а не DBF ключами.

Но если решается какая-то иная задача и требуется сохранять city_id как связанное со своим полем sity, то нужно опять таки использовать не id приклеенное к имени поля, а связать именование этих полей под одним ключом или индексом. Можно поступить так - связывать по ключу равному меткам текущего времени (исходим из того, что id это морока и следить за ними не хотим). При этом имеющиеся поля получают метку времени от сервера равную time() (в случае РНР). В примере это первая группа полей формы. А при добавлении полей они будут получать метку клиента, как new Date().getTime(). В примере вторая группа полей. Именование полей в итоге будет таким:

<label><input name="addr[1473561296][id]" type="radio" value="6600001500000"> Новоуральск</label>
<label><input name="addr[1473561296][id]" type="radio" value="6600002300000"> Н. Тагил</label>
<label><input name="addr[1473561296][id]" type="radio" value="6600000100000"> Екатеринбург</label>
<input type="text" name="addr[1473561296][city]" placeholder="Город">
<input type="text" name="addr[1473561296][street]" placeholder="Улица">

<label><input name="addr[1473561207070][id]" type="radio" value="7600001500000"> Город 1</label>
<label><input name="addr[1473561207070][id]" type="radio" value="7600002300000"> Город 2</label>
<label><input name="addr[1473561207070][id]" type="radio" value="7600000100000"> Город 3</label>
<input type="text" name="addr[1473561207070][city]" placeholder="Город">
<input type="text" name="addr[1473561207070][street]" placeholder="Улица">


Если отправить форму на сервер, то сервер получить связанные по меткам времени данные под ключом addr. Получив содержимое этого массива получим:

Код:
Array
(
    [1473561296] => Array
        (
            [id] => 6600001500000
            [city] => aaaa
            [street] => bbbb
        )

    [1473561207070] => Array
        (
            [id] => 7600002300000
            [city] => cccc
            [street] => dddd
        )

)
При дальнейшей обработке этого массива ключи заданные метками времени нас совсем не интересуют. Главное - это каждый вложенный массив описывает все данные каждого индивидуального объекта. Обработка же этого массива будет очень проста как для формирование запроса многострочной записи в базу, так и для получения отдельных компонент, если это требуется.

С ключами же sity_id1, sity_id2, ..., sity1, sity2, ..., так "бескровно" работать с массивом уже не получится.

Сообщение от Albionix
как в скрипт добавления вставить еще скрипт
Какой скрипт и зачем?

Последний раз редактировалось laimas, 11.09.2016 в 06:09.
Ответить с цитированием
  #15 (permalink)  
Старый 11.09.2016, 06:41
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от Albionix
ак в скрипт добавления вставить еще скрипт...?
Ответить с цитированием
  #16 (permalink)  
Старый 11.09.2016, 07:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

warren buffet,
ты так любишь слово "говнокод", скорее потому, что сам состоишь из первого слагаемого этого слова. И тому есть доказательства:

это первое - форма обратной связи

это второе упоминание этой ахинени выдаваемой тобой за гениальность - if упростить

Только за то, что ты опустил понятие Array ниже плинтуса, тебя убить и то мало. А ты тут еще рассуждаешь о качестве кода. Кодер хренов, тупой как валенок. И приклей эту тупую картинку себе на лоб.
Ответить с цитированием
  #17 (permalink)  
Старый 11.09.2016, 07:05
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от laimas
приклей эту тупую картинку себе на лоб.
Тогда я не смогу ее прочесть. А ты сможешь. Что и требовалось доказать.
Ответить с цитированием
  #18 (permalink)  
Старый 11.09.2016, 07:06
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от laimas
форма обратной связи
Сейчас все еще проблема нарисовать форму для фидбэка?
Ответить с цитированием
  #19 (permalink)  
Старый 11.09.2016, 07:08
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от warren buffet
Сейчас все еще проблема нарисовать форму для фидбэка?
Ты дебил конченный, ты даже не понимаешь, что пишешь бред, что с тобой придурком разговаривать? Нахрен ты мне нужен.
Ответить с цитированием
  #20 (permalink)  
Старый 11.09.2016, 07:59
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от laimas
Ты дебил конченный, ты даже не понимаешь, что пишешь бред, что с тобой придурком разговаривать? Нахрен ты мне нужен.
Это не ко мне. Ты ТСу попробуй объяснить, что выводить хтмл надо из базы, а не рисовать вручную. Тогда он сам все поймет, когда увидит, что часть данных потерялась, задумается куда ж ее воткнуть и воткнет.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключение файлов js Владимир Новицкий Общие вопросы Javascript 4 19.02.2011 09:32
Вопрос про подключение js prog90 Общие вопросы Javascript 4 03.01.2011 18:48
подключение js Basonsan Javascript под браузер 13 08.11.2009 21:07
input и JS Лимонадный Джо Events/DOM/Window 5 13.06.2008 04:05
подключение стороннего js скрипта friend Общие вопросы Javascript 2 24.05.2008 19:51