重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

下記のようなCGIでテキストを読み込んだテーブルがあり、読み込んだ配列(テキストの1行分)のデータごとにボタンがあります。
print "<script type=\"text/javascript\">\n";
print "function chkbtn(abc) {\n";
print "alert(abc);\n";
print "}\n";
print "</script>";

$file = "../csv/data.csv";
print "<table table-layout:fixed; width=\"1540\">\n";
open (IN, $file) or die "$!";

while (<IN>) {
chomp;
@data = split(/\t/, $_);
print "<td><input type=\"button\" onclick=\"chkbtn($data[0])\"</td>\n";
}
print "</tr>";
print "</table>\n";
close (IN);

テーブルのボタンを押下すると、ファイルから取得した$data[0]が、javaのabcに入り
alretで表示させてみます。
$data[0]の値が、「02222-01」のような値になっていた場合、「2221」と表示されてしまいます。
たぶん、2222-1=2221 という風に計算されてしまっているからだと思うのですが、これを正しく「02222-01」と表示させることができません。
どのようにしたら正しく表示させることができるのでしょうか。
どなかかお詳しい方、ご教授いただけないでしょうか。

A 回答 (3件)

ああっ、誤植が!



【正】
出力しなければならないのは
<td><input type="button" onclick="chkbtn(02222-01)"></td>
ではありません。
<td><input type="button" onclick="chkbtn('02222-01')"></td>
とか、
<td><input type="button" onclick='chkbtn("02222-01")'></td>
とか、
<td><input type="button" onclick="chkbtn(&quot;02222-01&quot;)"></td>
とかです。お好きなものを選んでください。

#XHTMLの場合は適宜input要素の終了タグを補ったり、その省略記法を使ってください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
解決しました。要は、ダブルクォーテーションで括った中はシングルクォーテーションで括るということですね。ダブルの中にダブルで括ったらダメだったので悩んでいました。

お礼日時:2017/11/04 09:44

目的の値は CGI 出力後に JavaScript の文字列として扱う必要があるので、


値の前後に文字列を表す '引用符' を付けましょう。

誤: print "... =\"chkbtn($data[0])\" ...\n";
正: print "... =\"chkbtn('$data[0]')\" ...\n";

"二重引用符" でも可能なのですが、 JavaScript として解釈される前に
perl と HTML の両方でエスケープが必要になるので、
今回の場合は適切ではありません。
    • good
    • 0
この回答へのお礼

ありがとうございます。解決しました。
ダブルクォーテーションで括るのは試したのですが、ダメだったので悩んでいました。ダブルクォーテーションの中で更にダブルクォーテーションで括ったのが間違いだったんですね。

お礼日時:2017/11/04 09:39

データが02222-01であるとき


出力しなければならないのは
<td><input type="button" onclick="chkbtn(02222-01)"</td>
ではありません。
<td><input type="button" onclick="chkbtn('02222-01')"</td>
とか、
<td><input type="button" onclick='chkbtn("02222-01")'</td>
とか、
<td><input type="button" onclick="chkbtn(&quot;02222-01&quot;)"</td>
とかです。お好きなものを選んでください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!