1

一度に 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);" を提案した後、1 つのテーブル "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;
}

インラインイベントハンドラー属性を実行するのは1999javascript:年ですが、何らかの理由でそれに固執していると仮定すると、 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 に答える