
javascript初心者です。
現在テーブルの作成を行っており、マウスを乗せたら色が変わるやクリックして指定の色に変えるなどは実現いたしましたが、クリックするごとに色が変わる(赤→青→赤→青・・・など)ものができません。
現在下記のように作っていますがエラーが起きてしまいます。
どのように直せばよいかご教授願います。
<script type="text/javascript">
<!--
var color1 = "#ff0000";
var color2 = "#0000ff";
function onC(obj){
if (obj.style.backgroundColor = color1){
obj.style.backgroundColor = color2;
}
else if (obj.style.backgroundColor = color2){
obj.style.backgroundColor = color1;
}
}
//-->
</script>
<body>
<table border="1" cellpadding=20>
<tr>
<td onClick = "onC(this)"><br>
</td>
</tr>
</table>
</body>
No.4ベストアンサー
- 回答日時:
styleのbackgroundColorは
<td style="background-color:~">
みたいな記述がなければ
"style"も"backgroundColor"も存在しないのでいきなり比較はできない。
(ヘッダ部や外部スタイルシートで指定した色はそのオブジェクトのstyleプロパティではない。)
標準的なブラウザならgetComputedStyle、IEならcurrentStyleで結果的にどう設定されているかを読み出す事はできるけど、ちょっと面倒なのでここではパス。
とにかくエラーが起きないようにするには、"style"がある事を確認してから比較する。
ついでに、戻すときは元の色を上書きするのではなく設定した色を削除すればいい。
というわけで以下サンプル。
<html>
<head>
<title></title>
<style type="text/css">
td{background-color:#0000ff}
</style>
<script type="text/javascript">
function bgSwap(TD) {
if(TD.style && TD.style.backgroundColor)
TD.style.backgroundColor = '';
else
TD.style.backgroundColor = '#ff0000';
}
</script>
</head>
<body>
<table>
<tr>
<td onclick="bgSwap(this)">セル1</td>
<td onclick="bgSwap(this)">セル2</td>
</tr>
</table>
</body>
</html>
>>styleのbackgroundColorは
>><td style="background-color:~">
>>みたいな記述がなければ
>>"style"も"backgroundColor"も存在しないのでいきなり比較はできない。
>>(ヘッダ部や外部スタイルシートで指定した色はそのオブジェクトのstyleプロパティではない。)
backgroundColorは特に記述がなければ初期値は#FFFFFFとなると思っていました。
>>とにかくエラーが起きないようにするには、"style"がある事を確認してから比較する。
>>ついでに、戻すときは元の色を上書きするのではなく設定した色を削除すればいい。
とてもわかりやすく説明していただき、参考になりました。
サンプルを参考に自分なりにカスタマイズしていきたいと思います。
今回はありがとうございました。
No.3
- 回答日時:
例えば、このようにします。
↓<html>
<head>
<title>セルの背景色を変更する</title>
<script type="text/javascript">
<!--
var color1 = "#ff0000";
var color2 = "#0000ff";
var color3 = "#cccccc";
ic=1;
function setCellBG1() {
ic=-1*ic;
if ( ic == -1 ) {
this.style.backgroundColor = color1;
} else {
this.style.backgroundColor = color2;
}
}
window.onload = function() {
var tdTag = document.getElementsByTagName("td");
for (var i=0; i<tdTag.length; i++){
tdTag[i].style.backgroundColor = color3;
tdTag[i].onmousedown = setCellBG1;
}
}
// -->
</script>
</head>
<body>
<p>セルの上でマウスをクリックして下さい</p>
<table border="1">
<tr><td>セル1</td><td>セル2</td></tr>
<tr><td>セル3</td><td>セル4</td></tr>
</table>
</body>
</html>
icを用いて比較の対象をはっきりさせているという
解釈でよろしかったでしょうか。
window.onload=function()以降が理解しきれないのですが
今後のために理解できるよう
javascriptの勉強をしていきたいと思います。
今回はよいサンプルをありがとうございました。
No.2
- 回答日時:
初期値として 何も設定されていない場合 比較部分を修正しても変化がありません
if ( obj.style.backgroundColor == color1 ) {
obj.style.backgroundColor = color2;
} else {
obj.style.backgroundColor = color1;
}
といった具合に判断したほうが良いでしょう
上記の比較演算子と初期値にきをつけてやってみましたが
セルをクリックすると
stack overflow at line:0
と表示されて動きませんでした。
よくわかりませんが
やはり初期値は必要なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS cssが効かなくて困ってます 1 2023/01/01 23:57
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<td>の中を移動する、外部J...
-
DIVで同一ページ内にポップアッ...
-
テーブルの背景色を複数変更する
-
CSVファイルから画像名を取得し...
-
テーブルの外にマウスを出した...
-
連動テーブルのクロスハイライト
-
JavaScriptでイメージを自動的...
-
csvファイルのデータを変数とし...
-
javascript でテーブル操作
-
【jQuery】tableループ内のIDの...
-
マウスオンで指定の位置で画像...
-
javascriptでクリックするごと...
-
新しくフォルダを作成したい
-
テキストだけonCllickを検知したい
-
CSVファイルを読みこみ、プルダ...
-
IEではうまく行くのですが他の...
-
Array.sortメソッドのデフォル...
-
return trueとreturn falseの用...
-
Java scriptのonchangeについて 続
-
onclickで画像と文字を別々の場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<JavaScript>tableタグを入力不...
-
selectのonChangeが動作しません
-
画面表示とともに、テーブルの...
-
プルダウンメニューを表の中に...
-
【jQuery】tableループ内のIDの...
-
テーブルの行数を可変長にした...
-
tbody要素のinnerHTMLが書き換...
-
クリックごとに文字色が交互に...
-
javascriptでクリックするごと...
-
javascriptで<table>背景色の取得
-
javascriptで画像をテーブルに...
-
下記のようなメニューを作成し...
-
テキストエリアに入力した改行...
-
csvファイルのデータを変数とし...
-
Table内TDの子要素を移動させた...
-
カレンダーに印を付けたい
-
javascriptで表に画像を貼る
-
onMouseでbackgroundの画像を変...
-
<td>の中を移動する、外部J...
-
table内で上下するfloating men...
おすすめ情報