0

アプリケーションの状態を記録するグローバル変数window.current_indexがあります。つまり、javascript Web アプリケーションのどのページにいるのかを記録します。

次に、次のページにwindow.current_index移動し、状態の変化を反映するようにインクリメントするコード ブロックがあります (問題を確認するのを難しくする、無関係な DOM 操作コードを削除しました)。

$('#next-page').click(function() {
    console.log('current index is ' + window.current_index);
    var next_index = window.current_index + 1;
    console.log('next index is ' + next_index);
    //update the index
    window.current_index = window.current_index + 1;
    console.log('current index is now ' + window.current_index);
});

最初は問題なく動作しますが、もう一度クリックすると、意図した結果が得られません。コンソール ロギングを使用すると、奇妙な出力が得られます。

current index is 2         main.js:57
next index is 3            main.js:59
current index is now 3     main.js:62
current index is 2         main.js:57
next index is 3            main.js:59
current index is now 3     main.js:62

window.current_index 関数を再度起動すると、以前と表示されていたにもかかわらず、更新されていないように見えますか? この変数は、アプリの状態を保存してイベント ハンドラー呼び出し間で保持できるように、適切な範囲の変数ではありませんか? 明らかに機能していないため、そうではありません...何が間違っていますか?これはスコープの問題だと思いますが、どうすれば正しく行うことができるか、一生わかりません... :/

明確化:ここではページのリロードは行われず、ページはアクション間でリロードされません。JavaScriptの非表示/表示を介して新しい「フレーム」を表示するだけです。私も を使用していませんiframes。文字通り、1 ページのサイトで$('div').hide()とを使用しているだけです。$('div').show()

4

2 に答える 2

1

それは私にとってはうまくいきます

window.current_index = 0;
$('#next-page').click(function() {
    console.log('current index is ' + window.current_index);
    var next_index = window.current_index + 1;
    console.log('next index is ' + next_index);
    //update the index
    window.current_index = window.current_index + 1;
    console.log('current index is now ' + window.current_index);
});

http://jsfiddle.net/hHFkJ/1/

于 2013-06-18T08:48:02.577 に答える
0

このコードに問題はありません。同じセレクターを持つ 2 つのイベント ハンドラーがあったため、問題が発生しました。ばかげた感じ...

于 2013-06-18T08:45:46.237 に答える