2014-02-12 4 views
0

Я генерирую динамическую таблицу, добавляя к ней строку и затем присваивая некоторые свойства элементам, добавленным в эти ячейки. Все работает нормально, за исключением установленного флажка или сброса. В функции display_start_time(), командаSetAttribute CheckBox checked не работает

document.getElementById(domain).checked = false; 

не работает для строк динамически генерируемых. Когда я бросаю статическую таблицу в эту функцию, она работает правильно. Проблема может быть связана с функцией setAttribute (с использованием IE10, Windows 8), поскольку я попытался пройти через множество решений в Интернете, но не смог сделать прорыв в этом. Одним из решений является переход на jQuery, но у меня с этим несколько проблем.

  1. Я не знаю, JQuery
  2. Это займет меня некоторое значительное время в процессе обучения, а затем изменить весь свой код в соответствии с JQuery.

Функция Report вызывается кнопкой мыши, чтобы создать новую строку. display_time(domain,range); работает нормально.

Прошу вас, руководствоваться. Сценарий начинается здесь

function display_start_time(domain, range, user_id, process_id, process_name) 
{  
    if(!document.getElementById(user_id).innerHTML) 
    {  
     alert("Please select the server"); 
     document.getElementById(domain).checked = false; 
    } 
    else 
    { 
     question= confirm("Have you STARTED the " + domain + " of " + process_id + " ? "); 
     { 
      if(question) 
       display_time(domain,range); 
      else 
      { 
       document.getElementById(domain).checked = false; 
      } 
     } 
    } 
} 

function report(set_id,btn_id) 
{ 
    question= confirm("Has the error occurred ?"); 
    if(question) 
    { 
     new_table = document.getElementById("isolop_table"); 
     row = new_table.insertRow(); 
     cell_1 = row.insertCell(0); 
     cell_2 = row.insertCell(1); 
     cell_3 = row.insertCell(2); 
     cell_4 = row.insertCell(3); 
     cell_5 = row.insertCell(4); 
     cell_6 = row.insertCell(5); 
     cell_7 = row.insertCell(6); 
     cell_8 = row.insertCell(7); 
     cell_9 = row.insertCell(8); 

     // Inserting Data in Isolop Table Rows 
     cell_1.innerHTML = serial; 
     cell_2.innerHTML = document.getElementById(set_id).innerHTML; 
     cell_2.setAttribute("id", "Int" + serial); 
     cell_4.innerHTML = cell_5.id; 
     cell_4.setAttribute("id","user_id"+serial); 
     cell_7.innerHTML = "Start Time"; 
     cell_7.setAttribute("id","disp_start"+serial); 
     cell_8.innerHTML = "End Time"; 
     cell_8.setAttribute("id","disp_end"+serial); 
     cell_5.innerHTML = "<input type='checkbox' ></input>"; 
     cell_5.setAttribute("id", "INT"+serial); 
     //   cell_5.setAttribute("checked", 'true'); 
     cell_5.setAttribute('onclick',"display_start_time(cell_5.id,cell_7.id,cell_4.id,cell_2.innerHTML,'ISOLOP')"); 

     cell_4.innerHTML = cell_5.id; 
     cell_6.innerHTML = "<input type='checkbox'></input>"; 
     cell_6.setAttribute("id", "end"+serial); 
     cell_6.setAttribute('onclick',"display_end_time(cell_6.id,cell_8.id,cell_5.id,cell_2.innerHTML,'ISOLOP');"); 
     cell_9.innerHTML = " <button type='button' onclick=report('Int1');>Report Error</button>"; 
     document.getElementById(btn_id).disabled = true; 
     document.getElementById(btn_id).onclick = false; 
     return serial++; 
    } 
} 
+0

проблема в том, что вы используете одни и те же глобальные переменные 'cell_1' через' cell_9' каждый раз, когда вы добавляете строку в таблицу. Когда пользователь нажимает на одну из ячеек, переменные будут ссылаться на ячейки в последней добавленной строке, а не на строку, на которую они нажимают. – Barmar

+0

Я еще не пробовал более 1 строки. Он должен по крайней мере работать в течение 1 строки. – user3293604

+0

Если вы планируете продлить его до нескольких строк, не тратьте время на попытку заставить этот проект работать, так как вам все равно придется его переделать. Используйте ответ Джоэла. – Barmar

ответ

0

Я думаю, что проблема исходит от этой линии:

cell_5.setAttribute('onclick',"display_start_time(cell_5.id,cell_7.id,cell_4.id,cell_2.innerHTML,'ISOLOP')"); 

При установке обработчика OnClick в виде строки, она выполняется в глобальном контексте страницы, а не контекст в котором вы устанавливаете обработчик. Если cell_5, cell_7 и т. Д. Не существуют в глобальном контексте, функция завершится с ошибкой.

Попробуйте использовать addEventListener или установите onclick с анонимной функцией в качестве обработчика события. Переменные cell_ # будут захвачены внутри своей области, поэтому он должен функционировать так, как вы ожидаете.

cell_5.addEventListener('click', function() { 
    display_start_time(cell_5.id, cell_7.id, cell_4.id, cell_2.innerHTML, 'ISOLOP'); 
}, false); 

ИЛИ

cell_5.onclick = function() { 
    display_start_time(cell_5.id, cell_7.id, cell_4.id, cell_2.innerHTML, 'ISOLOP'); 
} 

Кроме того, вы должны сделать это для обработчика щелчка на cell_6.

+0

Я использовал поле подтверждения, в котором задан вопрос = подтвердить («Вы НАЧАЛО« + домен + »из« + process_id + »?»); Он показывает мне правильные значения. Также функция display_time (домен, диапазон); принимает те же значения и при этом работает хорошо. – user3293604

+0

Его переменные - это все глобальные переменные, поэтому они должны быть доступны в области, где выполняется 'onclick'. – Barmar

+0

Убедитесь, что вы указали переменные в качестве локальных переменных для этого решения. – Barmar