setAttribute и имя текстового поля как массив

_Leonchik_

Новичок
setAttribute и имя текстового поля как массив

IE понимает данные конструкции.
var yourName=document.createElement('input');
yourName.setAttribute('type','text');
yourName.setAttribute('name',"frm_[]");
или так:
yourName.setAttribute('name',"frm_["+i+"]");

а вот Опера нет.
далее это дело надо пхп скормить. вот и нужен как массив.

Как обойти?

-~{}~ 12.12.06 18:32:

с этими createElement, setAttribute и OnClick ваще заморочка.
весь день убил на это дело так и не побил.
А тут еще и Опера с ИЕ выкабличиваются.

-~{}~ 12.12.06 18:47:

в Максоне идет, и в ФФ тоже не пашет.
кто придумал столько браузеров - гвоздь в голову забить надо! (ИМХО)

-~{}~ 12.12.06 19:03:

ни у кого нет идей?
 

netmac

Новичок
Помню можно было писать
var yourName=document.createElement('<input name="f[]">');

Попробуй может поможет.

Вобще не самый лучший вариант формирования и передачи данных со сложной структурой в пхп.
 

_Leonchik_

Новичок
BRat
yourName.name="frm_[]"; - IE съел нормально, а вот опера снова забычилась.

netmac
var yourName=document.createElement('<input name="f[]">');
попробую.

Вобще не самый лучший вариант формирования и передачи данных со сложной структурой в пхп.
тогда как ты себе представляешь передать форму заведомо незная сколько там текстовых полей (их имена) и т.д. в пхп, и там ее обработать?
Бежать по всему глобальному и проверять, то ли оно или нет? нет, это не удобно, и не приемлимо.
а использования имени как массив - вот это удобно для меня, и обрабатывать и принимать.
Но вот почему-то при создании (яваскриптом) динамической формы с именами в виде массива, опера подводит.
При обычном создании формы с подобными именами - все идеально.

Уважаемые, есть ли еще какие нить варианты?

-~{}~ 13.12.06 12:38:

самое непонятное. что если после создания нескольких текст. полей в опере, и пробежаться явоскриптом по всей форме. то он их не видет, хотя они есть визуально.
как можно 'удобней' увидеть содержимое динамических форм, т.к. при открытии view source их там нету, а бежать в цикле и выводитдь алерты - не всегда удобно.
PHP:
for(i=0; i<frm.length; i++){ alert(frm.elements[i].name+'  '+frm.elements[i].value +'  '+i); 
}
может можно одним алертом это дело вывести?

-~{}~ 13.12.06 12:59:

netmac
var yourName=document.createElement('<input name="f[]">');

попробую.
И снова IE съел как нивчем не бывало. а Опера (я начинаю в ней сильно разачаровыватся) как всегда. себе не изменяет.
 

netmac

Новичок
Что-то ты, дорогой друг, не то делаешь там у себя.

Я проверил вот этот скрипт:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Untitled Document</title>
<script type="text/javascript">
function add(){
var newNode=document.createElement('input');
newNode.type='text';
newNode.name='w[]';
document.getElementById('f').appendChild(newNode);
var arr=document.getElementById('f').childNodes;
for(var i=0; i<arr.length;i++){
alert(arr.tagName+' '+arr.name);
}
}
</script>
</head>

<body>
<form id="f"><input type="text" name="w[]" /></form>
<button onclick="add()">ggg</button>
</body>
</html>


Работает в опере9.
 

netmac

Новичок
Автор оригинала: _Leonchik_
PHP:
for(i=0; i<frm.length; i++){ alert(frm.elements[i].name+'  '+frm.elements[i].value +'  '+i); 
}
А чего ты frm.length пишешь? frm.elements.length надо писать.

-~{}~ 13.12.06 13:31:

akxxiv
Тема стара как мир. IE рано или поздно сдохнет, если его разработчики не будут следовать стандартам и делать все так как им удобно.
А развитие web2 только ускорит этот процесс.
 

_Leonchik_

Новичок
akxxiv это я читал.
и код из той статьи у меня не пашет, или подобным образом нельзя свою функцию вызывать?
inputTag.setAttribute("onclick", function() {alert('clicked')});

-~{}~ 13.12.06 13:45:

netmac
может не по стандарту, но работает frm.length
 

netmac

Новичок
_Leonchik_
Плохо ты видно ее читал. Или нифига не понял.
setAttribute - устанавливает атрибут для тега DOM элемента, т.е. текст в кавычках грубо говоря. К javascript объектам это прямого отношения НЕ имеет.

А inputTag.setAttribute("onclick", function() {alert('clicked')}) вообще бред. По целому ряду причин.
 

asm

Пофигист
ты же не пишешь
<input type="text" onclick=function() {alert('clicked')}>
потому что бред, почему хочешь что бы dom писал?
 

BRat

o_0
_Leonchik_
для начала -
1. не кроссбраузерно
2. не соответсвует никаким стандартам
3. для задания обработчиков событий есть свои функции, addEventListener и attachEvent, с более мощным возможностями


asm
а когда вот так, через html событие вешаешь и так создается анонимная функция, только неявно ) А у тебя вообще получается функция в функции
 

asm

Пофигист
BRat

У меня ничего не получается.
1. Что мне делать?
2. Я хочу явную функцию.
3. Более того это анонимная функци в анонимной!!!

#Боже занимаюсь ананизмом
 

netmac

Новичок
Автор оригинала: _Leonchik_
приведи хотябы 3 причины!
1. Т.к. setAttribute устанавливает значение Атрибута, то в качестве этого значения должна передаваться строка, а не что-то иное.
2. Давай заковычим что что ты передаешь... Что получится? Объявление функции. А вызов где? Вызов нужен!
3. Это вариант извините "через жо...". Потому что: браузер должен установить значение атрибута для DOM НОДЫ, потом синхронизировать его со свойством соответствующего объекта javascript. Когда надо делать наоборот. Т.е. DOM ноду и ее атрибуты вообще не надо трогать.
 
Сверху