0

それぞれ異なる関数を含むいくつかの.jsファイルと、Webサイトの異なる部分を示すいくつかのHTMLファイルがあります。main.jsでvarlang="ENG"という変数を宣言しました。ただし、これは、ユーザーがWebサイトのコンテンツを変更するための言語を選択しない場合のデフォルトの言語です。index.htmlのボタンをクリックした場合:

<button id="french" onclick="changeLang('French')">French</button>

現在のブラウジング期間の残りの間、varlangの言語を恒久的に「FRE」に変更する必要があります。私はinnerHTML、クリックリスナー、新しい値を返す関数(つまり、var lang = setLanguage(inp))を使用しようとしましたが、何も機能しないようです。誰かがこれについて提案してくれませんか?私は大規模な既存のコードデータベースを処理していますですから、このコンテキストで機能するものが欲しいのですが(現在、Webサイトに「言語」機能を実装するためのより良い方法ではありません)、それは確かに長期的に取り組む改善になるでしょう。ありがとう!

4

2 に答える 2

2

私が正しく理解していれば、新しいドキュメントがロードされても情報を保持する必要があります。個々のドキュメントに関する限り、「プログラムの期間」はありませんが、sessionStorageオブジェクトの書き込みと読み取りを行うことで、セッション全体でデータを保存できます。

セットする:

sessionStorage.setItem('language', 'FRE');

得る:

var language = sessionStorage.getItem('language');

また、古いタイムリーなブラウザをサポートする必要がある場合に必要になる可能性のあるCookieを使用することもできます。

編集:あなたの質問を読み直してみると、ブラウザセッション全体で言語変数をまったく設定できなかったように聞こえます。その場合は、可変スコープの問題が発生していると思われます。たぶんchangeLang関数を見せてくれませんか?たとえば、langがグローバルスコープで宣言されている場合、設定関数は'var'を使用しないでください。使用しないと、ローカルスコープでのみその名前の新しい変数が作成されます。

var lang = 'ENG';
function changeLang(newLang) { lang = newlang };
于 2013-01-13T06:07:47.710 に答える
1

問題は可変スコープにあるようです。これがJavaScript変数スコープである複雑なものに関する問題です:JavaScriptスコープ

編集:これがスコーピングの問題ではない場合は、セミコロンの回答を見てください。

基本的な前提は、lang変数がグローバル変数である必要があり、それからコード内の他の場所でそれを変更できる必要があるということです。

次のようになります。

メインファイルで、関数のvarで、次のようなキーワードを使用して変数を宣言します。var lang = 'ENG';

次に、(関数内で)変更する場合は、次のようなキーワードを使用せずに変数を設定します。var

function changeLanguage(l) {
    lang = l;
}

そうすれば、lang他の場所で使用して、最新の値を取得できるはずです。

于 2013-01-13T06:34:02.447 に答える