Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить опцию к списку, разбираем не работающий код 
:(
    Опции темы
Vidocq
  Дата 8.9.2005, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Код

fucntion send(sel)
{
var oOption = document.createElement("OPTION");
sel_illness.options.add(oOption);

var selectedOption = sel.options[sel.selectedIndex];
oOption.innerText = selectedOption.value;
oOption.value = "2";
}


Код

<html>
<body>
<SELECT ID="Illness" SIZE=4 WIDTH=200 onclick="send(this)">
    <OPTION VALUE="0">Illness_1</OPTION>
    <OPTION VALUE="1">Illness_2</OPTION>
</SELECT>
<BR>
<SELECT ID="sel_illness" SIZE=5  WIDTH=200>
    <OPTION>Selected Illnesses</OPTION>
</SELECT>
</body>
</html>





--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
diam
Дата 8.9.2005, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Я не понимаю задачи, но вижу некоторые непонятные для меня моменты:
1. Откуда взялся sel_illness в коде JavaScript? Объявлен вне функции send()?
2. Строчка oOption.innerText = selectedOption.value; содержит innerText, который лучше заменить на oOption.text.
3. Когда мы добавляем ещё одну опцию в элемент SELECT (делаем последней опцией), нужно учесть, что это делается dom'овским методом add, причём для IE вторым аргументом должно быть число, а для Gecko - null (опере, по барабану), поэтому делаем это так:
Код

// получаем элемент SELECT
var sel_illnest = document.getElementById("sel_illnest");

// создаём опцию
var opt = document.createElement("OPTION");
opt.text = "Текст опции";
opt.value = "2";

if (document.all) {
  // для осла и оперы
  sel_illnest.add(opt, sel_illnest.options.length);
} else {
  // для остального цивилизованного мира :)
  sel_illnest.add(opt, null);
}

PM MAIL   Вверх
Vidocq
Дата 8.9.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



2 diam
1) Сделал по аналогии с
Код

<SELECT ID="oSelect">
  <OPTION VALUE="1">One</OPTION>
</SELECT>

<script>
var oOption = document.createElement("OPTION");
oSelect.options.add(oOption);
oOption.innerText = "Two";
oOption.value = "2";
</SCRIPT>



А задача всё та же smile - перемещать option'ы одного селекта в другой селект

PS код был взят с http://msdn.microsoft.com/library/default....methods/add.asp

Это сообщение отредактировал(а) Vidocq - 8.9.2005, 14:53


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Vidocq
Дата 8.9.2005, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Line 25, char 1, Object expected (в ИЕ) в коде. ФайрФокс и опера молчат
Код


<html>
<head>

<script language="javascript">
fucntion send(sel)
{
// получаем элемент SELECT
var sel_illnest = document.getElementById("sel_illnest");
// create option
var opt = document.createElement("OPTION");
opt.text = "sometext";
opt.value = "2";
if (document.all) {
  // for IE and Opera
  sel_illnest.add(opt, sel_illnest.options.length);
} else {
  // for the rest
  sel_illnest.add(opt, null);
}
}
</script>

</head>
<body>
<SELECT ID="Illness" SIZE=4 WIDTH=200 ondblclick="send(this)">
    <OPTION VALUE="0">Illness_1</OPTION>
    <OPTION VALUE="1">Illness_2</OPTION>
</SELECT>
<BR>
<SELECT ID="sel_illness" SIZE=5  WIDTH=200>
    <OPTION>Selected Illnesses</OPTION>
</SELECT>
</body>
</html>



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 8.9.2005, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Vidocq если ты пользуешся DOM'овскими методами document.createElement, то почему опцию добавляешь через add? smile

Подсказка: либо new Option -> add, либо document.createElement -> appendChild.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 8.9.2005, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Sardar

Цитата

либо new Option -> add, либо document.createElement -> appendChild.


Можно пример, пожалуйста?..


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Aliance
Дата 8.9.2005, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Vidocq
И обращайся к Id не на прямую, а, как правильно написал diam, через document.getElementById!

Цитата(Vidocq @ 8.9.2005, 16:48)
Можно пример, пожалуйста?..

Код

var select = document.createElement("SELECT");
document.body.appendChild(select);


В этом направлении, только добавлять нужно option`ы -> нужно назначить ID select`у и вызывать метод appendChild для него.
PM MAIL WWW ICQ Skype   Вверх
Vidocq
Дата 8.9.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Это похоже на правду?
Код

<html>
<head>

<script language="javascript">
fucntion send(sel)
{
var sel_illness = document.getElementById("sel_illness");
var opt = document.createElement("OPTION");
opt.text = "SomeText";
opt.value = "2";
document.sel_illness.appendChild(opt);
}
</script>

</head>
<body>
<SELECT ID="Illness" SIZE=4 WIDTH=200 ondblclick="send(this)">
    <OPTION VALUE="0">Illness_1</OPTION>
    <OPTION VALUE="1">Illness_2</OPTION>
</SELECT>
<BR>
<SELECT ID="sel_illness" SIZE=5  WIDTH=200>
    <OPTION>Selected Illnesses</OPTION>
</SELECT>
</body>
</html>



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Aliance
Дата 8.9.2005, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Да, только у объекта Select нет события ondblclick, зато есть onchange
PM MAIL WWW ICQ Skype   Вверх
Vidocq
Дата 8.9.2005, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Всё равно: Line 17, Char 1, Object expected, Code 0 (IE 6) В файрфоксе никаких ошибок нет, но и работы тоже нет smile
Код

<html>
<head>

<script language="javascript">
fucntion send(sel)
{
var sel_illness = document.getElementById("sel_illness");
var opt = document.createElement("OPTION");
opt.text = "SomeText";
opt.value = "2";
document.sel_illness.appendChild(opt);
}
</script>

</head>
<body>
<SELECT multiple="multiple" ID="Illness" WIDTH="200" onchange="send(this)">
    <OPTION VALUE="0">Illness_1</OPTION>
    <OPTION VALUE="1">Illness_2</OPTION>
</SELECT>
<BR>
<SELECT ID="sel_illness" SIZE="5"  WIDTH="200">
    <OPTION>Selected Illnesses</OPTION>
</SELECT>
</body>
</html>



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
o.s.a.
Дата 8.9.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Xo4y B MocKBy
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.2.2005
Где: Ташкент

Репутация: 5
Всего: 15



Опечатка в 5 строчке function send(sel)
А также в 10 строчке: document здесь не нужен: sel_illness.appendChild(opt);


--------------------
Не могу стоять, пока другие работают, пойду полежу.
PM MAIL ICQ   Вверх
Sardar
Дата 9.9.2005, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Vidocq млин, ну привыкни ты смотреть в консоль браузера, что за ошибку говорит smile
Рабочий код:
Код
<html>
<head>
<script type="text/javascript">
function send(sel) {
  var sel_illness = document.getElementById("sel_illness");
  var opt = document.createElement("option");
  opt.appendChild(document.createTextNode("SomeText"));
  opt.value = "2";
  sel_illness.appendChild(opt);
}
</script>
</head>
<body>
<select multiple="multiple" id="illness" width="200" onchange="send(this)">
    <option value="0">illness_1</option>
    <option value="1">illness_2</option>
</select>
<br>
<select id="sel_illness" size="5"  width="200">
    <option>selected illnesses</option>
</select>
</body>
</html>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Vidocq
Дата 9.9.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



2Sardar
"Идиот! - Согласен" (с) к/ф Операция Ы
так смотрю ж ведь... только вижу фигу обычно smile smile
(работает)
Код

function send(sel)
{
var sel_illness = document.getElementById("sel_illness");
var opt = document.createElement("OPTION");
opt.text = "SomeText";
opt.value = "2";
sel_illness.appendChild(opt);
}



--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Vidocq
Дата 9.9.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 431
Регистрация: 15.12.2004
Где: Запорожье, Украин а

Репутация: нет
Всего: 7



Вопрос из области теории.
Код

function send(sel)
{
var selectedOption = sel.options[sel.selectedIndex];

var sel_illness = document.getElementById("sel_illness");
var opt = document.createElement("OPTION");
opt.text = selectedOption.text;
opt.value = selectedOption.value;
sel_illness.appendChild(opt);

}


Вот эта функция реально записывает option из одного селекта в другой или просто отображает текст option'a в нужном селекте? Другими словами, смогу ли я потом передавать option'ы (добавленные из первого селекта), к примеру, в запросы? И будет ли эта функция работать ИЕ?

PS Сейчас скрипт работает во всех браузерах, кроме ИЕ %). Это ожидаемое поведение?

Это сообщение отредактировал(а) Vidocq - 9.9.2005, 11:25


--------------------
Всё течёт ©
PM MAIL ICQ   Вверх
Sardar
Дата 9.9.2005, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(Vidocq @ 9.9.2005, 10:21)
Вот эта функция реально записывает option из одного селекта в другой или просто отображает текст option'a в нужном селекте?

Ты по настоящему создаёшь элемент option, который добавляешь в select, никакого текста, всё обьекты smile

Цитата(Vidocq @ 9.9.2005, 10:21)
PS Сейчас скрипт работает во всех браузерах, кроме ИЕ %). Это ожидаемое поведение?

Найди разницу между твоим кодом и моим. Подсказка: глянь на IDL описание HTMLOptionElement.

Если не понял: свойство text только для чтения.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0631 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.