选中SetAttribute CheckBox不起作用

时间:2014-02-12 21:31:40

标签: javascript php ajax

我正在生成一个动态表,向其添加一行,然后为这些单元格中添加的元素分配一些属性。 除了复选框设置或重置,一切正常。在函数display_start_time()中,命令

document.getElementById(domain).checked = false; 

不适用于动态生成的行。当我向这个函数抛出静态表时,它可以正常工作。问题可能出在setAttribute函数(使用IE10,Windows 8),因为我尝试在线浏览许多解决方案,但无法在这个解决方案中取得突破。提供的解决方案之一是转换到jquery,但这对我来说几乎没有问题。

  1. 我不知道jquery
  2. 我需要花费一些时间来学习,然后根据jquery更改我的整个代码。
  3. 调用函数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++;
        }
    }
    

1 个答案:

答案 0 :(得分: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);

OR

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

同样,您应该对cell_6上的单击处理程序执行此操作。