1

やらなければならないJavaScriptの割り当てがあります。文ジェネレータを構築する必要があります。これをChromeで実行すると、ボタンをクリックしても何も起こりません。コンソールログを確認すると、すでに機能Uncaught ReferenceError: mySubject is not defined.していると定義したと思いますか?element1.onclick

これはこれまでの私のコードです:

<body>
    <div id="container">
        <div id="buttons">
            <button id="btn1">Generate subject</button>
            <input name="subject" type="text" id="subject"
            />
            <button id="btn2">Generate verb</button>
            <input name="verb" type="text" id="verb" />
            <button id="btn3">Generate adjective</button>
            <input name="adj" type="text" id="adj" />
            <button id="btn4">Generate object</button>
            <input name="object" type="text" id="object" />
        </div>
        <!--buttons closing div-->
        <div>
            <p id="output">asjkldhfahfjasf;d</p>
        </div>
        <!--output closing div-->
    </div>
    <!--container closing div-->
    <script>
        var subject = new Array("Mel Gibson", "Optimus-Prime", "The Cat-lady", "The student", "My Dentist");

        var verb = new Array("licks", "pets", "hugs", "stabs", "eats");

        var adj = new Array("fat", "ugly", "delicious", "redundant", "hopeless");

        var object = new Array("cat", "bacon-strip", "dog-house", "bigmac", "hobo");


        var element1 = document.getElementById("btn1");
        var element2 = document.getElementById("btn2");
        var element3 = document.getElementById("btn3");
        var element4 = document.getElementById("btn4");

        element1.onclick = function() {
            mySubject = subject[Math.random() * subject.length]
        };

        element2.onclick = function() {
            myVerb = verb[Math.random() * verb.length]
        };

        element3.onclick = function() {
            myAdj = adj[Math.random() * adj.length]
        };

        element4.onclick = function() {
            myObject = object[Math.random() * object.length]
        };

        document.getElementById("output").innerHTML = mySubject + myVerb + " the" + myAdj + myObject + ".";
    </script>
</body>

私はとても迷子になり始めていて、何をすべきかわからず、これは私が抱えている多くの問題の1つにすぎません。

編集:

だから私はJavascriptで助けを得て、出力を除いてすべてが機能しています。出力divに出力したいのですが、何も出力されません。これが私のコードです:

<h1>The Amazing Fantastical Sentence Generator!</h1>

<h4>Have hours of fun with your imaginary friends!</h4>
</div><!--title closing div-->
<div id="buttons">

<button id="btn1">Generate subject</button>
<input name="subject" type="text" id="insubject"/>



<button id="btn2">Generate verb</button>
<input name="verb" type="text" id="verb"/>

<button id="btn3">Generate adjective</button>
<input name="adj" type="text" id="adj"/>


<button id="btn4">Generate object</button>
<input name="object" type="text" id="object"/>

<div >
<p id="output"></p>
</div><!--output closing div-->

</div><!--container closing div-->

<script>


var subject=new Array("Mel Gibson", "Optimus-Prime", "The Cat-lady", "The student", "My        Dentist");

var verb=new Array("licks", "pets", "hugs", "stabs", "eats");

var adj=new Array("fat", "ugly", "delicious", "redundant", "hopeless");

var object=new Array("cat", "bacon-strip", "dog-house", "bigmac", "hobo");


var element1=document.getElementById("btn1");
var element2=document.getElementById("btn2");
var element3=document.getElementById("btn3");
var element4=document.getElementById("btn4");

element1.onclick=function()  {document.getElementById('insubject').value=subject[Math.floor(Math.random()*(subject.length))];}

element2.onclick=function(){document.getElementById('verb').value=verb[Math.floor(Math.random()*(verb.length))];}

element3.onclick=function(){document.getElementById('adj').value=adj[Math.floor(Math.random()*(adj.length))];}

element4.onclick=function(){document.getElementById('object').value=object[Math.floor(Math.random()*(object.length))];}

document.getElementById("output").innerHTML= document.getElementById("insubject").value + document.getElementById("verb").value + " the" + document.getElementById("adj").value + document.getElementById("object").value + ".";


</script>
</body>
</html>
4

5 に答える 5

0

関数内で宣言された変数はそれらの関数に対してローカルです。つまり、これらの関数の外でそれらを使用することはできません。関数の外部で変数をグローバルとして宣言してみてください。

于 2013-03-06T12:55:17.673 に答える
0

コンソールログを確認すると、Uncaught ReferenceError:mySubject isnotdefinedと表示されます。element1.onclick関数ですでに定義していると思いましたか?

JavaScriptスコープは関数スコープです。関数内で宣言された変数は、その関数とネストされた関数からのみアクセスできますが、外部関数からはアクセスできません。

関数の外部にもアクセスしたい場合は、削除mySubjectした場所で関数を宣言する必要がありますverb, subject, etc..

さらに、クリックイベントがコマンドを割り当てる前にdocument.getElementByIdコマンドが使用している問題がまだある場合でもmySubject、それは別の問題だと思います。

于 2013-03-06T12:55:40.183 に答える
0

mySubject変数をmyVerbおよびmyAdjとともに次のように定義する必要があります。

var mySubject;
var myVerb;
var myAdj;
于 2013-03-06T12:57:33.723 に答える
0

内で定義していfunctionます。関数の外側でそれらを宣言してから、内側の値を割り当ててみてください。

于 2013-03-06T13:11:19.380 に答える
0

だから私はこれを修正する方法を考え出しました。

コードを再度編集した後、すべてのボタンは機能していましたが、出力divに正しく出力されていませんでした。そこで、配列で実行されていたすべてのMath.Random方程式を宣言して、すべてがデフォルトの回答になるようにしました。また、出力divに表示されるデフォルトの出力を作成しました。

var subStr = subject[Math.floor(Math.random()*(subject.length))];
var verbStr = verb[Math.floor(Math.random()*(verb.length))];
var adjStr = adj[Math.floor(Math.random()*(adj.length))];
var objStr = object[Math.floor(Math.random()*(object.length))];

document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " .";

次に、onclickイベントを変更しました。

element1.onclick=function(){

subStr = subject[Math.floor(Math.random()*(subject.length))];
document.getElementById('insubject').value=subStr;
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " .";

}

element2.onclick=function(){

verbStr = verb[Math.floor(Math.random()*(verb.length))];
document.getElementById('verb').value=verbStr;
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " .";
}


 element3.onclick=function(){

adjStr= adj[Math.floor(Math.random()*(adj.length))];
document.getElementById('adj').value=adjStr;
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " .";
}

element4.onclick=function(){

objStr= object[Math.floor(Math.random()*(object.length))];
document.getElementById('object').value=objStr;
document.getElementById("output").innerHTML= subStr + " " + verbStr + " the " + adjStr + " " + objStr + " .";
}

これで、各Math.randomが再度計算され、特定のテキストフィールドに入力され、出力divに出力されました。

于 2013-03-13T09:16:10.910 に答える