- ベストアンサー
gaiaxでJavascriptで記述した場合にカンマが消えてしまいます。
gaiaxはカンマが使えないのですが・・どうしたらいいでしょうか? 教えてください、その部分のみソースを書いておきます。 setTimeout('beginneon()',1000) ダブルクオーテーションはクオ-テーションのすればいいのは解かったのですが。カンマはどうすればいいか解かりません。 gaiaxはJavaScriptはやりにくいですね。 よしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
えー、今更ではありますが、時間が出来たので#3を少し手直ししてみました。 変更箇所はfunction neon()とfunction beginneon()。 document.writeをやめてevalを使ってます。 また、m<message.lengthもそのまま直接記述できるようです。 '<sccript>', '</script>'も不要になったので、変数LT,GTも不要になりました。 たった数十バイトの節約でしかありませんが、「こんな書き方もある」程度の参考にしてください。 ------------------------------------------------------- eval('function neon(){if (n==0){for (m=0; m<message.length; m++)crossref(m).style.color=neonbasecolor;}crossref(n).style.color=neontextcolor;if (n<message.length-1)n++;else{n=0;clearInterval(flashing);setTimeout('+DQuote+'beginneon()'+DQuote+Comma+'1500);return;}}'); eval('function beginneon(){if (document.all || document.getElementById) flashing=setInterval('+DQuote+'neon()'+DQuote+Comma+flashspeed+');}'); ------------------------------------------------------- (便宜上改行をいれいています)
その他の回答 (4)
- mrumesuke
- ベストアンサー率45% (254/557)
>例えばmessage="テスト中"とかの内容を変えたい時、グローバル変数とかにして、渡すのでしょうか? 色々な方法が考えられますが、現状のスクリプトを極力残すならグローバル変数でいいでしょう。。 >何処に記述するのですか? <SCRIPT LANGUAGE='JavaScript' SRC='./test.js></SCRIPT>より前であればどこでも構いません。 グローバル変数はページ内全域(と言っても宣言以降)に亘って有効です。 外部スクリプト、内部スクリプトの区別なくページ内のどこからでも利用できます。 逆に、変数名の競合に気をつける必要があります。 例 --------------------------------------------------------------- [HTML] <script ~> message="テスト中"; </script> <SCRIPT LANGUAGE='JavaScript' SRC='./test.js></SCRIPT> [test.js] HTMLで定義しない変数の定義 if (document.all || ~ : 関数定義 : beginneon(); --------------------------------------------------------------- message以外の変数もHTMLで定義すると、汎用性が上がると思います。 その他工夫の余地はあるでしょう。 その辺はアイデア次第ですので、色々トライしてみてください。
- mrumesuke
- ベストアンサー率45% (254/557)
#2は大はずれでした。(^^; とりあえず動く形にしてみました。 ------------------------------------------------------- <script language='JavaScript1.2'>DQuote=String.fromCharCode(34);Comma=String.fromCharCode(44);LT=String.fromCharCode(60);GT=String.fromCharCode(62);var message='テスト中';var neonbasecolor='#555555';var neontextcolor='#FF0000';var flashspeed=200;var n=0;if (document.all||document.getElementById){document.write('<font color='+neonbasecolor+'>');for (m=0; m<message.length; m++)document.write('<span id=neonlight'+m+'>'+message.charAt(m)+'</span>');document.write('</font>');}else document.write(message);function crossref(number){var crossobj=document.all? eval('document.all.neonlight'+number) : document.getElementById('neonlight'+number);return crossobj;};neon = LT+'script'+GT+'function neon(){if (n==0){for (m=0; m'+LT+'message.length; m++)crossref(m).style.color=neonbasecolor;}crossref(n).style.color=neontextcolor;if (n'+LT+'message.length-1)n++;else{n=0;clearInterval(flashing);setTimeout('+DQuote+'beginneon()'+DQuote+Comma+'1500);return;}}'+LT+'/script'+GT;beginneon = LT+'script'+GT+'function beginneon(){if (document.all || document.getElementById) flashing=setInterval('+DQuote+'neon()'+DQuote+Comma+flashspeed+');}'+LT+'/script'+GT;document.write(neon);document.write(beginneon);beginneon();</script> ------------------------------------------------------- 大きく変わった個所は、function neon()とfunction beginneon()です。随分読みづらくなってしまいましたが、頑張って変更前と比較してみてください。一度文字変数neonとbeginneonに格納してからその変数をdocument.writeしています。一気にdocument.writeするより可読性が上がるカナと思ったのですが、大差ないですね。 <script>をLT+'script'+GTにする必要があるのかどうか分かりません。#1の参考サイトに倣ってみました。 その他、構文エラー、並びに、エラーではないが無駄な記述等を若干手直ししています。 突貫工事のため不具合、不都合等があるかもしれません。 不明な点は補足ください。極力対応します。
お礼
ありがとうございます、動きを確認しました。 やはり、こんなことになるからJSファイルのほうがいいのでしょうね、ただ、この場合の変数とのやり取りはどうするのですか、例えばmessage="テスト中"とかの内容を変えたい時、グローバル変数とかにして、渡すのでしょうか?何処に記述するのですか?file名test.jsとした場合 <SCRIPT LANGUAGE='JavaScript' SRC='./test.js></SCRIPT>となりますよね。 メッセージはvar message="テスト中"を外にだして・・・。 例えば1ファイルの中に複数のスクリプトがあったとします、その場合は大抵はグローバル変数定義して、そのパラメータを渡しますよね、JavaScriptもできるのでしょうか?1スクリプト内しかグローバル変数は使えないのでしょうか?(考え方間違ってるかもしれないですが、私が1スクリプト内と書いてるのは<SCRIPT LANGUAGE=JavaScript>・・・・・</SCRIPT>のことを便宜上言ってるだけで、世間ではどう呼ばれてるか解かりません)。 この辺りのスクリプトからスクリプトへのパラメータの渡しかたが解かりません、まだ本を見ながら悪戦苦闘しています初心者です、よろしくお願いいたします。 hidegorou
- mrumesuke
- ベストアンサー率45% (254/557)
flashingも変数ですよね。 スクリプトの前後を見てみないとはっきり言えませんが、こういうことではないでしょうか。(便宜上改行とコメントを入れておきます) Comma = String.fromCharCode(44); //カンマ DQuote=String.fromCharCode(34); //ダブルクォート flashspeed=1000; flashing='setInterval('+DQuote+'neon()'+DQuote+Comma+flashspeed+')';
- mrumesuke
- ベストアンサー率45% (254/557)
ご指摘の通りGaiaXでカンマは使えません。 対策としましては、外部にJSファイルを用意するのが最良の方法なのですが、GaiaX内でカンマを使うときは少しトリッキーなことをします。 参考URLに、GaiaXで使えるsetTimeout()を使用したスクリプト(ならびにGaiaXでJavaScriptを使うに当たっての考察)をご紹介します。(スクリプトの作者さんは「ようこそ〇〇さん」のスクリプトを作った方です) サンプルでは、カンマ、ダブルクォート、<、>、をそれぞれ変数に置き換え、document.writeで目的のスクリプトを出力する、という二段構えになっています。 この手法を応用すればスクリプトをGaiaX用に移植(変換)可能かと思います。(2つ目のURLからリンクされている「スクリプトをGaiaXで利用するためのツール」を使えばその変換作業を自動的に行ってくれるそうです) ですが、あまり複雑なスクリプトは移植に向いていません。冒頭にも書いたとおり、できることなら外部にJSファイルを置きたいところです。
お礼
ありがとうございました、一部分はConma関数に変更したら動きました、二箇所あり、他の一箇所を変更すると動きません、そこの記述は flashing=setInterval('neon()',flashspeed) このところを flashing=setInterval('neon()'+Conma+flashspeed) としました、flashspeedは変数なので書き方が違うのでしょうか?
補足
mrumesuke様、有難うございます。 再々申し訳ありません、まだ駆け出しな者なので、お手数をお掛けしています。 変更しましたが、うまく行きません。[ソース]を早く載せればよかったです、スミマセン。 まお、教えて頂いたURLの下の方で、自動変換させましたら、セミコロンとかが省略されてしまって、全然動きませんでした。 このままだと、メッセージが「灰色(555555)」になって止まっています、flashing命令にエラーがあるのでしょうか、eval関数の使い方が間違ってるのでしょうか、私自身、よく解かっていないのですけど引数なども変かもしれないです。 よろしくお願いいたします。 <H2><I> <script language='JavaScript1.2'>DQuote=String.fromCharCode(34);Conma=String.fromCharCode(44);var message='来てくれて、ありがとう!';var neonbasecolor='555555';var neontextcolor='FF0000';var flashspeed=200;var n=0;if (document.all||document.getElementById){;document.write('<font color='+neonbasecolor+'>');for (m=0;m<message.length;m++)document.write('<span id=neonlight'+m+'>'+message.charAt(m)+'</span>');document.write('</font>');};else document.write(message);function crossref(number){;var crossobj=document.all? eval('document.all.neonlight'+number) : document.getElementById('neonlight'+number);return crossobj;};function neon(){;if (n==0){;for (m=0;m<message.length;m++)crossref(m).style.color=neonbasecolor;};crossref(n).style.color=neontextcolor;if (n<message.length-1)n++;else{;n=0;clearInterval(flashing);setTimeout('beginneon()'+Conma+1500);return;};};function beginneon(){;if (document.all||document.getElementById);flashing='setInterval('+DQuote+'neon()'+DQuote+Comma+flashspeed+')';};beginneon()</script> </I></h2>
お礼
手前ごとですが、うちの犬が行方不明になり、まだ見つかっていません、アメリカンコッカーです、そのことで、暫くなにも手に付きませんでした、ごめんなさい。 いまは落ち着きました。 mrumesukeさん、ご丁寧にありばとうございます、まだショックから立ち直っていませんが、眠れないのもあり、この勉強に没頭するのも気が晴れて(不純な動機でごめんなさい)ちょうどいいのです。作って、みると夢中になれます。 また再度構築頂きましてありがとうございます、早速試してみたいと思います。 凄く勉強になります、重ねて御礼を申し上げます。 まだまだ、疑問に思うことがありますので、順次質問していこうと思います。 あと、グローバル変数の受け渡しは確認しました、うまく動きます、有難うございます。