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


Автор: Samotnik 3.3.2008, 19:00
Есть такой код 
Код

var html = "<table style='width:" + w + "px;height:" + h + "px;border:0px solid;' cellspacing='0' cellpadding='0'>" +
               "<tr>" +
                    "<td align='center'  colspan='2'>" +
                         "<div class='sf_input' style='width:" + w + "px;height:" + Math.max(h - 20, 0) + "px;overflow-x:hidden;overflow-y:scroll;'>" +
                         "<table style='width:"+ (w - 20) +"px' cellspacing='0' cellpadding='0'></table>" +
                      "</div>"+
                    "</td>" +
               "</tr>" +
               "<tr style='height:20px;'>" +
                    "<td> Description </td>" +
                    "<td style='width:100%'><input type=\'text\' readonly=\"readonly\"/></td>" +
               "</tr>" +
               "</table>";

    this.parentNode.innerHTML = html;
    this.description = this.parentNode.getElementsByTagName('input')[0];

Нужно: 
Когда пользователь водит  Description  в текстовое поле,  чтобы  эти данные  отображались в табличке.  
Делаю вот так
Код

var _this = this;
 this.ElemsTable = this.parentNode.childNodes[0];
    this.ElemsTable.currentRow = null;
 this.description.onkeyup = function () {
          _this.ElemsTable.currentRow.cells[3].childNodes[2].innerHTML = this.value;
          _this.ElemsTable.currentRow.description = this.value;
    }

Но нифига не работает   smile 

Автор: SelenIT 3.3.2008, 19:39
Samotnik, а что такое this во всем этом безобразии великолепии?

Лично меня сильно смущает строчка
Цитата(Samotnik @  3.3.2008,  19:00 Найти цитируемый пост)
this.parentNode.innerHTML = html;

по идее, она перезатирает содержимое этого таинственного this таблицей, и никакого this.description просто не остается...

Автор: Samotnik 3.3.2008, 19:40
Цитата(SelenIT @  3.3.2008,  19:39 Найти цитируемый пост)
Samotnik, а что такое this во всем этом безобразии великолепии?

var _this = this;

Добавлено через 1 минуту и 32 секунды
Цитата(SelenIT @  3.3.2008,  19:39 Найти цитируемый пост)
Лично меня сильно смущает строчка

может и так, но она работает !!!!
Не работает  обработчик  кейап !!
Т.е.  он работает,  если внутри этой  функции написать   
Код

alert("Hello world");

то оно высветится!!    Но вот получить содиржимое таблички  никак не удается  smile 

Автор: SelenIT 3.3.2008, 19:42
Но в строках 2-4 примера идет обращение к this, а не _this...

Автор: Samotnik 3.3.2008, 20:12
вот тут   ошибка
Код

 this.ElemsTable = this.parentNode.childNodes[0];

фаер баг пишит  ElemsTable   has no properties

Автор: SelenIT 3.3.2008, 21:13
Samotnik, а если определить ElemsTable не как this.parentNode.childNodes[0], а как this.parentNode.getElementsByTagName('table')[0] - ошибка останется? А то в Gecko-браузерах в childNodes[0] часто норовят залезть пробелы между тегами...

Автор: Samotnik 3.3.2008, 21:45
Вобщем  что -  то сделал
Код

var html = "<table style='width:" + w + "px;height:" + h + "px;border:0px solid;' cellspacing='0' cellpadding='0'>" +
               "<tr>" +
                    "<td align='center'  colspan='2'>" +
                         "<div class='sf_input' style='width:" + w + "px;height:" + Math.max(h - 20, 0) + "px;overflow-x:hidden;overflow-y:scroll;'>" +
                         "<table style='width:"+ (w - 20) +"px' cellspacing='0' cellpadding='0'></table>" +
                      "</div>"+
                    "</td>" +
               "</tr>" +
               "<tr style='height:20px;'>" +
                    "<td> Description </td>" +
                    "<td style='width:100%'><input type=\'text\' readonly=\"readonly\"/></td>" +
               "</tr>" +
               "</table>";

    this.parentNode.innerHTML = html;

    this.description = this.parentNode.getElementsByTagName('input')[0];

    this.elements = this.parentNode.childNodes[0].rows[0].cells[0].childNodes[0].childNodes[0];

    this.elements.currentRow = null;

     this.description.onkeyup = function () {
     _this.elements.currentRow.cells[0].childNodes[0].innerHTML = this.value;
     _this.elements.currentRow.description = this.value;
    }

но данные добавляются не  в маленькую ячейку,  а  в изначальную таблицу, притом во всю!!  притом   новая таблицчка, где должно быть описание,   она  исчезает     
 smile 

Автор: SelenIT 3.3.2008, 21:55
Ага... "<table style='width:"+ (w - 20) +"px' cellspacing='0' cellpadding='0'></table>" я сразу-то и не приметил... Данные нужно в нее вносить? Тогда напрямую через innerHTML не получится (как минимум в IE), нужно эти <table ... </table> не сразу вставлять во внешнюю таблицу, а приписывать к данным перед вставкой в innerHTML div-а. Но вообще я не совсем понимаю, в каком контексте это все происходит. Можно увидеть полный код страницы?

Автор: Samotnik 4.3.2008, 18:27
Вобщем порблема в том, что имне  еще в одну таблицу занырнуть нужно.  т.е. 
Код

_this.elements.currentRow.cells[0].childNodes[0].innerHTML = this.value;

Это и  есть сама таблица!!   и естессно   innerHTML  у нее не может быть !       
Нужно порникнуть внутрь этой таблицы  к еще одной!! 


Автор: Samotnik 4.3.2008, 21:51
Вобщем сделал !!   smile 
Оказалось все очень просто !! 
 smile 

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