Генерация новых input

FRoLL

Guest
Генерация новых input

Проблема в том что работает только в IE :(

Есть у меня на старнице инпуты для закачки файлов... А если юзеру мало этих инпутов то ему нужно еще показать...
Так я вот придумал такой подход. Я генерю сразу 10 инпутов - 5 видимых и 5 скрытых... А потом обрабатываю их явоскриптом... который поочереди включает их видимость...

Теперь с примерами:

PHP:
$output.='<table id="fields_table">';
  for ($i=1; $i<=5; $i++) {
     $output.='<tr><td width=30 align=center>'.$i.'</td><td><input type="file"></td></tr>';
  };
  for ($i=6; $i<=10; $i++) {
     $output.='<tr title="file_field" style="display:none;"><td width=30 align=center>'.$i.'</td><td><input type="file"></td></tr>';
  };

  $output.='<tr><td colspan=2 align=right>';
  $output.='<span OnClick="show_more();" style="color:blue;">More fields</span>';
  $output.='</td></tr>';


  $output.='</table>';

Как видно из штмл кода когда срабатывает клик грузиться яваскриптовая функция show_more()

Вот ее код:

function show_more()
{
fields=fields_table.getElementsByTagName('tr');

for (i=0; i<fields.length; i++) {

if ( (fields.title==\"file_field\") && (fields.style.display==\"none\") ) {
fields.style.display=\"block\";
break;
};

}
return false;
}
 

FRoLL

Guest
liss, Thanks!!!

Но вот теперь другая трабла... В Opera и в Mazilla... Ломаеться каркас... таблица вдруг теряет вид... это из-за того что им не нравиться diplay:block;


а потому моя функция сейчас выглядит так:

$output.=
"
<script language='JavaScript'>
<!--
function show_more()
{
var browser_name = navigator.appName;

fields=document.getElementById('fields_table').getElementsByTagName('tr');

for (i=0; i<fields.length; i++) {
if ( (fields.title==\"file_field\") && (fields.style.display==\"none\") ) {

if (browser_name == 'Microsoft Internet Explorer') {
fields.style.display=\"block\";
}
else {
fields.style.display=\"table-row\";
};

break;
};

}
return false;
}
// -->
</script>
";
 

liss

Новичок
ещё вариант
пробуй вместо style.display
style.visibility = 'hidden' и соответственно
style.visibility = 'visible' он не меняет стиль отображения а только скрывает/показывает элемент
 

FRoLL

Guest
visibility не подходит (
Потому как место под tr браузером все равно выделяется... хоть оно и пустое
 

FRoLL

Guest
crocodile2u
Опере очень неравиться block так как при следующей итерации она скрывает предыдущий блок и показывает новый....
А потому моя функция олично справляетсья проверяя какой браузер и показывая в зависимости от этого block или table-row...
Я бы и не делал эту проверку если бы в IE работал table-row а то он мне ошибку выдает когда я пытаюсь присвоить в нем это значение... Ну ничего зато теперь после простой проверки на браузер все работает. Все спасибо
 

MD

Guest
style.display = ''; - показываем
style.display = 'none'; - прячем
работает в опере, мозилле, ие
 

akxxiv

Новичок
В почте Яндекса реализован очень не плохой подход. Там просто генерируются новые Ноды с инпутами. Можно взять скрипт оттуда.
 

MiRacLe

просто Чудо
table.style.display = (userAgent == 'ie') ? 'block' : 'table';
//---------
tr.style.display = (userAgent == 'ie') ? 'block' : 'table-row';
 
Сверху