2011-12-06 20 views
0
var flashStep = 1; 
function flash() { 
if(flashStep==1) { 
document.bgColor="FFFF00"; 
flashStep=2; 
} 
else { 
document.bgColor="FF0000"; 
flashStep=1; 
} 
} 
var task = window.setInterval("flash()",1000); 

このコードは、画面をフラッシュするようになっていますが、まったく動作しません。 http://jsfiddle.net/phjnM/2/。これはなぜ機能しないのですか?私には完璧に見えません画面を非表示にする方法

答えて

1

問題があること(グローバル)の範囲であります文字列をsetIntervalに渡すと適用されます。代わりに関数参照を渡すと、次のようになります。

var task = window.setInterval(flash、1000);

は、他のオプションhttp://jsfiddle.net/phjnM/7/

を参照してくださいうわ、ダウン有権者

1

JSFiddle内のコードはonload関数でラップされているためです。

enter image description here

それを修正する関数への参照を渡します。

var task = window.setInterval(flash,1000); 

また、左側のメニューから(no wrap)オプションを選択することもできます。


ところで、これを行うと、ドキュメントの背景を色づけることができます。

var i = 0; 
var task = setInterval(flash, 1000); 

function flash() { 
    document.documentElement.style.backgroundColor=(i = ~i) ? '#ff0' : '#f00'; 
} 

JSFIDDLE DEMO

+1

...あなたのコードは、onloadイベント/ onreadyハンドラのスコープで定義されていませんように「NOWRAP」オプションを選択しますjsfiddleです。あなたは説明がありますか? – RightSaidFred

+1

@minitech:どうしてですか? [解決策1](http://jsfiddle.net/NCCRp/)、[解決2](http://jsfiddle.net/NCCRp/1/) – RightSaidFred

+0

はい、大丈夫です、あなたは参照を渡すと言いました。 bgColorについてはどうですか?それは良さのためにBGCOLORです!私はdownvoteを削除します、私はちょうどBGCOLORにこの反射的な反応を持っている! – Ryan

0

の代わりに:

document.bgColor="FFFF00" 

このフォームを必要とする:あなたは.body.style.を欠落していた

document.body.style.backgroundColor="#FFFF00"; 

、あなたはスタイルのために間違った名前を持っていました属性backgroundColor aあなたは色の値に#を持っている必要があります。

さらに

、あなたのsetTimeout()は次のようにする必要があります:あなたは

window.flash = function() { 

:あなたのフィドルで

var task = setInterval(flash,1000); 

、あなたはにそれが定義だ変更することで、グローバルであることをフラッシュ機能を得ることができますこれはすべてjsFiddleの改訂版で見ることができます:http://jsfiddle.net/jfriend00/h4VZm/

+0

'bgColor'は古い学校です。 (少なくとも、私がテストした特定のブラウザで動作します)。しかし、 'style.backgroundColor'を設定する方が良い計画です。 – nnnnnn

0

window.setInterval(flash, 1000)を使用してください。

この特定の問題は、おそらくjsfiddleでコードを実行するときのスコープの問題でした。一般に、実際にコールバックを渡したいときにはコードを文字列として渡さないでください.Javascriptでは関数自体を渡すことで実行できます。

6

いくつかの問題があります。まず、bgColorは要素のプロパティです。documentには該当しません。おそらくあなたはdocument.bodyを意味しましたか?第二に、あなたはです。bgColorを使用しています。しないでください。代わりにstyle.backgroundColorを使用してください。第3に、おそらく2つの状態に対してブール値を使用することになります。第4に、文字列をsetIntervalまたはsetTimeoutに渡さないでください。だから、あなたのコード、書き換えは、の線に沿って何かのようになります。

var flash = false; 
var task = setInterval(function() { 
    if(flash = !flash) { 
     document.body.style.backgroundColor = '#ff0'; 
    } else { 
     document.body.style.backgroundColor = '#f00'; 
    } 
}, 1000); 
+0

+1 *すべての問題の概要。 – deceze

+1

これは変更すべき事柄の要約ですが、実際にはOPのコードが動作しない理由、つまり一般的にはsetIntervalに文字列を渡すのは実際に_wrong_ではないにもかかわらず説明していませんスコープに影響し、フラッシュ関数がonload/onreadyハンドラの内部で定義されている場合は機能しません。 'document.bgColor'は動作します(少なくともいくつかのブラウザでは動作します)。 – nnnnnn

+0

@nnnnnn:それは動作しますが、それでも恐ろしいです。 IE6のようなもの。 – Ryan

0

今その作業を参照してください、 http://jsfiddle.net/phjnM/8/

+0

なぜjQueryを使用しましたが、jQueryは使用しませんでしたか? jQueryを使用する場合は、すべて使用してください。ハーフベークした溶液は使用しないでください。 – Ryan

+1

@minitech:明らかに、JayanthaはjsFiddleが隠していることを明示するために、準備ができたコールバックを借りています。なぜこれはあなたにとって問題なのですか?半分焼いたコメントで十分です。 – RightSaidFred

+0

はい、あなたは右がフレッドを言った:) –

関連する問題