• ベストアンサー

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>   という文字を入れたいのですがクォーテーションが重なっているためエラーが出ます。 ★内の「"」を「\'」とした場合、エラーは出ませんが何も表示されませんでした。 解決法をご存知の方いらっしゃいましたらぜひご教授ください。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • auty
  • ベストアンサー率58% (284/486)
回答No.4

・ まだ分からないのですが、 <script type="text/javascript" src="mailform.js" charset="utf-8"></script> だとしたら、HTMLのロード時はこれが実行されるのは理解できますが、動的にこれを挿入したときはそのままでは実行されないのではないでしょうか。そこで、 >>> 有効になるのは…スクリプトタグが初めて現れる時(マウスクリック)でしょうか…? のようにクリックして動作させるには、全体を関数としてインクルードする必要があると思います。このときクリックが2回必要となります。 ・ また、これも理解不足だったら申し訳ありませんが、 >>> 最後のくだりのやり方がわからないのですが、よろしければ詳しく教えて頂けないでしょうか。 に関しては、以下のコードを参考にしてみてください。 ------------------------------------------------------------

aniline
質問者

補足

なるほど…、クォーテーションの問題ではないんですね。 全体を関数としてインクルードするというのは…メールフォームのjavascriptの全体を、という事でしょうか? textChange(id,no)について コードを実行したところ、送信をクリックすると「soushin()関数が見つからない」とエラーが出ました。 javascriptが正常に実行された場合の中身からsoushin()を探してみましたが見つかりませんでした…。 回答ありがとうございました。

その他の回答 (5)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.6

#2です エラーでませんよ。 環境がおかしいのか、噛み砕いて理解していないのかのどちらかでは? <span onClick='textChange('indication_space','<script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script>')'>メールアドレス</span>

aniline
質問者

補足

最後に書いてあるものだとエラーは出ませんでした。 ただ、やはり何も表示されません。 クォーテーションの問題は「\'」でも定数でもエスケープシークエンスでも(見た目とエラー面では)同じ結果なので、autyさんが仰っているようにjavascriptの書き方に問題がありそうです…。 質問の内容が変わってしまいますが、解決法がわかるようでしたらよろしくお願いします。 回答ありがとうございました。

  • auty
  • ベストアンサー率58% (284/486)
回答No.5

#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)
回答No.3

<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に飛ばす もっといい書き方あるとは思うのですが 自分も初心者なので・・・すみません

aniline
質問者

補足

えっと…、これはメールフォームが複数あるんですか…? 何か誤解をされているのか、私の理解力が足りないのか…。 質問文がわかりにくかったようでしたらすみません。 回答ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

これはjavasciptの問題というよりはhtmlの問題でしょうね タグのonclickに直接スクリプトを書き込むと思わぬトラブルになります 別途functionを用意するのが妥当です。 インラインで書くと\"や\'がエスケープできないですからね・・・ とはいえ、どうしてもということであればhtmlのエスケープシークエンス をつかう手もあります。 <span onClick='alert('<script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script>')'>メールアドレス</span>

aniline
質問者

補足

メールフォームは他のサーバーにあるものを呼び出すので… 定数で  ex1 = "<script type='...' src='...' ...></script>" として  textchange('indication_space','ex1') とする事くらいしか思いつきませんが…これも「"」を「\'」とした時と同様、エラーは出ないが何も表示されない状態になりました。 エスケープシークエンスは普通に'と書いているように見られているようで、エラーが出ました。 何か別の方法などありましたらお願いします。 回答ありがとうございました^^

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

・ 「3重のクォーテーション」とは考えもしませんでしたが、こちらから質問させてください。 >>> エラーは出ませんが何も表示されませんでした。 うまくいっているかも知れませんが、何が表示されるのを期待していますか。 <script type="text/javascript" src="メールフォームのURL" charset="utf-8"></script> これが動的にインクルードされたとき、いつそのJavaScriptは有効になるのでしょうか。 このJavaScriptが 「メールフォーム」を作成するのですか。 「3重のクォーテーション」の渡し方がうまく行っていない場合、 関数textChange(id,text)の引数(変数)として渡さないといけないとして、textChange(id,no)の中で、番号を付けておき、その番号を渡すという手はありませんか。

aniline
質問者

補足

http://aniline.web.fc2.com/temp_mail.html 上記したURLにあるメールフォームが表示されるのを期待しています。 ちなみに、「\'」を「'」に直し、タグの外へ貼れば正常に表示されます。 有効になるのは…スクリプトタグが初めて現れる時(マウスクリック)でしょうか…? 最後のくだりのやり方がわからないのですが、よろしければ詳しく教えて頂けないでしょうか。 回答ありがとうございました^^

関連するQ&A

  • onmouseで表示させたテキストを改行したい。

    いつもお世話になっております。 下記過去ログのソースを参考にしました。 「オンマウスで別の場所に画像とテキストを表示したい」 http://okwave.jp/qa1688069.html このソース(下記に抜粋)で動かす際、'変更する文章'を、たとえば5行表示したい場合、改行時に<br />を入れると、そのままタグが表示されて、改行されません。 ためしに\nやら\rなど改行コードを何個か試してみましたが、思うような結果は得られませんでした。 いくつかの文章を改行して表示させたい場合は、どのように書けばよいでしょうか。 よろしくお願いします。 上記リンク先の回答#4さんのソースの抜き出しここから----- <script type="text/javascript"> <!-- function textChange(id,text){ var span_el = document.getElementById(id); var originalText = span_el.firstChild.nodeValue; span_el.firstChild.nodeValue=text; return originalText; } //--> </script> </head> <body> <span onMouseOver="RestoreText=textChange('text1','変更する文章')" onmouseout="textChange('text1',RestoreText)">文章変更</span> <span id="text1">このへんに文章</span> 抜き出しここまで--(brは省略しました) やりたいこと-------------------- <span onMouseOver="RestoreText=textChange('text1','変更する文章1行目<br />変更する文章2行目<br />変更する文章3行目<br />変更する文章4行目<br />変更する文章5行目<br />')" onmouseout="textChange('text1',RestoreText)">文章変更</span> <span id="text1">このへんに文章(改行されて表示)</span>

  • JavaScript表示切替の問題

    ボタンを押すたびに、こんにちはとこんばんはが切り替わるようにしたいのですが、 切り替わりません。なぜかわかる方がいたら教えて頂けると助かります。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> </head> <body> <div id="1">こんにちは</div> <input type="button" value="切替" onclick="func_switch()"> <script language="javascript" type="text/javascript"> function func_switch(){ if(document.getElementById(1).innerHTML="こんにちは"){ document.getElementById(1).innerHTML="こんばんは"; } else{ document.getElementById(1).innerHTML="こんばんは"; } } </script> </body> </html>

  • if構文

    初心者でif構文がよくわからず質問させてください。 下記のようなボタンをつくり、 <form action="#"> <input type="button" value="うさぎ" id="txt" onclick="aGetElementById()" /> <input type="button" value="とり" id="txt" onclick=b"GetElementById()" /> </form> ボタンをクリックして、 <div><span id="box"></span>が大好きです。</div> のspanの中にvalue名(うさぎ・とり)を表示させ、『「value名」が大好きです。』と表示させたいのです。 Javascriptを下記のように書いてみたのですが、テキスト表示の切り替えがうまくいきません。 <script> <!-- function aGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } function bGetElementById(){ var text=document.getElementById("txt"); var box=document.getElementById("box"); box.innerHTML=txt.value; } --> </script> どうかおしえてください。 よろしくお願いします。

  • リンク押下でタグを書き換えたい

    リンクが複数あって、押したリンク文字だけ<span></span>のみにしたいと 思っています。また対応するdivタグのdisplay属性も書き換えたいです。 とりあえず思いついたのは以下の方法なのですが、冗長ですし、 リンクの数が増えた場合に足していくのが大変です。 もっとシンプルに書く方法がないものでしょうか。 ご助言ください。 <html> <body> <script> function change(spanid,divid,menuName){ document.getElementById('menu1').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu1','div1','メニュー1')\">メニュー1</a>"; document.getElementById('div1').style.display="none"; document.getElementById('menu2').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu2','div2','メニュー2')\">メニュー2</a>"; document.getElementById('div2').style.display="none"; document.getElementById('menu3').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu3','div3','メニュー3')\">メニュー3</a>"; document.getElementById('div3').style.display="none"; document.getElementById(spanid).innerHTML = menuName; document.getElementById(divid).style.display="block"; } </script> <ul> <li><span id="menu1">メニュー1</span></li> <li><span id="menu2"><a href="javascript:void(0)" onclick="change('menu2','div2','メニュー2')">メニュー2</a></li> <li><span id="menu3"><a href="javascript:void(0)" onclick="change('menu3','div3','メニュー3')">メニュー3</a></li> </ul> <div id="div1"> test1 </div> <div id="div2" style="display:none"> test2 </div> <div id="div3" style="display:none"> test3 </div> </body> </html>

  • innerHTMLの初期値

    下記のソースがあります。 <SCRIPT TYPE="text/javascript"> <!-- function Change(id){ if(document.all){ document.all.result.innerHTML = document.all(id).innerHTML; }else if(document.getElementById){ document.getElementById('result').innerHTML = document.getElementById(id).innerHTML; } } //--> </SCRIPT> <a href="#" onClick='Change("ih2"); return false'>前</a><br> <a href="#" onClick='Change("ih3"); return false'>次</a><br> <div id="ih2" style="display:none">テキスト1</div> <div id="ih3" style="display:none">テキスト2</div> <br> <span id="result"></span> 前、次のリンクで表示されるテキストが切り替わるようにしているのですが、 クリックする前の段階では何も表示されていない状態です。 そこで、クリックする前でもid="ih2"の「テキスト1」が表示されている状態にしたいのですが、 なかなか出来ません。 functionの前に document.all.result.innerHTML = document.all.ih2.innerHTML; と記述してみましたが駄目でした。 id="ih2"の値を読み込んで表示させたいのですが、 何か良い方法はありませんか。

  • メニューを変えたい

    こんにちは。メニューをつくったのですが、カテゴリーをクリックすると+がマイナスになり、サブカテゴリが現れ、サブカテゴリをクリックすると+に閉じてしまいます。 <script type="text/javascript"><!-- function oritatami(id,id2){ obj=(document.all)?document.all(id):((document.getElementById)?document.getElementById(id):null); if(obj) obj.style.display=(obj.style.display=="none")?"block":"none"; if(document.all){ with(document.all(id2)){innerText=(innerText=="+")?"-":"+";} } else if(document.getElementById){ with(document.getElementById(id2)){firstChild.nodeValue=(firstChild.nodeValue=="+")?"-":"+";} } } //--></script> これを下記の様に変更したいと思いますのでご教示お願い致します。 ●サブカテゴリをクリックしてもメインのカテゴリは閉じないで、マイナスのままで開いておき、閉じる時は又メインのマイナスのカテゴリをクリックすると全て閉じてプラスに戻る 説明が下手で申し訳ございませんが、理解して下さると助かります。

  • innerHTMLにて設定した情報を再度取得する事は可能でしょうか?

    innerHTMLにて指定idタグ情報を変更する事は出来るのですが、innerHTMLにて設定した情報を再度取得する事は可能でしょうか? 下記のコードを考えてみたのですが、 再取得出来ません。 環境はXPでIE6とFF3です。 ご教授よろしくお願いします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>DOM情報の再取得</title> <script type="text/javascript" language="JavaScript"> <!-- function setText1(data) { document.getElementById("test1").innerHTML = data; return false; } function setText2(data) { document.getElementById("test2").innerHTML = data; return false; } function setText3(data) { document.getElementById("test3").innerHTML = data; return false; } //--> </script> </head> <body> <div id="test1"></div> <div id="test2"> </div> <div id="test3">テスト3</div> <br> <a href="javascript:void(0);" onClick="setText1('セットテスト1'); return false;">1</a> <a href="javascript:void(0);" onClick="setText2('セットテスト2'); return false;">2</a> <a href="javascript:void(0);" onClick="setText3('セットテスト3'); return false;">3</a> <script type="text/javascript" language="JavaScript"> <!-- document.write("<br><br>\n"+'再取得'+"<br><br>\n"); //document.write("js_test1="+document.getElementById("test1").childNodes[0].nodeValue+"<br>\n");//エラーになるのでコメントアウト document.write("js_test2="+document.getElementById("test2").childNodes[0].nodeValue+"<br>\n"); document.write("js_test3="+document.getElementById("test3").childNodes[0].nodeValue+"<br>\n"); //--> </script> </body> </html>

  • セレクト部品の表示内容

    が選択されているかどうかによって変化するようにしたいのですが 以下のようにしてもうまくいきません。 何か解決策はないでしょうか? <script> function func() { document.getElementById("00").innerHTML="00.aa"; document.getElementById("01").innerHTML="01.bb"; } function func2() { document.getElementById("00").innerHTML="00"; document.getElementById("01").innerHTML="01"; } </script> <select onfocus="func()" onblur="func2()"> <option value="00"><span id="00">00</span></option> <option value="01"><span id="01">01</span></option> </select>

  • javascriptで困っています

    スマホでタッチした場所の座標を取得しようとしているのですが、いろいろ調べて以下のように作ってみましたが、座標が取得できません。どこを直せばいいのか、教えていただきたく投稿させていただきました。よろしくお願いします。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"/> <meta name="viewport" content="width=320, user-scalable=no" /> <script type="text/javascript" charset="utf-8"> var touch_box = document.getElementById("box"); touch_box.addEventListener("touchstart", function(e){ document.getElementById("txt0").innerHTML = "スタート"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); touch_box.addEventListener("touchmove", function(e){ document.getElementById("txt0").innerHTML = "ムーブ"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); touch_box.addEventListener("touchend", function(e){ document.getElementById("txt0").innerHTML = "エンド"; document.getElementById("txt1").innerHTML = e.pageX; document.getElementById("txt2").innerHTML = e.pageY; }, false); </script> </head> <body> <div id="box"> <span id="txt0"></span><br /> X:<span id="txt1"></span>, Y:<span id="txt2"></span><br /> </div> </body> </html>

  • 表示・非表示のスクリプトで、複数指定する場合はどうしたらいいですか?

    複数のコンテンツをボタンクリックにて表示・非表示にしたいのですが、うまくいきません。 なんとか、2つまではわかったのですが、3つまで表示すると3つ目が非表示になってくれません。 最終的には5つくらいを下記のスクリプトで行いたいのですが、どうすれば、複数のIDを対応させることができますか? ●例えば、test1を押した際、test2と3は非表示としたいです。 <script language="JavaScript" type="text/JavaScript"> <!-- function ChDsp2(strShow,strHidden){ var obj=''; obj=document.all && document.all(strShow) || document.getElementById && document.getElementById(strShow); obj.style.display = "block"; obj=document.all && document.all(strHidden) || document.getElementById && document.getElementById(strHidden); obj.style.display = "none"; } //--> </script> <a href="javascript:ChDsp2('text1','text2');">1を表示</a> <a href="javascript:ChDsp2('text2','text1');">2を表示</a> <a href="javascript:ChDsp2('text3','text1');">3を表示</a> <span id="text1" style="display:block;">111111</span> <span id="text2" style="display:none;">222222</span> <span id="text3" style="display:none;">333333</span> どなたか教えてください。お願いします。

専門家に質問してみよう