|
|
|
| Такой вот код генерирует Jquery
<input id="cities" type="hidden" name="cities" value="55750" style="visibility: visible;">
<option value="0">---не выбрано---</option>
<option value="55750">Анапа</option>
<option value="55596">Армавир</option>
</input>
<input id="cities_f1lexselect" class="f1lexselect" type="text" autocomplete="off" tabindex="0" style="width: 280px; z-index: 1;"/>
|
Собственно вопрос, как можно удалить вот эту часть
<input id="cities" type="hidden" name="cities" value="55750" style="visibility: visible;">
<option value="0">---не выбрано---</option>
<option value="55750">Анапа</option>
<option value="55596">Армавир</option>
</input>
|
Средствами JS ?
Просто этот список динамически подгружается, а если его не очистить, то он просто дополняется | |
|
|
|
|
|
|
|
для: Richard Ferlow
(21.06.2009 в 12:56)
| | Мей би, не <input id="cities", а <select id="cities" ?
По-любому, закрывающего </input> не бывает. Браузеры эту вашу строку просто игнорируют. | |
|
|
|
|
|
|
|
для: PAT
(21.06.2009 в 13:18)
| | Там все дело в том, что из select в input трансформируется.
Получается строка ввода с предлагаемыми вариантами | |
|
|
|
|
|
|
|
для: Richard Ferlow
(21.06.2009 в 13:28)
| | Как удалить придумал, однако дальше не помогает это) | |
|
|
|
|
|
|
|
для: Richard Ferlow
(21.06.2009 в 13:28)
| | >"из select в input трансформируется"
Это я понял (ваш сайт ПЭК видел).
Трансформируется ВИЗУАЛЬНО.
А в коде в ЛЮБОЙ МОМЕНТ ВРЕМЕНИ должно быть или <INPUT>, или <SELECT><OPTION>...</SELECT>.
Если у вас иначе, т.е. ОДНОМОМЕНТНО есть теги <OPTION> внутри тегов <INPUT> и </INPUT>,
то это, извините, - полный бред.
В общем, если вам надо удалить опшены из нормального тега <SELECT>, то смотрите
реализацию такого удаления здесь - первая строка функции formSecSel ()
удаляет ВСЕ имеющиеся опшены из существующего тега <SELECT>.
Обратите внимание на параметры цикла - удаляются опшены не с нулевого по последний,
а наоборот - с последнего до нулевого. Это важно - ибо в процессе удаления "длина" коллекции
опшенов уменьшается.
PS. А по сути никакой "трансформации" не требуется.
Нужен ВСЕГДА визуально видимый <INPUT> с атрибутом NAME,
а также ВСЕГДА имеющийся на странице <SELECT> без атрибута NAME
(чтобы не отсылать его данные по сабмиту),
видимость которого будет в нужные моменты "включаться/выключаться"
с одновременным "удалением/прописыванием" в нём опшенов. | |
|
|
|
|
|
|
|
для: PAT
(21.06.2009 в 13:39)
| | Ах вот оно что, а я сижу не то мучаю, тогда ясно.
Так, тогда пытаюсь так
for (var q = document.getElementById ('cities'), j = q.options.length - 1; j >= 0; j--) q.options [j] = null;
|
Возвращает TypeError: q.options is undefined
Хотя вот таким скриптом список дополняется:
for(i=0;i<cities.length;i++){
var option = document.createElement("option");
var optionText = document.createTextNode(cities[i].firstChild.data);
option.appendChild(optionText);
option.setAttribute("value",cities[i].getAttribute("value"));
_select.appendChild(option);
}
|
Не могу в общем понять, почему в первом случае не видит cities, а во втором исполняет _select.appendChild(option); | |
|
|
|
|
|
|
|
для: Richard Ferlow
(21.06.2009 в 13:53)
| | >"Возвращает TypeError: q.options is undefined"
А вы перед вашей строкой поместите тестовый алерт, вот так:
alert (document.getElementById ('cities').tagName);
for (var q = document.getElementById ('cities'), j = q.options.length - 1; j >= 0; j--) q.options [j] = null;
|
Если алерт покажет вам INPUT, то тогда сообщение ошибки вполне РАЗУМНО - у тега <INPUT> не может быть коллекции опшенов.
---
>"Не могу в общем понять, почему в первом случае не видит cities, а во втором исполняет _select.appendChild(option);"
Дело в том, что добавлять новые теги <OPTION> (и не только их, а и практически любые теги) методом appendChild () можно КУДА УГОДНО -
хоть прямо в тег <BODY>, хоть в тег <TEXTAREA>,... в общем - КУДА УГОДНО.
И всё БУДЕТ работать при добавлении :-)
Но вот потом "достучаться" до этих добавленных опшенов будет трудно, ибо РЕАЛЬНО
коллекция options бывает только у тега <SELECT>.
Пример ПРАВИЛЬНОЙ (но в тоже время БЕССМЫСЛЕННОЙ) работы метода appendChild ():
<script>
function f (x)
{
var lnk = document.createElement ('A');
lnk.href = 'http://google.com';
lnk.innerHTML = 'ГУГЛЬ';
document.getElementById ('myLink').appendChild (lnk);
x.disabled = true;
}
</script>
<span id="test"><a id="myLink" href="http://yandex.ru">ЯНДЕКС</a></span>
<hr>
<input type="button" value="Добавить ссылку на Гугль" onclick="f (this)">
<input type="button" value="Посмотреть HTML-код ссылки" onclick="alert (document.getElementById ('test').innerHTML)">
|
Вот если бы вы использовали метод add () для добавления опшенов (а он работает только для трёх коллекций: areas, controlRange, options), то вот тогда вашу ошибку вы увидели бы СРАЗУ - ничего бы просто не добавлялось.
Реализацию добавления новых опшенов в нормальный <SELECT> единственно ПРАВИЛЬНЫМ методом add () смотрите по указанной ссылке (следующие строки той же функции). | |
|
|
|
|
|
|
|
для: PAT
(21.06.2009 в 14:21)
| | Спасибо за разъяснения.
В JS я не силен пока нисколько. Вот путем проб и ошибок изучаю...а тем более когда нужно позарез и быстро.
Сделал кое как - однако работает.
через InnerHTML очищаю все ненужно, вставляю через него же тот же Select и к нему опять Jquery применяю. | |
|
|
|