- ベストアンサー
3重のクォーテーション
javascriptで function textChange(id,text){ document.getElementById(id).innerHTML=text; return document.getElementById(id).firstChild.nodeValue; } と関数を作っておいて、 <span onClick="textChange('indication_space','★')">メールアドレス</span> の★の部分に <script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script> という文字を入れたいのですがクォーテーションが重なっているためエラーが出ます。 ★内の「"」を「\'」とした場合、エラーは出ませんが何も表示されませんでした。 解決法をご存知の方いらっしゃいましたらぜひご教授ください。 よろしくおねがいします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
・ まだ分からないのですが、 <script type="text/javascript" src="mailform.js" charset="utf-8"></script> だとしたら、HTMLのロード時はこれが実行されるのは理解できますが、動的にこれを挿入したときはそのままでは実行されないのではないでしょうか。そこで、 >>> 有効になるのは…スクリプトタグが初めて現れる時(マウスクリック)でしょうか…? のようにクリックして動作させるには、全体を関数としてインクルードする必要があると思います。このときクリックが2回必要となります。 ・ また、これも理解不足だったら申し訳ありませんが、 >>> 最後のくだりのやり方がわからないのですが、よろしければ詳しく教えて頂けないでしょうか。 に関しては、以下のコードを参考にしてみてください。 ------------------------------------------------------------
その他の回答 (5)
- yambejp
- ベストアンサー率51% (3827/7415)
#2です エラーでませんよ。 環境がおかしいのか、噛み砕いて理解していないのかのどちらかでは? <span onClick='textChange('indication_space','<script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script>')'>メールアドレス</span>
補足
最後に書いてあるものだとエラーは出ませんでした。 ただ、やはり何も表示されません。 クォーテーションの問題は「\'」でも定数でもエスケープシークエンスでも(見た目とエラー面では)同じ結果なので、autyさんが仰っているようにjavascriptの書き方に問題がありそうです…。 質問の内容が変わってしまいますが、解決法がわかるようでしたらよろしくお願いします。 回答ありがとうございました。
- auty
- ベストアンサー率58% (284/486)
#4 続き <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <script type="text/javascript"><!-- // alert(0); var txt = new Array(); function textChange(id,no){ txt[0] = "<div id=mailform_top style='width:240px;'><div class='main' style='background-color:white;background-image:url(http://wcl.nobody.jp/image/movie/mail.gif);background-position:left bottom;background-repeat:no-repeat;border:solid 1px black;font-size:12px;font-family:MS ゴシック,Osaka,sans-serif;text-align:center;width:240;'><!--old_browser--><form id='mailform'><!--old_browser--><!--skin_html_tmp_top--><div><div class='name_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='name_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>[名前0]</div><div class='name_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><input type='text' name='na' style='width:180px;font-size:12px;' value='' class='name_parts'></div><BR clear='all'></div><div class='mail_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='mail_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>[メールアドレス0]</div><div class='mail_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><input type='text' name='ma' style='width:180px;font-size:12px;' value='' class='mail_parts'></div><BR clear='all'></div><div class='textarea_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='textarea_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>*<input type='hidden' name='tac' value='ta'>[コメント0]</div><div class='textarea_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><textarea cols='30' rows='8' style='font-size:12px;' name='ta' class='textarea_parts'></textarea></div><BR clear='all'></div><div class='submit' id='mailform_submit' style='text-align:center;'><!--submit_button_top--><input class='submit_button' type='button' value='送信0' name='submit' onclick=soushin('6765180988b0bb68c4305b8e2d7f5c10','mailform'); ><!--submit_button_end--></div></div><!--skin_html_tmp_end--></form></div><div id='shinobi_jp_text' style='font-size:10px;height:15px;text-align:left;width:125px;'>Powered by <a href='http://www.ninja.co.jp/' target='_blank'>NINJA TOOLS</a></div></div>"; txt[1] = "<div><div class='name_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='name_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>[名前1]</div><div class='name_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><input type='text' name='na' style='width:180px;font-size:12px;' value='' class='name_parts'></div><BR clear='all'></div><div class='mail_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='mail_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>[メールアドレス]</div><div class='mail_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><input type='text' name='ma' style='width:180px;font-size:12px;' value='' class='mail_parts'></div><BR clear='all'></div><div class='textarea_top' style='width:100%;margin:3px 3px 3px 0px;clear:both;'><div class='textarea_left' style='color:black;width:240px;padding:2px 5px;text-align:text-align:center;;width:230px;'>*<input type='hidden' name='tac' value='ta'>[コメント1]</div><div class='textarea_right' style='width:240px;padding:0px 5px;text-align:text-align:center;;width:230px;'><textarea cols='30' rows='8' style='font-size:12px;' name='ta' class='textarea_parts'></textarea></div><BR clear='all'></div><div class='submit' id='mailform_submit' style='text-align:center;'><!--submit_button_top--><input class='submit_button' type='button' value='送信1' name='submit' onclick=soushin('6765180988b0bb68c4305b8e2d7f5c10','mailform'); ><!--submit_button_end--></div></div>"; // http://mf1.shinobi.jp/call/6765180988b0bb68c4305b8e2d7f5c10/mailform.js document.getElementById(id).innerHTML=txt[no]; return document.getElementById(id).firstChild.nodeValue; } //--> </script> </head> <body> [下をクリックしてください] <hr /> <span onClick="textChange('indication_space',0)">メールアドレス0 (Powered by NINJA TOOLS)</span> <hr /> <span onClick="textChange('indication_space',1)">メールアドレス1 (送信1)</span> <hr /> <div id="indication_space"> </div> </body> </html>
- urecy
- ベストアンサー率54% (30/55)
<script type="text/javascript"> var M1 = "<script type='text/javascript' src='メールフォームのURL' charset='utf-8'></script>"; var M2 = "<script type='text/javascript' src='メールフォームのURL_NUMBER2' charset='utf-8'></script>"; function textChange(id,text){ document.getElementById(id).innerHTML=text; return document.getElementById(id).firstChild.nodeValue; } function Mset( id, setnumber){ if( setnumber == 1 ) textChange( id, M1 ); }elseif( setnumber == 2 ) textChange( id, M2 ); } </script> <span onClick=" Mset('indication_space', 1)">メールアドレス</span> こんな感じじゃ駄目ですか? 初めにスクリプトの中で var M1 = "<script type='text/javascript' src='メールフォームのURL' charset='utf-8'></script>" こんな感じで変数に文字列をセットしておいて。 クリックした時に飛ばしたい関数の前に、もうひとつ関数をかまして。 どこがクリックされたかを <span onClick=" Mset('indication_space', 1)">メールアドレス</span> の二つ目の引数(ここでいう、'indication_space'の後ろにある1)で判断して。 判断が出来た後に、textchangeに飛ばす もっといい書き方あるとは思うのですが 自分も初心者なので・・・すみません
補足
えっと…、これはメールフォームが複数あるんですか…? 何か誤解をされているのか、私の理解力が足りないのか…。 質問文がわかりにくかったようでしたらすみません。 回答ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
これはjavasciptの問題というよりはhtmlの問題でしょうね タグのonclickに直接スクリプトを書き込むと思わぬトラブルになります 別途functionを用意するのが妥当です。 インラインで書くと\"や\'がエスケープできないですからね・・・ とはいえ、どうしてもということであればhtmlのエスケープシークエンス をつかう手もあります。 <span onClick='alert('<script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script>')'>メールアドレス</span>
補足
メールフォームは他のサーバーにあるものを呼び出すので… 定数で ex1 = "<script type='...' src='...' ...></script>" として textchange('indication_space','ex1') とする事くらいしか思いつきませんが…これも「"」を「\'」とした時と同様、エラーは出ないが何も表示されない状態になりました。 エスケープシークエンスは普通に'と書いているように見られているようで、エラーが出ました。 何か別の方法などありましたらお願いします。 回答ありがとうございました^^
- auty
- ベストアンサー率58% (284/486)
・ 「3重のクォーテーション」とは考えもしませんでしたが、こちらから質問させてください。 >>> エラーは出ませんが何も表示されませんでした。 うまくいっているかも知れませんが、何が表示されるのを期待していますか。 <script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script> これが動的にインクルードされたとき、いつそのJavaScriptは有効になるのでしょうか。 このJavaScriptが 「メールフォーム」を作成するのですか。 「3重のクォーテーション」の渡し方がうまく行っていない場合、 関数textChange(id,text)の引数(変数)として渡さないといけないとして、textChange(id,no)の中で、番号を付けておき、その番号を渡すという手はありませんか。
補足
http://aniline.web.fc2.com/temp_mail.html 上記したURLにあるメールフォームが表示されるのを期待しています。 ちなみに、「\'」を「'」に直し、タグの外へ貼れば正常に表示されます。 有効になるのは…スクリプトタグが初めて現れる時(マウスクリック)でしょうか…? 最後のくだりのやり方がわからないのですが、よろしければ詳しく教えて頂けないでしょうか。 回答ありがとうございました^^
補足
なるほど…、クォーテーションの問題ではないんですね。 全体を関数としてインクルードするというのは…メールフォームのjavascriptの全体を、という事でしょうか? textChange(id,no)について コードを実行したところ、送信をクリックすると「soushin()関数が見つからない」とエラーが出ました。 javascriptが正常に実行された場合の中身からsoushin()を探してみましたが見つかりませんでした…。 回答ありがとうございました。