質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

4回答

2489閲覧

3行3列のマスに○×に切り替わる処理を与える

Alpha

総合スコア41

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/06/10 04:06

以下のプログラムで3行3列のマスに初期状態が空白(スペース)でクリックすると○×に切り替わるようにしたいのですがマスしか表示されず、クリックしても切り替わらなくなってしまいました。
どこがおかしいのでしょう。

<script language="JavaScript"> function init(){ document.tick.r1c1.value =" "; } function ticktack(){ if(document.tick.r1c1.value.match(/^×$/)){ document.tick.r1c1.value = "○"; }else{ document.tick.r1c1.value = "×"; } } </script> <form name="tick"> <table> <tr> <td> <input type="button" name="r1c1" onclick="ticktack()"></td> <td> <input type="button" name="r1c2" onclick="ticktack()"></td> <td> <input type="button" name="r1c3" onclick="ticktack()"></td> </tr> <tr> <td> <input type="button" name="r2c1" onclick="ticktack()"></td> <td> <input type="button" name="r2c2" onclick="ticktack()"></td> <td> <input type="button" name="r2c3" onclick="ticktack()"></td> </tr> <tr> <td> <input type="button" name="r3c1" onclick="ticktack()"></td> <td> <input type="button" name="r3c2" onclick="ticktack()"></td> <td> <input type="button" name="r3c3" onclick="ticktack()"></td> </tr> <input type="button" name="r1c1" onclick="ticktack()"> </table>

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

これってコードすべてですか?
処理しているのが r1c1 しか見ていないので、どのみちうまく動いていないのかな、と思いました。
もし可能であればjsdo.itなどを利用して実際に問題の出ているコードをシェアすると明確な答えが得られると思います。

ちなみにですが、現状の実装の方向性にも問題がありそうです。
まず内部的に(配列で)3x3のデータを保持して、それを表示するだけのものとしてテーブルを用意したほうがいいかなと思いました。

そのうえで、セルがクリックされたタイミングで「どのセルがクリックされたか」を調査し、該当のデータを更新、それを再びテーブルに反映しなおす、みたいなほうがいいかなと思います。

投稿2016/06/10 04:23

edo_m18

総合スコア2283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Alpha

2016/06/10 04:33

修正して ``` </script> <form name="tick"> <table> <tr> <td> <input type="button" name="r1c1" onclick="ticktack()"></td> <td> <input type="button" name="r1c2" onclick="ticktack()"></td> <td> <input type="button" name="r1c3" onclick="ticktack()"></td> </tr> <tr> <td> <input type="button" name="r2c1" onclick="ticktack()"></td> <td> <input type="button" name="r2c2" onclick="ticktack()"></td> <td> <input type="button" name="r2c3" onclick="ticktack()"></td> </tr> <tr> <td> <input type="button" name="r3c1" onclick="ticktack()"></td> <td> <input type="button" name="r3c2" onclick="ticktack()"></td> <td> <input type="button" name="r3c3" onclick="ticktack()"></td> </tr> </table> ``` にするとr1c1にしか処理が行われません。 ``` function init(){ document.tick.r1c1.value =" "; } function ticktack(){ if(document.tick.r1c1.value.match(/^×$/)){ document.tick.r1c1.value = "○"; }else{ document.tick.r1c1.value = "×"; } } ``` これをあと8個書くのはさすがに手間がかかってしまい正しいとは思えませんが、 もしループ等を用いるとどのような方法があるでしょうか。
edo_m18

2016/06/10 04:51

以下のようにするとすべてのセルにイベントを設定することが出来ます。 あとは、ハンドラの中で `this` を使えばセル自身の情報が参照できるので、そこから `name` を取得したり、値を参照したり、といったことが可能になります。 ``` <table id="formTable"> <tr> <td name="name-a">a</td> <td name="name-b">b</td> <td name="name-c">c</td> </tr> </table> <script> function handler(evt) { // thisは `td` を参照している var name = this.getAttribute('name'); console.log(name); } [].slice.call(document.querySelectorAll('#formTable td')).forEach(function (cell) { cell.addEventListener('click', handler, false); }); </script> ```
edo_m18

2016/06/10 04:53

あ、すみません。例に則するならtdの中のinputにイベントを設定するのが正しかったですね。`querySelectorAll`のところを `#formTable td input` にすると設定できます。
guest

0

<input type="button" name="r1c1" onclick="ticktack()">が2箇所あります。r1c1と同じ名前が使われているため切り替わりません。最下部にあるボタンのname属性をbtnなどに変えれば良いかと。

投稿2016/06/10 04:51

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

http://jsdo.it/katoy/WWTL に書いてみました。
イメージ説明

html

<div id="board"> </div>

javascript

var SPACE = ' '; var STONES = ['☓', '◯' ]; var count = 0; $('#board').on('click','td', function(e) { if ($(this).text() === SPACE) { $(this).text(STONES[count % 2]); count += 1; } }); function make_board(w, h) { var table = document.createElement('table'); // table を生成 for (var y = 1; y <= h; y++) { var tr = document.createElement('tr'); // tr を生成 for (var x = 1; x <= w; x++) { var td = document.createElement('td'); // td を生成 td.id= 'C' + (x * 10 + y); // td に idを付与 td.innerHTML = SPACE; tr.appendChild(td); // tr に td を追加 } table.appendChild(tr); // tr をテーブルへ追加 } $('#board').append(table); } make_board(3, 3);

css

* { margin: 0; padding: 0; border: 0; } body { background: #fdd; font: 30px sans-serif; } table, td, th { border: 2px #000000 solid; }

make_board(3, 3) を make_board(8, 8) に変更すれば、8 x 8 のテーブルが表示されます。

投稿2016/06/10 14:14

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

先ほどの続きですね。
ticktack関数内で、r1c1を固定で参照しているからですね。

以下は先ほどの回答のように、引数でidを渡して処理するサンプルです。
inputタグのところは、nameではなくidに変更しました。

HTML

1<html> 2<head> 3<script language="JavaScript"> 4 function ticktack(id){ 5 if(document.getElementById(id).value.match(/^×$/)){ 6 document.getElementById(id).value = "○"; 7 }else{ 8 document.getElementById(id).value = "×"; 9 } 10 } 11 12 </script> 13</head> 14<body> 15 <form name="tick"> 16 <table> 17 <tr> 18 <td><input type="button" id="r1c1" onclick="ticktack('r1c1')"></td> 19 <td><input type="button" id="r1c2" onclick="ticktack('r1c2')"></td> 20 <td><input type="button" id="r1c3" onclick="ticktack('r1c3')"></td> 21 </tr> 22 <tr> 23 <td><input type="button" id="r2c1" onclick="ticktack('r2c1')"></td> 24 <td><input type="button" id="r2c2" onclick="ticktack('r2c2')"></td> 25 <td><input type="button" id="r2c3" onclick="ticktack('r2c3')"></td> 26 </tr> 27 <tr> 28 <td><input type="button" id="r3c1" onclick="ticktack('r3c1')"></td> 29 <td><input type="button" id="r3c2" onclick="ticktack('r3c2')"></td> 30 <td><input type="button" id="r3c3" onclick="ticktack('r3c3')"></td> 31 </tr> 32 </table> 33</body> 34</html>

まずはHTMLとJavaScriptの基礎を学習することをお勧めします。

投稿2016/06/10 04:31

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問