1

嘿,伙计们在弄清楚如何制作它时遇到了麻烦,这样我就可以让它一次只打开一张桌子,一旦你打开另一张桌子,另一张桌子应该在这里关闭任何帮助?

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” 有什么帮助吗?

4

2 回答 2

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:in onClick="javascript:toggleRow(cctab);"。(只是说onClick="toggleRow(cctab);"

于 2012-08-05T21:51:32.840 回答
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 就不会触发。

于 2012-08-05T22:02:33.277 回答