Метод 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 не удаляют предыдущие объекты из памяти |
>Бывает, что перед отправкой, надо удалить из formdata значение
А зачем удалять, если можно просто не добавлять? |
Цитата:
|
>Для передачи на сервер использую formdata
Для передачи! При чем тут выбор клиента, он что в formdata должен ковыряться? Ну наверное выбор его обуславливается полями формы, может чем-то иным, но в любом случае это условие. А разве нельзя проверить это условие перед отправкой формы и добавить в formdata, если выбрано? |
Цитата:
selectedCountry = {0 : 'Москва'} selectedCountry[0]= 'Москва' |
Цитата:
В обработчике $('.с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]); } |
Пользователь выбрал в списке Тобаго, затем Маврикия. Нажал "Удалить" - значит нужно снимать выбор опшена в соответствующем списке, и делается этого во время диалога "выбор в форме", а не во время ее отправки, и надобности ковыряться в FormData необходимости нет, как и создавать промежуточный объект selectedCountry .
|
Цитата:
Не можешь ответить по сути двух вопросов, заканчивай нравоучения |
Ну так вы бы показали html структуру кода вашего. К примеру, если именование ваших списков, это уникальные значения, тогда не сложно хранить выбор пользователя (для визуализации) в списке даже на UL LI с флажками для удаления. А выбранные флажки укажут на текст, по которому можно найти в списках опшен, сняв его выбор. Если уникальны ID значений, можно и по значению искать.
Отправка же, это добавление в FormData только тех значений формы, которые выбраны - получили ее элементы и циклом добавили в FormData. Как это вы делаете, это вопрос, и что можно сказать? Я знаю одно, что не может пользователь ковыряться в объектах, он может делать это только на визуальных элементах, откуда и следует вывод, что необходимости в том, что вы описываете, нет. Покажите html-код, и уверен, что вам смогут предложить решение и не одно. PS. Думаю, вы встречались со списками стилизованными под набор с флажками, с помощью таких вообще не проблематично делать выбор/отмену, даже нет необходимости в подмене select, вы ведь используете FormData. |
Часовой пояс GMT +3, время: 22:40. |