2017-04-25 15 views
0

HTMLオブジェクトのIDを変更するJavaScriptの課題を作成しました。JavaScriptでHTMLタグの機能を使用できない

選択肢の間を循環するボタンを設定したいと思います。今すぐボタンは機能を実行していません。

コードを見て、私が間違っていることを教えてください。

a = 0; 
 
n = 1; 
 
i = 0; 
 

 
function changexc(a, n) { 
 
    document.getElementById('effect00').id = "effect00" + (a + i); 
 
} 
 

 
function counterxc() { 
 
    i = n++; 
 
    return n; 
 
} 
 

 

 
document.write("<br>" + "a is " + a + "<br>"); 
 

 
document.write(" i is " + i + "<br>"); 
 

 
document.write(" n is " + n + "<br>"); 
 

 
document.write(" n + a is " + (n + a) + "<br>"); 
 

 

 

 
changexc(a);
<style>#effect001 { 
 
    max-width: 100px!important; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 

 
#effect002 { 
 
    max-width: 200px!important; 
 
    height: 100px; 
 
    background-color: blue; 
 
    display: block; 
 
} 
 

 
#effect003 { 
 
    max-width: 300px!important; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    background-color: yellow; 
 
    display: block; 
 
} 
 

 
</style>
<div id="effect00"></div> 
 

 
<button type="button" id="thatdarnbutton" onclick="counterxc()">Click Me</button>

+1

を動作するはずダウンを参照してください ?そして、あなたはどこにjavascriptを含んでいますか?頭の中や体の終わりの上に? –

+1

私はonclick関数で 'n'を返す代わりに' changexc'関数を呼び出すべきだと思います。 – nocodename

+1

私の見たところでは、あなたの 'counterxc'は変数をある値に設定するだけです...それはそれについてです – Lixus

答えて

0

このコードは動作します - ちょうど "厳格な使用"

var a = 0; 
 
var n = 1; 
 
var i = 0; 
 

 
function changexc() { 
 
    console.log(" added class : " + "effect00" + (a + i)); 
 
    document.getElementById("effect00").className = "effect00" + (a + i); 
 

 
    console.log("<br>" + "a is " + a + "<br>"); 
 

 
    console.log(" i is " + i + "<br>"); 
 

 
    console.log(" n is " + n + "<br>"); 
 

 
    console.log(" n + a is " + (n + a) + "<br>"); 
 

 

 

 

 
} 
 

 
function counterxc() { 
 
    i = n + 1; 
 
    n++; 
 
    
 
    if(n >3) { 
 
    n = 0; 
 
    } 
 
    
 
    changexc(); 
 
} 
 

 

 

 

 
changexc();
.effect001 { 
 
    max-width: 100px!important; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 

 
.effect002 { 
 
    max-width: 200px!important; 
 
    height: 100px; 
 
    background-color: blue; 
 
    display: block; 
 
} 
 

 
.effect003 { 
 
    max-width: 300px!important; 
 
    height: 200px; 
 
    border-radius: 50%; 
 
    background-color: yellow; 
 
    display: block; 
 
}
<div id="effect00"> 
 

 
    hello world! 
 

 
</div> 
 

 
<button type="button" onClick="counterxc();">Click Me</button>

その下の説明を参照してください。 javascript環境(ノード、ブラウザなど)は、宣言する前に変数を使用することはできないと仮定しますが、そうすることをお勧めします。その良い練習:

しかし、他の人がコメントしたように - 基本から始めて、ブラウザがjavascriptとノードなどの他の環境をどのように使用するかを学びます。私はまだ新しいES6とES7の構文とすべての新しいビルドシステムに慣れています。ここで言及すべきことはたくさんありますが、私は "あなたはJSを知らない"シリーズの書籍をお勧めします

+0

あなたは何を意味するのかよく分かりません。私はあなたがお勧めするものを見てうれしい。しかし、ボタンをクリックしてもカウンター・コードが機能しない理由はまだわかりません。私が試してみると私のコンソールには何のエラーもありません。しかし私は、IまたはNの変化のための可変値を見ない。私はまた、正しい色や形が現れるのを見ない。 –

+0

こんにちはアレックス、あなたが達成しようとしていることを知っていれば、javascriptをデバッグするのは難しいことではありません。この場合は、最後にchangexc関数を呼び出してnの値を更新し、変更を要素 "effect00"に適用する必要があります。 上記の更新されたコードをご覧ください! – Digvijay

0

あなたはコードはうまく動作しますが、少し作業が必要です。 まず作業を開始する前にすべての要素がロードされていることを確認してください。use setTimeout。私はここにあなたの問題を解決し、これは今ではすべてのエラーを投げるん

a = 0; 
 
n = 1; 
 
i = 0; 
 
var id = "effect00"; 
 

 
function changexc(a, n) { 
 
    document.getElementById(id).setAttribute("id", "effect00" + (a + i)); 
 
    id = "effect00" + (a + i); 
 
} 
 

 
function counterxc() { 
 
    i = n++; 
 
    write(); 
 
    return n; 
 
} 
 

 
function write() { 
 
    var resultDiv = document.getElementById(id); 
 
    var resultstring = "<br>" + "a is " + a + "<br>" 
 
    resultstring += " i is " + i + "<br>" 
 
    resultstring += " n is " + n + "<br>" 
 
    resultstring += " n + a is " + (n + a) + "<br>" 
 
    resultstring += "id is " + "effect00" + (a + i); 
 
    resultDiv.innerHTML = resultstring; 
 
    changexc(a) 
 
} 
 

 
setTimeout(function() { /// this is importent, wait untill elemtns have loaded 
 

 
    changexc(a); 
 
    write(); 
 

 
}, 100);
#effect001 { 
 
    max-width: 100px!important; 
 
    height: 200px; 
 
    background-color: red; 
 
    display: block; 
 
} 
 

 
#effect002 { 
 
    max-width: 200px!important; 
 
    height: 100px; 
 
    background-color: blue; 
 
    display: block; 
 
} 
 

 
#effect003 { 
 
    max-width: 300px!important; 
 
    height: 300px; 
 
    border-radius: 50%; 
 
    background-color: yellow; 
 
    display: block; 
 
}
<button type="button" id="thatdarnbutton" onclick="counterxc()">Click Me</button> 
 

 
<div id="effect00"></div>

+0

私はあなたの答えが好きです、すべてが働いています。しかし、私はいくつかのことを理解していません。なぜあなたはwrite関数の "id"を必要としますか?また、changexcがwriteで呼び出されるのは、最後に2回だけ呼び出すのではないということです。 –

+0

idが必要なので、結果をdivに書き込むことができます。divのidが変更されたため、変更された内容を知る必要があります。 counterxcがトリガされると、変更された内容を知って、writeメソッドを起動する必要があります。書き込みが失敗したら、nとiの値を変更して新しいIDが生成されたので、変数idを新しいidに設定します。 –

関連する問題