HTMLのtextareaの文字を書き換え
- 評価
- クリップ 0
- VIEW 1,959

退会済みユーザー
現在webページを作成しているのですが、二つ目のtextareaに決められたコマンドが打ち込まれた場合、一つ目のtextareaの中の文を書き換えていくというシステムを作りたいのですが、それは可能でしょうか
流れとしては
1.一つ目のtextareaで「./a.outを入力してください」という指示を書いておく
2.二つ目のtextarea(codeMirror)に指示された./a.outを入力してもらう
3.入力して正しければ、一つ目のtextareaが「つぎは・・・を入力しましょう」と文を書き換えていく
といった流れです。
もしありましたら、教えていただけると助かります。よろしくお願い致します
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>sample1-1</title>
<script src="lib/codemirror.js"></script>
<link rel="stylesheet" href="lib/codemirror.css">
</head>
<body>
<h1>sample</h1>
<br />
<br />
<div><textarea ROWS=20 COLS=60 style="border:thick ridge #7f7f7f;background-color:#ffffff;color:#000000;" readonly>
テスト</textarea></div>
<h2>ここに入力</h2>
<div><textarea id="code2" name="code2">
</textarea></div>
<script>
CodeMirror.fromTextArea(document.getElementById("code2"), {mode: "python", lineNumbers: true});
</script>
</body>
</html>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
動き的には、こんな感じですかね?
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
<div id="textarea1">
<textarea></textarea>
</div>
<div id="textarea2">
<p><span id="text">./a.out</span>と入力しましょう。</p>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
$("#textarea1 textarea").change(function () {
if ($(this).val() == $("#text").text()) {
$("#textarea2 p").html('次は、<span id="text">text</span>と入力しましょう');
}
}).change();
</script>
</body>
</html>
決められたコマンドというのが2つ以上あるならこんな感じにすればいいんじゃないでしょうか。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
<div id="textarea1">
<textarea></textarea>
</div>
<div id="textarea2">
<p><span id="text">./a.out</span>と入力しましょう。</p>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
var i = 0, commands = [
'text',
'text1',
'text2',
'text3'
];
$("#textarea1 textarea").change(function () {
if ($(this).val() == $("#text").text()) {
$("#textarea2 p").html('次は、<span id="text">' + commands[i] + '</span>と入力しましょう');
i++;
}
}).change();
</script>
</body>
</html>
わからないところとかあったらコメントとかでおしえてください。
補足
説明を入れたいときも、上でやっていることを参考にすると簡単に実現できます。
今回はtextarea2に新しくspan.introを追加してそこに説明を表示させています。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
<div id="textarea1">
<textarea></textarea>
</div>
<div id="textarea2">
<p><span id="text">./a.out</span>と入力しましょう。</p>
<span id="intro"></span>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
var i = 0, commands = [
'text',
'text1',
'text2',
'text3'
];
var intro = [
"textの説明",
"text1の説明",
"text2の説明",
"text3の説明"
];
$("#textarea1 textarea").change(function () {
if ($(this).val() == $("#text").text()) {
$("#textarea2 p").html('次は、<span id="text">' + commands[i] + '</span>と入力しましょう<br>');
$("#intro").html(commands[i] + 'の説明: ' + intro[i]);
i++;
}
}).change();
</script>
</body>
</html>
補足の補足
直近で打ち込まれた文字を認識するにはlastIndexOfメソッドを使用すると実現できます。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>タイトル</title>
</head>
<body>
<div id="textarea1">
<textarea></textarea>
</div>
<div id="textarea2">
<p><span id="text">./a.out</span>と入力しましょう。</p>
<span id="intro"></span>
</div>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<script>
var i = 0, commands = [
'text',
'text1',
'text2',
'text3'
];
var intro = [
"textの説明",
"text1の説明",
"text2の説明",
"text3の説明"
];
$("#textarea1 textarea").keypress(function () {
var lastLine = (this.value).substr((this.value).lastIndexOf("\n") + 1);
if (lastLine == $("#text").text()) {
$("#textarea2 p").html('次は、<span id="text">' + commands[i] + '</span>と入力しましょう<br>');
$("#intro").html(commands[i] + 'の説明: ' + intro[i]);
i++;
}
}).change();
</script>
</body>
</html>
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
退会済みユーザー
2016/12/03 01:26
「二つ目のtextareaに決められたコマンドが打ち込まれた場合、一つ目のtextareaの中の文を書き換えていく」どういうルールでどのように書き換えたいのかがわからないと回答ができません。
kei344
2016/12/03 01:34
「決められたコマンド」とはどのようなものでしょう。