Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2015, 19:04
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Метод delete для formData
Есть один общий список <select>, из которого выбираются страны. При каждом выборе страна сохраняется в объекте selectedCountry
// создаем объект 
var selectedCountry = {};
// наполняем объект значениями: 
selectedCountry = {0 : 'Москва'}
selectedCountry = {1 : 'RU'    }

Для передачи на сервер использую formdata
var formdata = new FormData();
formdata.append('dest[0]', 'Москва'); 	// пара: 'dest[0]':'Москва'
formdata.append('dest[1]', 'RU'); 		// пара: 'dest[1]':'RU'

Бывает, что перед отправкой, надо удалить из formdata значение, например, пару 'dest[1]':'RU'.
Нашел вроде здесь - https://developer.mozilla.org/en-US/...ormData/delete , что можно удалить используя метод метод delete(), который удаляет из formdata пару key/value, но в IE11 он не сработал.
Поэтому пока решил эту проблему, используя мой объект selectedCountry.
// удаляем элемент из объекта selectedCountry
delete selectedCountry[1];   								
var formdata = new FormData(); // повторно создаю formdata 
// перебираем свойства объекта selectedCountry и вставляем в formdata
for (var key in selectedCountry) {							
 formdata.append('dest['+key+']', selectedCountry[key]);
}

Хотелось бы узнать:
1. Можно ли без этих изощрений, напрямую удалять поля из formdata?
2. Есть ли утечка памяти?
Перед вставкой, чтобы объект formdata стал пустым, попросту повторно его создаю, т.е. var formdata = new FormData();
Такой повтор, тоже не радует, так как есть подозрение, что повторные объявления formdata не удаляют предыдущие объекты из памяти

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

>Бывает, что перед отправкой, надо удалить из formdata значение

А зачем удалять, если можно просто не добавлять?
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2015, 19:30
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от laimas Посмотреть сообщение
>Бывает, что перед отправкой, надо удалить из formdata значение

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

>Для передачи на сервер использую formdata

Для передачи! При чем тут выбор клиента, он что в formdata должен ковыряться? Ну наверное выбор его обуславливается полями формы, может чем-то иным, но в любом случае это условие. А разве нельзя проверить это условие перед отправкой формы и добавить в formdata, если выбрано?
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2015, 19:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от bartonom
наполняем объект знаечниями:

selectedCountry = {0 : 'Москва'}

selectedCountry[0]= 'Москва'
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2015, 20:05
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от laimas Посмотреть сообщение
>Для передачи на сервер использую formdata

Для передачи! При чем тут выбор клиента, он что в formdata должен ковыряться? Ну наверное выбор его обуславливается полями формы, может чем-то иным, но в любом случае это условие. А разве нельзя проверить это условие перед отправкой формы и добавить в formdata, если выбрано?
В <select class='сountry'> пользователь выбрал какую-либо страну
В обработчике $('.сountry').change(function() {...
selectedCountry[1]='RU'; // сохраняем в selectedCountry

Выбрал еще страну
selectedCountry[2]='HU'; // сохраняем в selectedCountry и т.д.

Затем кликнул условно по кнопке 'Удалить', удалил страну с 'RU'.
Удаляем из selectedCountry соответственно
delete selectedShipCountry[2];

Пользователь нажал кнопку 'Отправить'. Отправляю на сервер formdata, сформированный следующим образом:
var formdata = new FormData(); // повторно создаю formdata 
// перебираем свойства объекта selectedCountry и вставляем в formdata
for (var key in selectedCountry) {							
 formdata.append('dest['+key+']', selectedCountry[key]);
}
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2015, 20:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Пользователь выбрал в списке Тобаго, затем Маврикия. Нажал "Удалить" - значит нужно снимать выбор опшена в соответствующем списке, и делается этого во время диалога "выбор в форме", а не во время ее отправки, и надобности ковыряться в FormData необходимости нет, как и создавать промежуточный объект selectedCountry .
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2015, 20:28
Аспирант
Отправить личное сообщение для bartonom Посмотреть профиль Найти все сообщения от bartonom
 
Регистрация: 05.05.2011
Сообщений: 48

Сообщение от laimas Посмотреть сообщение
Пользователь выбрал в списке Тобаго, затем Маврикия. Нажал "Удалить" - значит нужно снимать выбор опшена в соответствующем списке, и делается этого во время диалога "выбор в форме", а не во время ее отправки, и надобности ковыряться в FormData необходимости нет, как и создавать промежуточный объект selectedCountry .
Laimas Uimis
Не можешь ответить по сути двух вопросов, заканчивай нравоучения
Ответить с цитированием
  #9 (permalink)  
Старый 06.04.2015, 20:39
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Ну так вы бы показали html структуру кода вашего. К примеру, если именование ваших списков, это уникальные значения, тогда не сложно хранить выбор пользователя (для визуализации) в списке даже на UL LI с флажками для удаления. А выбранные флажки укажут на текст, по которому можно найти в списках опшен, сняв его выбор. Если уникальны ID значений, можно и по значению искать.

Отправка же, это добавление в FormData только тех значений формы, которые выбраны - получили ее элементы и циклом добавили в FormData.

Как это вы делаете, это вопрос, и что можно сказать? Я знаю одно, что не может пользователь ковыряться в объектах, он может делать это только на визуальных элементах, откуда и следует вывод, что необходимости в том, что вы описываете, нет.

Покажите html-код, и уверен, что вам смогут предложить решение и не одно.

PS. Думаю, вы встречались со списками стилизованными под набор с флажками, с помощью таких вообще не проблематично делать выбор/отмену, даже нет необходимости в подмене select, вы ведь используете FormData.

Последний раз редактировалось laimas, 06.04.2015 в 21:05.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cookie для меню аккордион и для div Lastedl jQuery 1 03.12.2013 04:55
public метод для плагина Ichigeki jQuery 1 16.02.2012 19:07
Наследование вызовом родителя. Метод apply() jsuse Общие вопросы Javascript 0 09.02.2012 23:54
HTA-приложение для радио Pianorama Magneto Ваши сайты и скрипты 42 22.01.2012 08:34