>>実現したいこと
同じ件で2回目の質問、失礼します。
前回に続き、作っているものは一緒で「Gmailのようなテキストエディタ」なのですが、
formでphpファイルにvalueで値を送信するとinnerHTMLが効いていない状態になってしまいます。
innerHTMLを記述する場所などかいけないのでしょうか? JSの知識が浅いため、”そもそも..."な部分を誤っている可能性もあると思っています。
※作成中のエディタは、HTMLの記述に変換した後に 自作タグに変換する必要があるため、innerHTMLの後にいくつかreplaceを記述しています。
>>望んでる結果
エディタエリアに[太字]ボタンで太くした文字「AAA」を、formで送信した結果が「=1=strong_font=2=AAA=3=」となるようにしたい。
>>現状
エディタエリアに[太字]ボタンで太くした文字「AAA」を、formで送信した結果が、太文字になった状態の「AAA」になってしまう。
該当のソースコード
Javascript
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>Gmailみたいなエディタ</title> 6 <script> 7 //innerText をサポートしない Web ブラウザと共通で使用するための 8 //setText 関数を定義 9 function setAlter_innerText(element) { 10 if (element.innerText) { 11 element.setText = function (text) { 12 element.innerText = text; } 13 } else { 14 element.setText = function (text) { 15 element.textContent = text; } 16 } 17 return element; 18 } 19 20 //getElementById の短縮 21 var $id = function (id) { 22 return document.getElementById(id); 23 }; 24 25 //コンテンツのロードが完了したら 26 document.addEventListener('DOMContentLoaded', function () { 27 var editArea = $id('editArea'); 28 29 //innerText を設定するためのメソッドを追加 30 setAlter_innerText(editArea); 31 32 //[黒文字] ボタン 33 $id('fontColorBlack') 34 .addEventListener('click', function () { 35 document.execCommand('ForeColor', false, 'black'); 36 }); 37 //[赤文字] ボタン 38 $id('fontColorRed') 39 .addEventListener('click', function () { 40 document.execCommand('ForeColor', false, 'red'); 41 }); 42 //[太字] ボタン 43 $id('boldButton') 44 .addEventListener('click', function () { 45 document.execCommand('bold', false); 46 }); 47 48 // editAreaの文字をinnnerHTMLしてhiddenのvalueの値としてセット 49 var textBody = $id('textBody'); 50 var form = $id('form'); 51 52 // フォームsubmitイベント時にエディタエリアの値を反映 53 form.onsubmit = function() { 54 textBody.value = editArea.innerHTML 55 .replace(/<b>/g, '*=*1strong_font*=2=*') 56 .replace(/</b>/g, '*=3=*') 57 .replace(/<font color="#ff0000">/g, '*=1=*red_font*=2=*') 58 .replace(/</font>/g, '*=3=*') ; 59 return textBody.value ? true : false; 60 } 61 } 62 ); 63 64 </script> 65</head> 66<body> 67 <button id="fontColorBlack">黒文字</button> 68 <button id="fontColorRed">赤文字</button> 69 <button id="boldButton">太字</button> 70 71 <div id="editArea" contenteditable="true"><!--エディタエリア--></div> 72 73 74 <form name="test2" action="test_action.php" method="post" enctype="multipart/form-data" id="form"> 75 <input type="hidden" name="text_body" id="textBody" value=""> 76 <input type="submit" value="送信"> 77 </form> 78</body> 79</html>
PHP
1<?php //test_action.php 2 3$body = ''; 4if(isset ($_POST['text_body']) === TRUE){ 5 $body = $_POST['text_body']; 6} 7 8?> 9<html> 10 <body> 11 <p>valueに入った文字列:<?php print $body; ?></p> 12 </body> 13</html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。