Изменение значения name у input
Вот вам головоломочка, под стать олимпиадной задачке!
Может кто нить что нибудь подскажет!!!!!
Вот такие две функции в паре могут включать/выключать чекбоксы..
function gswitch_chk(form_name,checkboxes_sbustr) {
var inpt;
inpt = document.forms(form_name).firstChild;
feach(inpt,checkboxes_substr);
}
function feach(it,name_cmp_str) {
do {
if (it.name) {
if (it.name.indexOf(name_cmp_str) != -1) {
if (it.checked != true) {
it.checked = true;
} else {
it.checked = false;
}
}
}
if (it.firstChild) {
feach(it.firstChild,name_cmp_str);
}
} while (it = it.nextSibling);
}
А это чекбокс кторый их вызывает..
<input type="checkbox" onclick="gswitch_chk('_mainForm','id[');">
Результат - все чебоксы, кторые попались этим функциям в руки и у которых в именах встретилась строка 'id[' получат противоположное значение в свойстве 'checked'.
Кнешна, не лучший вариант.. Ночью забегу - нарисую все как надо..
А ты можешь потренироваться с тем, что скинул.. Пара волшебных шлёпов по клаве и вот оно решение=)
Сделаю заметку, в dom`е детьми формы считаются не только input`ы и тому подобные тэги попавшиеся между <form> и </form>, но и все, что вообще находится между ними.. Будь это таблицы, ячейки таблиц, строки картинки и вообще какая-либо другая лабуда.. Но, на самом деле это не страшно.. Перебо даже ОЧЕНЬ большей страницы проходит моментально, имхо НЕЗАМЕТНО.. только вот юзание рекурсивного вызова feach() - это плохо.. нередко видел как js (под IE например) выдавал ошибки при очень глубоких рекурсиях.. В общем, не буду пудрить лишний раз мозги) Седня, попозже скину наманый вариант =) До связи и т.п. и т.д..
P.S. Какими браузерами поддерживается w3c DOM (самый сурьезный и правильный dom) точно сказать не могу.. Если только, Netscape, Mozilla и др. из их семейства.. IE по-моему с 6-ой или 5-ой версии.. Opera - вообще без понятия, но у них на сайте (на родном сайте) где-то была табличка, где написано, что поддерживается и какими версиями..)
К сожалению я не поняла к чему относитсья твое сообщение, но это уже не важно. Решение было найдено. ПРоблема, описанная выше актуальна только для IE , в Мозиле же this.name="new_name" фунциклирует.
А вот для IE необходимо CreateElement("<input name='new_name' >") и делов то. А старый инпут удалить. Только еще необходимо пробежать все атрибуты, сохранить те, у которых установлено значение (input_obj.attributes выдает список всех возможных атрибутов) и добавить их в новоиспеченый Input! Вот такие пироги!
До связи.=)
function func(victim) {
victim.setAttribute('name','ohoho');
alert(victim.name);
}
setAttribute метод объекта Element w3c dom..
как insertBefore и все остальное.. принимает два строковых значения.. первое - имя аттрибута.. второе - новое значние атрибута..
input и есть эти самые Element`ы.. Так тчо юзай такую конструкцию, и не разрушай никаких input`ов попросту так.. по поводу IE.. у меня victim.name = 'newname'; работает на ура.. без глюков.. IE 6.0 (без SP). Под SP я думаю тоже бы работало.. вроде бы все.. рад помочь и все такое..
P.S. insertBefore, createElement и т.п. не будут работать в браузерах, кторые не поддерживают хотя бы w3c DOM lvl 1.. Потому как все это фишки w3c Dom`а.. на счет IE точно говорить не приходится.. В microsoft работают четкие ребята, и многие 'мули' они делают сами.. в любом случае все нужно проверять.. но, я бы на твоем месте не стал пытаться творить детища, поддерживающие старые браузеры.. это глупость.. подо всех не подстроишься..=) пробывал.. не получалось=)
усё=) коннект окончен..