Создание списков с помощью JS и проблемы

idencial

Одинаковый
Создание списков с помощью JS и проблемы

Есть 3 поля
email
fax
address

Есть также список
Уведомлять по
1.E-mail
2. FAX
3. Letter

В списке выводятся только те пункты, которые соотв. заполенным полям.
Т.е если e-mail не указан, то в списке e-mail не выводится
Сделал следующее
function show_select() {
if(document.forms[0].email.value!='') {
opt = new Option('E-mail', 'del_email');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;

}
if(document.forms[0].fax.value!='') {
opt = new Option('FAX', 'del_fax');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;
}
if(document.forms[0].address.value!='') {
opt = new Option('LETTER', 'del_letter');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;
}
}

На поля email fax & address ставлю onchange="show_select();"
но этот код не корректен, т.к при повторном изменении e-mail, например, создается еще одно поле в списке, с названием email
Я хотел проверять если создан объект, то не создавать, но не знаю как проверить.
if(typeof(document.forms[0].delivered_by.del_letter) == "undefined"), например всегда выдает undefined, хотя объект я создаю
Также я не знаю как убить созданный объект, т.к если поле очистили, то его надо убить

Может кто посоветует как реализовать задуманное?
 

lanka

Новичок
Re: Создание списков с помощью JS и проблемы

> Я хотел проверять если создан объект, то не создавать, но не знаю как проверить.

Проверять например так:
function somefunc() {
var someVar = document.getElementById('someVar');
if (! someVar) return false;
.....
}
Но нужно ли вам это?

> Также я не знаю как убить созданный объект, т.к если поле очистили, то его надо убить
> Может кто посоветует как реализовать задуманное?

А если допустим воспользоваться свойством visibility:
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/visibility.asp
- оно у чекбоксов есть, и просто показывать\не показывать по событию onChange()? Это видится более действенным, чем убивать\восстанавливать чекбоксы.
 

idencial

Одинаковый
А свойство visibility для списков покатит?
Там же не чек боксы
 

idencial

Одинаковый
Я решил проблему, хоть коряво, но решил =)
Если кому интересно, то вот код
function show_select() {
var count;
if(document.forms[0].email.value!='') {
count=0;
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='E-mail') count++;
}
if(count==0){
opt = new Option('E-mail', 'del_email');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;
}
} else {
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='E-mail') document.forms[0].delivered_by.options=null;
}
}
if(document.forms[0].fax.value!='') {
count=0;
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='FAX')count++;
}
if(count==0){
opt = new Option('FAX', 'del_fax');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;
}
} else {
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='FAX') document.forms[0].delivered_by.options=null;
}
}
if(document.forms[0].address.value!='') {
count=0;
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='LETTER') count++;
}
if(count==0){
opt = new Option('LETTER', 'del_letter');
document.forms[0].delivered_by.options[(document.forms[0].delivered_by.options.length)]=opt;
}
} else {
for(var i=0; i < document.forms[0].delivered_by.options.length; i++) {
if(document.forms[0].delivered_by.options.text=='LETTER') document.forms[0].delivered_by.options=null;
}
}
}
 
Сверху