-1

私は自分のスクリプトで次のことをしたい:

1 つの関数で 2 つの変数を宣言し、ウィンドウの読み込み時にこの関数を呼び出します。その後、他の関数でこれら 2 つの変数の値を使用します。関数の外でこれらの変数をグローバルとして宣言することなく、これを行うオプションはありますか?

繰り返しになりますが、ページの読み込み時に呼び出される関数内で変数を宣言することが重要です。

HTML コード:

<a href=''onclick='_default();return false;'>Link</a>
<div id='mydiv'></div>

Javascript:

function _default() {
    var x = document.getElementById('mydiv');
    var h = x.offsetHeight;
    _main(x, h);
}
_default();

function _main(x, h) {
    alert(x);
    alert(h);
}

このスクリプトが_default()ページの読み込み時に実行されることがわかります。_default()関数は に 2 つのパラメーターを渡し、変数およびで 2 つのアラートをスローする関数_main()を実行します。しかし、リンクをクリックしたときにこれら 2 つのアラートがスローされるようにするにはどうすればよいですか (上記の HTML コードを参照)。_main()xh

4

2 に答える 2

0

DOM の準備が整う前に実行されるため、コードは機能しません...次のように変更します。

function _default() {
    var x = document.getElementById('mydiv');
    var h = x.offsetHeight;
    _main(x, h);
}

function _main(x, h) {
    alert(x);
    alert(h);
}

window.onload = _default;

これにより、イベントがトリガー_default()されたときに関数が実行されます...メソッドの詳細については、こちらをご覧くださいloadwindow.onload

作業例はこちら

于 2012-05-17T10:34:12.047 に答える
0

あなたの問題を理解していれば、default() が初めて呼び出されたときにページが完全にレンダリングされていないため、「mydiv」が null になります。

_default() を呼び出す行を削除し、代わりに body onload から呼び出すと、期待どおりに機能することがわかります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript" language="javascript">
        function _default() {
            var x = document.getElementById('mydiv');
            var h = x.offsetHeight;

            _main(x, h);
        }

        function _main(x, h) {
            alert(x);
            alert(h);
        }
    </script>
</head>
<body onload="_default();">
    <a href='' onclick='_default();return false;'>Link</a>
    <div id='mydiv'>
    </div>
</body>
</html>`
于 2012-05-17T10:32:51.440 に答える