2017-05-19 6 views
2

私はちょうどなぜsocket.ioはクリックイベントでうまく動作しないのですか?

<div id="colorMe"> Change Me </div> 

を持っていると私は、任意のウィンドウ上でクリックしたときに、これはすべてのウィンドウ上のdiv着色するsocket.ioを使用しようとしているし、もう一度クリックしたときに、それはその色を変更する非常に単純なHTMLコードを持っていますどこにでも戻ることができます。

しかし、これは初めてのみ動作し、どこでも色が青色になりますが、再度クリックすると白く戻ることはありません。

これは、サーバーのコードです:

io.on('connection', function(socket){ 

    socket.on('changeColor', function(data){ 
    io.emit('currentColor',data); 
    }); 

}); 

そして、これは、htmlページではjavascriptの一部です:

var socket = io(); 

let div = document.querySelector('#colorMe'); 

socket.on('currentColor',(currentColor)=>{ 
    div.style.background = currentColor; 
}); 


function changeColor(){ 
    let color = (div.style.background == 'blue')? 'white' : 'blue'; 
    socket.emit('changeColor', color); 
} 

div.addEventListener('click', changeColor); 
+0

'changeColor'関数にブレークポイントを設定して、' currentColor'ハンドラ内の 'color'値と別のブレークポイントの値を見て、' currentColor'の値が何であるかを確認してください。 –

+0

@WillReese私はいつも青いことをしました –

+0

'div.style.background'の値は何ですか? –

答えて

2

多くのブラウザがスタイルに色の六角形の値を設定するには、値をRGBに属性。 html要素のstyle属性のCSSルールの文字列値を比較するのは危険です。代わりに、その情報を取得するためにDOMを参照するのではなく、別の変数に色の値を格納するだけです。

let div = document.querySelector('#colorMe'); 
let myColor = ""; 

socket.on('currentColor',(currentColor)=>{ 
    myColor = currentColor; 
    div.style.background = currentColor; 
}); 


function changeColor(){ 
    let color = (myColor == '#336699') ? '#ffffff' : '#336699'; 
    socket.emit('changeColor', color); 
} 
関連する問題