0

テキストボックスの値に等しい pop_size 変数を渡そうとすると問題が発生します。この変数は、テキストボックスの値とともにスクリプトで使用されます。ボタンをクリックすると、値が変更され、変数の値が更新され、ページがリロードされ、変数がテキストボックスの値に設定されます。

<form name="myform1" action="" method="get"> 
    Input the number of populations<br />
    <input type="number" name="pop" id="pop" value=5 /><br />
    <input type="button" name="b1" id="b1" value="Click to set" 
           onClick="setValue()" /><br /> 
</form>  

function setValue() { 
    var test, test1;
    test=parseInt(document.getElementById('pop').value);
    pop_size = test;
} 
4

1 に答える 1

0

私があなたを正しく理解していれば、リロードするまでは正常に機能する変数セットを持っていますが、その後は失われます。

ページのリロード後も変数を存続させるために、私が知っている基本的な戦略が 2 つあります。

最初にリストするものは、より複雑に見えます。基本的なことはお伝えしますが、必要に応じて詳しく説明します。値を取得したら、クエリ文字列内の Web ページのアドレスに追加します。それは次のようになりますwindow.location += "?pop_size=" + pop_size;が、それには多くの固有の問題があります。クエリ文字列をチェックして抽出するスクリプトがpop_size必要であり、クエリ文字列を更新するときに既存の pop_size を置き換える必要があります。それは機能し、クエリ文字列と JavaScript について説明している Web ページはたくさんありますが、もっと簡単な方法があります。

HTML5 を使用している場合、より簡単な解決策はsessionStorageを使用することです。現在、すべての主要なブラウザーでサポートされていますが、(MDN に) 最初に提供したリンクは、後方互換性を提供できるポリフィルを提供します。ユーザーがブラウザ ウィンドウを閉じるまで有効な変数をブラウザに保存できます。

値を保存するには、MDN は次のことを推奨します:

sessionStorage.setItem("pop_size", pop_size);

次のように pageLoad の値を取得します。

document.getElementById('pop').value = sessionStorage.getItem("pop_size") || 5;  // if it's not found, default back to 5.

正直なところ、私はその構文を見たことがなく、なぜ MDN がそれを推奨しているのかわかりません。sessionStorage オブジェクトのより標準的な使い方はさらに簡単です。

sessionStorage.pop_size = pop_size;
...
document.getElementById('pop').value = sessionStorage.pop_size || 5; // if it's not found, default back to 5.
于 2013-10-07T14:48:12.827 に答える