1

初めての投稿ですが、本題に入ります。

ユーザーが名前を書き込むと、Javascriptがその値をグローバル変数「ch_name」に保存するフォームがあります。サイトの任意の時点でアラートを介してこの変数にアクセスすると、入力した正しい値が常に表示されます。ただし、常に未定義として表示される変数を使用してユーザーを参照しようとすると、アラートに対してのみ機能します。

コードが正しくロードされなかった場合に備えて、コードを並べ替えてみましたが、結果も得られませんでした。私はまだJavaScriptにかなり慣れていないので、それを正しく参照したかどうか疑問に思い始めました。

おそらく私のコードが混乱していることに気付くでしょうが、ここに私が持っているものがあります.

var ch_name; //my global variable

var data = new Array(); //I've taken a snippet out of an array of 8.
data[0] = '<p>Question 1</p>' + ch_name + "\n" + //ch_name is referenced on this line.
'<button onclick="results1()">Click Me</button>' + "\n" + 
'<button onclick="results2()">Click Me</button>' + "\n" +
'<button onclick="results3()">Click Me</button>';

function charName(form) { //This is the code that changes the global variable ch_name.
ch_name = document.nameform.user.value;
ranData = Math.floor(Math.random() * data.length);
document.getElementById("placeholder").innerHTML = data[ranData];
}

HTML スニペット:

<form NAME="nameform" method="GET">
<p>Enter your character name:</p> <input type="text" name="user" value="" />
    <input type="button" value="Start" onClick="charName(this.form)"/>
</form>
<div id="placeholder"></div>

どこでもアラートを介してch_nameを参照すると、正しい結果が得られ、ページの読み込み時に空白になり、文字列を入力すると正しい名前が得られます。しかし、配列変数を介して参照するたびに、未定義が表示されます。これは完全なコードではありませんが、変数名などに競合がないことは確かです。何度かスキャンしましたが、私が馬鹿であることは確かです。

これに対する回避策はありますか?ch_name の背後にあるコード全体を完全に削除して、ページの他の領域に集中する準備ができています。

読んでくれてありがとう。

4

2 に答える 2

1

あなたの問題は、data配列が生成されたときch_nameに値がないため、空白になることだと思います。を変更ch_namedataても正しい値で再生成されません。

これに対する解決策は、グローバル キャラクター名を変更するたびにregenerate_dataデータ配列を再生成する関数を持つことです。data

于 2013-01-06T17:50:44.017 に答える
0

データはあなたが考えているようには変わりません。

あなたにとって最善の策は、dataArray を関数に置き換えることだと思います。

これでch_name、関数を実行するたびにパラメーターが動的に作成されます。つまり、ボタンが押されるたびに、データが更新されます。

ページ内のデータをどのように変更しますか?

var ch_name; //my global variable
function charName(form) { //This is the code that changes the global variable ch_name.
    ch_name = document.nameform.user.value;
    ranData = Math.floor(Math.random() * data.length);
    document.getElementById("placeholder").innerHTML = getranData(ranData);
 }

function getranData(num){
   if(num==0)
          return '<p>Question 1</p>' + ch_name + "\n" + //ch_name is referenced on this line.
          '<button onclick="results1()">Click Me</button>' + "\n" + 
          '<button onclick="results2()">Click Me</button>' + "\n" +
          '<button onclick="results3()">Click Me</button>';
  else if (num==1) ; ///...and so on
}
于 2013-01-06T18:13:37.370 に答える