プロが教えるわが家の防犯対策術!

javascript初級者です。よろしくお願いします。

現在要素の色を判別して、白でなかったら徐々に色を変化させ白に近づけるプログラムを作成しています。

その中で「色を変化させる」関数を作成したのですが、どうしてもうまくいきません。
関数は以下のようなものです。
function changeColor(color){
if(color!="rgb(255, 255, 255)"){
 var oldcolor=color.match(/([0-9]{3}),.([0-9]{3}),.([0-9]{3})/);
 var newcolor="rgb("+(Number(oldcolor[1])+5)+","+oldcolor[2]+","+oldcolor[3]+")";
 alert(color);
 alert(newcolor);
 return(newcolor);
}
return(color);
}
alertはデバック用に書き足してあります。
さて、このプログラムを動作させると
まず「rgb(125, 255, 255)」というダイアログボックスが表示され
次に「rgb(130, 255, 255)」というダイアログボックスが表示されます。
ここまでは期待通りの動作です。

しかし、このダイアログボックスを閉じると「null」と書かれたダイアログボックスが開き、さらにそれを閉じるとfirebug上で「oldcolor is null」というエラーになってしまいます。

alert(newcolor);で正しい結果が返ってきているのだからnullって事は無いはずなのですが、とにかくうまくいきません。
「null」のダイアログボックスもナゾですし、分からないことだらけです。

どうかお助けください。よろしくお願いします。

A 回答 (1件)

試してみた感じ、


「rgb(128, 255, 255)」――という入力に対し、
「rgb(133,255,255)」――とカンマ後に空白が入らない結果を返してるので、次回matchに失敗してるのではないかと。
    • good
    • 0
この回答へのお礼

早い回答ありがとうございます。

なるほど、「null」のダイアログボックスは2回目の関数呼び出し時でしたか。勝手にnullになってしまうなんてとんだ勘違いでしたねww。

その点を踏まえてプログラムを見直した結果正常に動作させることができました。
ただし、次回呼び出し時に「null」が返ってくる理由としては、2回目は別の要素から引数をとっていたのですが、その要素のstyleをhtmlタグではなく、スタイルシートで指定していたことが原因のようでした。
タグ内にstyle="backgroundColor=○○;"と書き足すことによって正しく動作しました。

とは言え教えて頂いた点には非常に助けられました。
ありがとうございました。

お礼日時:2012/05/29 14:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!