1

保存を押したときにテーブルを変数に保存し、復元を押したときにその状態に戻るようにこのコードを作成しましたが、最後のコードでランタイム エラーが発生したようです (テーブルの ID は数独です)。 firefox では動作しますが、IE では動作しません。ありがとうございます

var clone
function save()
{
    var table = document.getElementById("sudoku")
    clone = table.innerHTML
}

function restore()
{
    document.getElementById("sudoku").innerHTML=clone
}

編集:エラーメッセージ:

Webpage error details User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CPNTDF; .NET4.0E; .NET4.0C; BOIE9;ENUS) Timestamp: Mon, 15 Oct 2012 16:57:44 UTC Message: Unknown runtime error Line: 50 Char: 128 Code: 0 URI: file:///F:/uni%20work/home/Second%20year/CO525/assessments/Assessment2/assessmen‌​t2/javascript.js Message: Unknown runtime error Line: 50 Char: 128 Code: 0 URI: file:///F:/uni%20work/home/Second%20year/CO525/assessments/Assessment2/assessmen‌​t2/javascript.js

完全なコードを編集:

    var current_cell = null; // the currently selected cell
    var saved = {};     // Object for saving the current game
    function initialize() {
var col, row;
// Work through all the cells in the table and set
// onclick event handlers and classNames for the empty
// ones.
for (row = 0; row <=8; row++) {
    for (col=0; col <= 8; col++) {
        var cell = document.getElementById('cell_' + col + '_' + row);
        if (!parseInt(cell.innerHTML)) {
            // cell is empty
            cell.onclick = selectCell;
            cell.className = 'tofill';
        }
    }
}
document.onkeypress = keyPress;
save();
    }
    var current_cell = null; // the currently selected cell
    var saved = {};     // Object for saving the current game
    function initialize() {
var col, row;
// Work through all the cells in the table and set
// onclick event handlers and classNames for the empty
// ones.
for (row = 0; row <=8; row++) {
    for (col=0; col <= 8; col++) {
        var cell = document.getElementById('cell_' + col + '_' + row);
        if (!parseInt(cell.innerHTML)) {
            // cell is empty
            cell.onclick = selectCell;
            cell.className = 'tofill';
        }
    }
}
document.onkeypress = keyPress;
save();
    }

    // mouse button event handler
    function selectCell() {
if (current_cell !== null) {
    current_cell.className = 'tofill';
}
current_cell = this;
current_cell.className = 'selected';
    }

    // Capture keyboard key presses. If the key pressed is a digit
    // then add it to the current cell. If it is a space then empty
    // the current cell.
    function keyPress(evt) {
if (current_cell == null)
    return;
var key;
if (evt)
    // firefox or chrome
    key = String.fromCharCode(evt.charCode);
else
    // IE
    key = String.fromCharCode(event.keyCode);
if (key == ' ')
    current_cell.innerHTML = '';
else if (key >= '1' && key <= '9')
    current_cell.innerHTML = key;
    }

    var clone
    function save()
    {
    var table = document.getElementById("sudoku");
    clone = table.innerHTML;
    }

   function restore()
    {
    document.getElementById("sudoku").innerHTML=clone;
   }
4

4 に答える 4

1

要素だと思いますよ#sudokuね?Internet Explorerでは、テーブル要素にプロパティを設定することはできません<table>innerHTML

代わりに、適切なDOMメソッドを使用するか、HTML文字列を保存しようとせず、数独のコンテンツを2次元配列に保存します。

于 2012-10-15T17:14:08.780 に答える
0

innerHTMLこれは、IE と属性を使用して新しい HTML を挿入することに関する長年の問題です。
(いや、誰が推測しただろう、IE の問題だ!!)

jQuery を使用する場合は、次を使用して実行できます...

$("#mytable").html(myHtml);

それ以外の場合は、何らかの方法で html をタグのinnerHTML属性に配置できれば機能するはずです。<div>

もう 1 つのオプションはdocument.createElement("TR");、コーディング スタイルを使用して個々のオブジェクトを自分で作成することです。

于 2012-10-15T17:16:07.930 に答える
0

DOM 組み込みの JavaScript メソッドを使用cloneNodeして、ノードを複製できます。

例えば

 var clone;
    function save()
    {
        var table = document.getElementById("sudoku");
        clone = table.cloneNode(true);
    }

    function restore()
    {
        document.getElementById("sudoku").parentNode.appendChild(clone);
    }

参照用: https://developer.mozilla.org/en-US/docs/DOM/Node.cloneNode

于 2012-10-15T17:23:21.887 に答える
-1

あなたが追加したコードは問題ないように見えますが、各ステートメントの後にセミコロンがないと思います。

    var クローン;
    関数保存()
    {
        var table = document.getElementById("数独");
        クローン = table.innerHTML;
    }

    関数の復元()
    {
        document.getElementById("数独").innerHTML=clone;
    }


また、jQuery html メソッドを使用することもできます。html() 関数について詳しく知りたい場合は、jQuery html () 関数をクリックしてください。

例えば

    `$('#sudoku').html(clone);`
于 2012-10-15T17:16:50.607 に答える