在javascript代码中只展开一行

时间:2012-08-05 21:40:07

标签: javascript

嘿家伙们无法弄清楚如何制作它以便我可以让它一次打开一张桌子,一旦你打开另一张桌子,另一张桌子应该关闭任何帮助吗?

function showRow(cctab){
if (document.getElementById(cctab)) {
    document.getElementById(cctab).style.display = ''; 
}
}

function hideRow(row1){
if (document.getElementById(cctab)) {
    document.getElementById(cctab).style.display = 'none';
}
}

function toggleRow(cctab){
if (document.getElementById(cctab)) {
    if (document.getElementById(cctab).style.display == 'none') {
        showRow(cctab)
    } else {
        hideRow(cctab)
    }
}
}

现在我想让它在我建议onClick =“javascript:toggleRow(cctab);”之后只打开一个表“cctab” anyhelp?

2 个答案:

答案 0 :(得分:0)

你可以保存对之前显示的项目的引用,并在显示另一项时隐藏它:

var currentTab;    
function showRow(cctab){
    if (document.getElementById(cctab))
        document.getElementById(cctab).style.display = '';
    if (currentTab && currentTab != cctab)
        hideRow(currentTab);
    currentTab = cctab;
}

请注意,执行内联事件处理程序属性是所以 1999,但假设您因任何原因坚持使用它,而javascript:中不需要onClick="javascript:toggleRow(cctab);"。 (只需说onClick="toggleRow(cctab);"

答案 1 :(得分:0)

首先,您需要将旧行存储在某处。 您所拥有的是一个系统,您使用<element onclick="...">将当前元素的id传递给显示或隐藏该行的控制器。

但是如果你看一下,你所缺少的是一种告诉最后一行是什么的方法。 所以你的代码需要的是一个中心对象,或者存储旧元素和新元素的变量。

你是如何做到这一点取决于你,但如果你做了这样的事情:

var table_rows = { current : null /* or set a default */, previous : null };

function rowController (cctab) {
    var newRow = document.getElementById(cctab);

    if (newRow === table_rows.current) { toggleRow(newRow); }
    else {
        table_rows.previous = table_rows.current;
        table_rows.current = newRow;
        showRow(table_rows.current);
        hideRow(table_rows.previous);
    }
}

注意:

  1. 这直接处理元素,因此您不必在函数中执行getById; 处理了一次,然后传递该元素并进行保存和检查。

  2. 它假设点击发生在行本身,而不是行内的任何内容;
    这是您的代码所具有的独立问题 除非明确且容易地点击行,而不是行内的单元格,否则很难说出您希望用户如何打开和关闭行。
    我的意思是,如果只有表格行有onclick,并且有人点击了表格列,那么onclick就不会触发。