Динамические select'ы не передают значения на сервер

tf

крылья рулят
не кури много. тут не ООП
да я еще скажу выкинуть книгу по которой он это сделал, так писать на php вредно, и надо это сразу пресикать
тут дебажить html нужно, в статье написаны приемы отладки, которые каждый должен усвоить сам.

ну нашел я к примеру его ошибку, помогу я сейчас указав на нее, что изменится?
сделает еще чтонибуть и опять допустил другую ошибку, и будет так же долго с ней разбиратся

ТС var_dump не помог, Пора начинать тестить js c помощью alert!
Есть форма с динамическими селектами, при заполнении и отправке на сервер
значения из динамических селектов не передаются, со статического всё нормально.
отчасти я был прав, ищи разницу
 

Igor2001

Новичок
Автор оригинала: dimagolov
PHP:
foreach ($FIELDS as $key=>$value){
    $$key = $value;
    }
никогда такого бреда не пишите. Это ведь позволяет запросом поменять любые переменные, включая суперглобалы
согласен, это пережиток прошлого... был бы не против услышать совет, как получить все переменные из формы,не прописывая каждую как $variable = $_POST['variable'] при отключенном register_globals :)

Adelf, на счёт jQuery согласен что это как-то упростит проблему кроссбраузерности, но я в JavaScript не большой спец, а посмотрел jquery, спервого взгляда как-то не совсем понятно, надо как-то заняться этим.

to dimagolov, Фaнaт, tf: c кривостью кода согласен, однако это не поданному вопросу изьян, и полезнее было при указании предложить какой-то более ровный вариант, ну и конечно, как писал Adelf, внимательнее читать посты, чтоб лишнего не писать :)

Вот это то что надо, но я ещё вчера сам нашёл этот баг в MSDN, но всё равно спасибо.
В моём варианте производится опознание IE так:
PHP:
var IE='\v'=='v';
if(IE) {
    var selectParent = document.createElement('<select name="category_parent_array[' + Number + ']"></select>');
    var selectYearFrom = document.createElement('<select name="year_id_from_array[' + Number + ']"></select>');
    }
else {
    var selectParent = document.createElement("select");
    var selectYearFrom = document.createElement("select");
    }

а в приведённой ссылке:
PHP:
/*@cc_on @if (@_jscript)
var newNode = document.createElement("<input name='"+myname+"'>");
@else */
var newNode = document.createElement("input");
newNode.name = myname;
/* @end @*/
кто профи в JavaScript, объяснить в чём у них разница и что лучше, с точки зрения коректности определения, использовать?
 

Adelf

Administrator
Команда форума
Твой вариант тоже нормальный. Но ты все-таки найди для себя чтото. Не jQuery, так MooTools, PrototypeJs и т.д. и т.п.

-~{}~ 24.08.09 14:00:

У них определитель браузера более продвинутый и правильный обычно.
 

dimagolov

Новичок
Adelf, прекрати давать вредные советы.

разница в том, что СВОЙСТВО DOM элемента и его АТРИБУТ это совершенно разные вещи, хотя часто путаются как разработчиками браузеров, так и JS программистами. Поэтому юзайте set/getAttribute и погуглите на эту тему, чтобы узнать нюансы.

Кстати, не определяйте так браузер. В большинстве случаев куда лучше проверять определенность нужных свойств/методов и использовать их или их аналоги в других браузерах при их отсутствии. Потому что сейчас развелось столько разных браузеров и их версий, что одним фрагом не отделаешься, потребуется штук двадцать, а это уже ничего не упрощает.
 

Adelf

Administrator
Команда форума
dimagolov, обьясни почему он вреден и я перестану.
 

dimagolov

Новичок
Твой вариант тоже нормальный.
говнокод не может быть нормальным. а то, что написал Igor2001, это говнокод полученный в результате шаманства, так как понимания в чем проблема нету и есть пассы руками, авось поможет.

почитай про атрибуты.
 

Crys

Двинутый новичок
почитай про атрибуты.
Атрибуты здесь не причем. Проблема чисто под IE и связана с тем, что теряются атрибуты/свойства, назначенные через DOM, если потом происходит работа с innerHTML

То есть:
Код:
	var div = document.createElement('div');
	var selectParent = document.createElement("select");
	selectParent.setAttribute('name','test');
	div.appendChild(selectParent);
[b]	div.innerHTML += 'test';[/b] //если убрать - все в порядке
	alert(div.getElementsByTagName('select')[0].getAttribute('name'));
А IE как-то пофик, как имя назначать...
 
Сверху