Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Не меняется атрибут name в input


Автор: Tony 4.10.2006, 12:12
Vsem privet!
]Est' kod
Код

<html>
    <head>
        <script type="text/javascript">
            function rep(t){
                t.name="killer"
                alert(document.getElementById("rr").innerHTML);
            }
        </script>
    </head>
    <body>
        <div id="rr"><input type="text" name="test" onclick="rep(this)"/></div>
    </body>
</html>


IE ne menjaet zna4enie atrributa name  smile .Kak mozhno pomenat zna4enie? Proboval po vsjakomu.

Автор: GIK 4.10.2006, 12:39
Tony, это глюк ИЕ. Тут ничем не поможешь....

Автор: Tony 4.10.2006, 12:44
na MSDN est' tolko tak 
Код

var oAnchor = document.createElement("<A NAME='AnchorName'></A>");

Автор: 12345c 4.10.2006, 13:00
А чем не устраивает то, что document.getElementById("rr").name правильно? Если в innerHTML остаётся неправильно -  меняйте innerHTML.

Автор: Tony 5.10.2006, 16:12
Цитата(12345c @ 4.10.2006,  13:00)
А чем не устраивает то, что document.getElementById("rr").name правильно? Если в innerHTML остаётся неправильно -  меняйте innerHTML.

Так и делаю,но о4ень гемройно.Вопрос из этой песни.Как можно заставить FF обновлять innerHTML.Например есть <input type="text" name="killer" value="killer"/>.Предпложим 4то ползователь ввёл текст в это поле.Затем берём иннерHTML из контейнера куда входит этот инпут и видим 4то value не изменилось.

Автор: skyboy 5.10.2006, 16:34
так innerHTML - это код, который парсится и на основе которого строится дерево DOM. если изменяешь это свойство - опять происходит парсинг и дерево DOM меняется в соответсвии с изменениями innerHTML, а когда меняешь дерево DOM "напрямую" зачем изменять innerHTML? и главное - как?!
например,меняем так:
document.getElementsByTagName('div')[0].width= 100;
это можно преобразовать в HTML следующим образом:
<div width="100">
<div style="width: 100px;">
<div style="width: 100%">(если ширина родителя была равна "100px")
Какой вариант "выбирать" браузеру? И надо ли этот выбор?

Автор: Tony 5.10.2006, 17:43
Я так и знал 4то полезут в DOM.Зада4а такая:написать контрoл editTable.Тоесть таблица в я4ейки может быть любой компонент,например:инпут или ку4а 4екбоксов.Должнабыть функия добавления v таблицу новой строки(естественно со всеми компонентами где зна4ений дефаулт) и также удаления строки.При4ём если добавлается строка то у новых компнентов в строке name="elementsList[3].firstName", делаю ещё добавить тогда elementsList[4].firstNameи тогдалие.Если удалается мнe нужно все компоненты уменьшыть на -1 тогда elementsList[2].firstName elementsList[3].firstName.Добавление написал а вот удаление.Мне удаётся изменить name -1 ,no v FF стираются введённуе зна4ения в поля.Тоесть становятся такие как сервер прислал(валуе="аааа",пользователь изменил на ббббб,беру innerHTML,a on не изменённый).ДОМ парсить сюда не подайдёт т.к. я не знаю 4то в я4ейки(какой контрол:текст,ареа,оптионс).Каро4е такие дела.

Автор: skyboy 5.10.2006, 17:58
Цитата(Tony @  5.10.2006,  16:43 Найти цитируемый пост)
ДОМ парсить сюда не подайдёт т.к. я не знаю 4то в я4ейки(какой контрол:текст,ареа,оптионс)

разве сложно это определить - что там? при помощи все того же DOM...

Автор: Sardar 5.10.2006, 21:18
Цитата(Tony @  5.10.2006,  15:12 Найти цитируемый пост)
Как можно заставить FF обновлять innerHTML.Например есть <input type="text" name="killer" value="killer"/>.Предпложим 4то ползователь ввёл текст в это поле.Затем берём иннерHTML из контейнера куда входит этот инпут и видим 4то value не изменилось. 

А почему innerHTML должен был измениться?

Tony, всё смахивает на конкретно не верное представление что есть вёрстка, ты с ней как будто с текстом работаешь. Нужно скопировать строку таблицы со всем содержимым? Ну так достань таблицу:

Код
var tb = document.getElementsById("my_table");
var bod = tb.tBodies[tb.tBodies.length-1];
new_row = tb.rows[нужная_строка].cloneNode(true); //это будет новая строка с копией всего содержимого
if(isIE()) fixIE(new_row); //фиксим инпуты для ИЕ
bod.appendChild(new_row);

//...................
function fixIE(row) {
  var inputs = row.getElementsByTagName("input");
  for(var i=0; i<inputs; i++) {
     var new_input = document.createElement("<input name='"+(inputs[i].name - делай что угодно)+"'>");
     inputs[i].parentNode.replaceChild(new_input, inputs[i]);
  }
}


И нет проблем с потерей вёрстки в таблице если работать через innerHTML.

Автор: Tony 6.10.2006, 12:34
Sardar ты правелно понял.Но не всё так просто как кажется ,как поменять валуе ? Это первое, а втарое в я4ейки таблицы могут быть разли4ные компоненты(селект со вложенными оптионс, радио...)Там просто не реалнуй парсинг будет да хотя ладно с ним.Наме я поменял,а валуе как?Посмотри первый пример каторуй я превёл там валуе не меняется(в innerHTML).

Автор: Sardar 6.10.2006, 15:47
Цитата(Tony @  6.10.2006,  11:34 Найти цитируемый пост)
как поменять валуе

Ну что это за вопрос? Разве input.value="что то другое" уже отменили? smile 

Цитата(Tony @  6.10.2006,  11:34 Найти цитируемый пост)
Это первое, а втарое в я4ейки таблицы могут быть разли4ные компоненты(селект со вложенными оптионс, радио...)


Существует три типа элементов форм: input, textarea, select; всё остальное из области фантастики или не правильного восприятия вёрстки.

Цитата(Tony @  6.10.2006,  11:34 Найти цитируемый пост)
Там просто не реалнуй парсинг будет да хотя ладно с ним.

Тебе ничего парсить не нужно (parse в понятии зачитывать/разбирать текст). Бегать по HTML DOM'у не так интересно без XPath, но getElementsByTagName() в принципе (с большой натяжкой) хватает. Приведи пример сложности, порешаем.

Цитата(Tony @  6.10.2006,  11:34 Найти цитируемый пост)
Наме я поменял,а валуе как?Посмотри первый пример каторуй я превёл там валуе не меняется(в innerHTML). 

Мне трудно понять о чём ты. В innerHTML value не будет меняться, т.к. ни в одном стандарте не сказанно, что бы он менялся, да и innerHTML сам особо в стандартах не встречаеться, ибо пережиток прошлого - восприятие удобного DOM дерева как текст.

P.S. на форуме нормальный транслит, неужели сложно отключить поделие чем ты сейчас пользуешся и писать по человечески, а то сложно читать.

Автор: Tony 6.10.2006, 21:31
Sardar ты предлагаешь делать всё 4ерз DOM.Остановлюсь на ДОМ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)