• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:evalを使うinputがある場合も安全に運用する)

evalを使うinputがある場合も安全に運用するための方法

このQ&Aのポイント
  • evalを使うinputがある場合も安全に運用するための方法として、エスケープを行います。
  • 四則演算子、数字、括弧以外は削除され、式として成立しない文字列は計算できません。
  • エスケープの表記位置はevalを実行する前であればどこでも良いです。

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

  • ベストアンサー
回答No.22

>!"#$%&',:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ >をInputに入れてアラートの処理が実行されるか確かめてみます 「catch内が実行されるか(アラートの処理が実行されるか)」ではなく >r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); >r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); >r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/([ ]+)/g, ' '); ↑この「r」変数の値が''(ヌル文字)(文字が何も無い文字列)になるか、実際の「r」変数の値を表示してみて下さい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (21)

回答No.11

>replaceというのは第一引数の文字列を第二引数の文字列に変換する関数のようですね。 正確に言うと正規表現で変換します。 >>r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >であれば*や+,-などを123に変更しているのですかね? 違います。 不正な「四則演算子」を除去してます。 例えば「*/+-123.456」は「*-123.456」に変換されます。 >r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); ↑こちらは、例えば「(*/+-」は「(-」に変換されます。 正規表現は下記ページを参照して下さい。 正規表現 - JavaScript | MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions

okweb12345
質問者

お礼

正規表現がわかっていないと理解するのが難しそうですが、 とりあえず危険な記載を安全な記載に変換しているのですね。 ただこの記述をどこに記載したらいいのですか?evalを使う直前に記載したらいいのですか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.10

>回答No.9 amanojaku1 >>r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >>r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); >>r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); >>r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); >>r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); >↑これで(四則演にならない)不正な「四則演算子」を除去してます。 >ここはバグの入り込む余地がありますが、それほど複雑でもないので問題ないと思われます。 ↑これで(四則演算にならない)不正な「四則演算子」を除去してます。 ここはバグの入り込む余地がありますが、それほど複雑でもないので これで問題ないと思われます。

okweb12345
質問者

お礼

いつもお手伝いいただき大変ありがとうございます。 自分でも調べてみたところ replaceというのは第一引数の文字列を第二引数の文字列に変換する関数のようですね。 >>> >>r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); であれば*や+,-などを123に変更しているのですかね? >>> var str = 文字列 str.replace(対象の文字, 置換する文字); 「文字列」の中から「対象の文字」を検索し、一致した文字を「置換する文字」に変換してくれるのが「replace()」の基本的な機能になります。

全文を見る
すると、全ての回答が全文表示されます。
回答No.9

>回答No.5 amanojaku1 >r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); ↑これで「四則演算子、数字、括弧」以外を除去してます。 これで基本的に関数類は実行できません。 ここは簡単なのでバグの入り込む余地はありません。 >r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); >r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); ↑これで(四則演にならない)不正な「四則演算子」を除去してます。 ここはバグの入り込む余地がありますが、それほど複雑でもないので問題ないと思われます。 もしバグがあっても不正な「四則演算子」が残るだけなので、基本的に関数類は実行できません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.8

#7 小数対応してなかったorz でも単純な書き足し付け足しでいけそうだし ほとんど答えがすでに別レスにあるし、 主さんに自分で頑張っていただきますか

全文を見る
すると、全ての回答が全文表示されます。
回答No.7

<input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r,match; try{ if (!(13==kcode)){return;} r=a.replace(/\s/,''); if(/[^0-9\+\-\*\/\(\)]/g.test(r)){throw '半角数字と()+-*/で入力してください';} if(match=r.match(/(\([\+\*\/]|[\+\-\*\/]\)|\(\)|\)\(|[^\+\-\*\/\(]\()/)){ throw '不正な入力:'+match[0]; } r.replace(/[\+\-\*\/]{2,}/g,function(match){ if(match.length>2 || match.substr(-1)!=='-')throw '不正な入力:'+match; return match; }); var n=0; r.replace(/[\(\)]/g,function(match){ if(match=='('){n++;} else if(match==')'){n--;} if(n<0){throw '閉じられていない括弧があります';} return match; }); if(n!=0){throw '閉じられていない括弧があります';} alert(r+' = '+eval(a)); }catch(e){ if(typeof(e)=='string'){alert(e);} else{alert(e.message);} } } // --> </script> 処理止めてメッセージ返すほうが どこで引っかかったかわかるから好き 検索巡回にわざわざreplace使うのはどうかとも思ったけど それ以外に一致部分をcallbackで都度さらに 判定する手段が思い当たらなかったし 多分どっか引っかかったところで即処理を中断できる方が 効率いいと思ったのでとりあえずreplaceで ここまで判定したらelse{alert(e.message);}に行くことないかな?

全文を見る
すると、全ての回答が全文表示されます。
回答No.6

以前JavaScriptでマクロのような記述を見た事があったのですが、もしかしてjQueryなどをインクルードしていたのかもしれません(jQueryでevalが影響を受けるのかは分かりませんが)。 まあ、どちらにしろ「四則演算子、数字、括弧」以外は除去されるので、エスケープとかの必要はないでしょう(バグがなければの話ですが)。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

>エスケープしたいのですが エスケープの意味はコーテションで囲むみたいな意味なのか?わかりませんが、 >r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); >r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); >r = r.replace(/([ ]+)/g, ' '); ↑これは「四則演算子、数字、括弧」以外は除去されるので、エスケープとかの必要はないでしょう(まあバグがなければの話ですが)。 >バグがありましたので、修正しました (2)。 バグではありませんが、チョット修正しました。 「四則演算子、数字、括弧」以外は除去されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a; r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/([ ]+)/g, ' '); try{ alert(r+' = '+eval(r)); }catch(ex){ alert(ex.message+' : '+r); } } // --> </script>

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

バグがありましたので、修正しました (2)。 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a; r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); r = r.replace(/([ ]+)/g, ' '); try{ alert(r+' = '+eval(r)); }catch(ex){ alert(ex.message+' : '+r); } } // --> </script>

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

>>とりあえず1*-1ができない >それは考えてませんでした、下記で対応できます。 バグがありましたので、修正しました。 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a; r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/^[ \+\-\*\/]*([\+\-])/g, '$1'); r = r.replace(/(\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); r = r.replace(/([ ]+)/g, ' '); try{ alert(r+' = '+eval(r)); }catch(ex){ alert(ex.message+' : '+r); } } // --> </script>

okweb12345
質問者

お礼

その後どうでしょうか?お忙しいところ恐縮ですがよろしくお願いします。 また、教えていただいたエスケープはなかなか難しくどこに記載したらよいかなどわからないのですが、 htmlcharacterでphpはhtmlタグを安全な文字列に簡単に変換できるようですがjavascriptにはそのような便利な関数はないのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

>とりあえず1*-1ができない それは考えてませんでした、下記で対応できます。 「四則演算子、数字、括弧」以外は削除されます。<br> また式として成立しない文字列は計算できません。<br> <input type="text" name="gakunen" value="" onKeyPress="Calculator(this.value, event.keyCode)"> <script type="text/javascript"> <!-- function Calculator(a, kcode){ var r; if (!(13==kcode)){return;} // ↑「13:Enterキー」でない場合は「return」 r = a; r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); r = r.replace(/^[ \+\-\*\/]*([\+\-])/g, '$1'); r = r.replace(/([ ]+)/g, ' '); try{ alert(r+' = '+eval(r)); }catch(ex){ alert(ex.message+' : '+r); } } // --> </script>

okweb12345
質問者

お礼

>>> >r = r.replace(/([^0-9\.\-\/\*\+\(\) ]+)/g, ' '); >r = r.replace(/([\*\/])[ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2$3'); >r = r.replace(/[\+\-][ \+\-\*\/]*([\+\-])[ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/([\+\-\*\/])[ \+\-\*\/]*[\*\/][ ]*([0-9\.\(]+)/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*([\+\-])/g, '$1$2'); >r = r.replace(/(^|\()[ \+\-\*\/]*[\*\/]/g, '$1'); >r = r.replace(/([ ]+)/g, ' '); 文字列.replace( 検索文字列 , 置換文字列 ) 文字列の置換を行います という事なので変数rの中に入っている文字列?テキストエリアのテキスト? を上記の文字に変換するという事でしょうか? 恐らくトンチンカンですいません。 >>> if (!(13==kcode)){return;} これは上記の許可する13文字に該当しなかったら何かを返すのですか?? 初心者なのでさっぱりわかりません。

okweb12345
質問者

補足

下記のお礼コメントの件教えていただければ幸いです。 ここがわからないと前に進めないので、お忙しいところ恐縮ですがよろしくお願いします。 今処理はeval の前においておけばいいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 同じFunctionで、同じ計算させたいのですが

    私は今、以下のようにここで教えていただいたプログラムを参考に組んでは見たものの、同じ行をいくつもコピペすると計算されなくなってしまいます。1行だけの計算でしようとするとうまく計算されるのですが・・・ <HTML> <HEAD> <TITLE> タイトルバーに表示されるテキスト </TITLE> <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function SUM(){ if(!isNaN(document.sum.text1.value) && !isNaN(document.sum.text2.value) && !isNaN(document.sum.text3.value) && document.sum.text1.value && document.sum.text2.value && document.sum.text3.value){ document.sum.text4.value = eval(document.sum.text1.value) + eval(document.sum.text2.value) - eval(document.sum.text3.value) } if( !isNaN(document.sum.text5.value) && !isNaN(document.sum.text6.value) && document.sum.text5.value && document.sum.text6.value){ document.sum.text7.value = eval(document.sum.text4.value) + eval(document.sum.text5.value) + eval(document.sum.tex6.value) } } //--> </SCRIPT> </HEAD> <BODY> <FORM NAME="sum" onSubmit="SUM();return false;"> A<INPUT TYPE="text" NAME="text1" onChange="SUM()" SIZE="10"><BR> B<INPUT TYPE="text" NAME="text2" onChange="SUM()" SIZE="10"><BR> C<INPUT TYPE="text" NAME="text3" onChange="SUM()" SIZE="10"><BR> D=A+B-C<INPUT TYPE="text" NAME="text4" onChange="SUM()" SIZE="10"><BR> E<INPUT TYPE="text" NAME="text5" onChange="SUM()" SIZE="10"><BR> F<INPUT TYPE="text" NAME="text6" onChange="SUM()" SIZE="10"><BR> G=D+E+F<INPUT TYPE="text" NAME="text7" onChange="SUM()" SIZE="10"><BR> </FORM> </BODY> </HTML>

  • Javaで計算結果によって文字色を変えたい

    下記のような計算プログラムを検討しています。 全くの素人なので、ネットで参考になるものを探して、やっとここまで出来ました。 計算結果の値によって文字色を変えたいのですが上手くいきません。 例えば、数値が100以上であれば青、200以上であれば、赤・・・というように設定したいのですが、どのように記述すれば良いでしょうか。 よろしくお願い致します。 <HTML> <HEAD> <TITLE>計算</TITLE> </HEAD> <BODY> <SCRIPT language="JavaScript"> <!-- function keisan1(x1,x2){ a=0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))*1000; return a.toFixed(0);} function keisan2(x1,x2,x3,x4,s1){ b=eval(x2)+Math.pow((0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))),2)*eval(document.getElementById('s1').value)*eval(x3)+0.01*eval(x4); return b.toFixed(2);} function keisan3(x1,x2){ c=200*Math.pow((eval(x1)/10),2)*(eval(x2)); return c.toFixed(0);} //--> </SCRIPT> <H3>TEST</H3> <FORM name="fk">※ 条件を入力して下さい <BR> <BR> 条件(1)<SELECT name="s1" id="s1" onchange="b();"> <OPTION value="0.2">A</OPTION> <OPTION value="0.9">B</OPTION> </SELECT> <BR> 条件(2)<INPUT size="10" type="text" name="d1" style="text-align:right"><BR> 条件(3)<INPUT size="10" type="text" name="d2" style="text-align:right"><BR> 条件(4)<INPUT size="10" type="text" name="d3" style="text-align:right"><BR> 条件(5)<INPUT size="10" type="text" name="d4" style="text-align:right"><BR> <BR> <INPUT type="button" value="計算開始" onclick="document.fk.calc1.value=keisan1(document.fk.d1.value,document.fk.d2.value);document.fk.calc2.value=keisan2(document.fk.d1.value,document.fk.d2.value,document.fk.d3.value,document.fk.d4.value,document.fk.s1.value);document.fk.calc3.value=keisan3(document.fk.d1.value,document.fk.d2.value);"> <BR> 回答(1)<INPUT size="10" type="text" name="calc1" style="text-align:right"> <BR> 回答(2)<INPUT size="10" type="text" name="calc2" style="text-align:right"> <BR> 回答(3)<INPUT size="10" type="text" name="calc3" style="text-align:right"> </FORM> </BODY> </HTML>

  • 初めて書いたけど、動かないw

    いろいろjsのサンプルとか見てて 作れそうと思って作ったんですが、動きません もしかしたらjs以前の問題かもしれませんが エラーではdocument.x1.x2がnullだとか・・ めちゃくちゃなものかもしれないですが、見てください おねがいします --------------------------- <html> <head> <script type="text/JavaScript"><!-- function keisan() { n1=document.x1.x2.value; n2=document.x1.x3.value; n1=eval(n1); n2=eval(n2); alert(n1+n2); } // --></script> </head> <body> <form neme="x1"> 計算します<br/> <input name="x2" type="text" value="1"> + <input name="x3" type="text" value="2"> <input type="button" value="=" onClick="keisan()"> </form> </body> </html>

  • javascriptでフォームの値の計算

    javascript1か月目の初心者です。 7つのテキストフィールドに数値を代入させて合計と平均(最後には標準偏差)を計算しようと思ってます。 以下のように考えましたが、うまくいきません。 strが文字列として?扱われてしまっているようです。 strをevalで囲んでみてもダメです。 詳しい方教えてください。 <!--スクリプト1--> <SCRIPT LANGUAGE="JavaScript"> <!-- function f_check() { if(document.F1.num1.value!=""&&document.F1.num2.value!=""&&document.F1.num3.value!=""&&document.F1.num4.value!=""&&document.F1.num5.value!="" &&document.F1.num6.value!=""&&document.F1.num7.value!=""){ str=0 for(var i = 0;i<document.F1.length;i++){ str+=document.F1[i].value; } alert('合計は'+str+"です"); avrg = (str)/document.F1.length; alert('平均は'+avrg+'です'); //ここから標準偏差の計算(略)。 } // --> </SCRIPT> <form method="post" name="F1" onSubmit="return f_check()"> 数値を入れてください<input type="text" name="num1" size="5"><br> 数値を入れてください<input type="text" name="num2" size="5"><br> 数値を入れてください<input type="text" name="num3" size="5"><br> 数値を入れてください<input type="text" name="num4" size="5"><br> 数値を入れてください<input type="text" name="num5" size="5"><br> 数値を入れてください<input type="text" name="num6" size="5"><br> 数値を入れてください<input type="text" name="num7" size="5"><br> <INPUT TYPE=SUBMIT VALUE="平均をとる"></FORM>

  • Evalの正しいソースを教えてください

    <body> <form id="fm"> <input name="t1" value="てすと"> </form> <script language="VBScript"> Function bt_onClick() MsgBox Eval("t" & CStr(1) & ".value") End Function </script> <button name="bt"></button> </body>

  • javascriptをはじめて勉強しているものです。

    javascriptをはじめて勉強しているものです。 すみません。 以下のソースで、フォームがサブミットされたら、 inputの中身の値をチェックするものです。 chkValue()実行時、 emailアドレスの入力形式をチェックする関数をいれていますが、 こちらが、意図した動作をしません。(GETされてしまう) 原因教えていただきたいです。 お手数をお掛けしますが、どうぞよろしくお願いいたします。 <html> <head> <script type ="text/javascript"> <!-- function chkNum(T){ if(T.value.match(/[^0-9]/g)){ T.value=""; alert("数値以外は入力できません。"); } } function chkValue(){ if(document.myform.tboxInt.value.match(/[0-9]{4}/)){ document.myform.tboxInt.style.backgroundColor="#000"; }else{ alert("4桁の数字でないといけません。"); document.myform.tboxInt.style.backgroundColor="#f99"; document.myform.tboxInt.focus(); return false; } if(document.myform.tboxemail.value.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)){ alert("ok"); }else{ document.myform.tboxEmail.value=""; alert("正しいメールアドレス形式で入力してください。"); document.myform.tboxemail.style.backgroundColor="#f99"; document.myform.tboxemail.focus(); return false; } alert(document.myform.tboxemail.value); alert("ok2") return true; } //--> </script> </head> <body> <form name="myform" onSubmit="return chkValue()"> <table border="1"> <tr> <td>数値フィールド</td> <td><input type="text" name="tboxInt" onkeyup="chkNum(this)"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="tboxemail"></td> </tr> </table> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <input type="submit" value="確認"> </form> </body> </html>

  • Java 計算結果の表示ボックスの書式を変えたい

    計算結果が表示されるボックスの表示(回答(1)(2)(3)のみ)を下記のようなバリエーションで変えたいのですが、どのように記述すれば良いでしょうか。 (1)枠線の色を変えたい (2)枠線の太さを変えたい (3)枠線内(ボックス)を一定の時間で、任意の色で点滅させたい(現在は条件をつけて枠内の色が変わるように記述しています) よろしくお願い致します。 <HTML xmlns="http://www.w3.org/1999/xhtml" lang="ja"> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <TITLE>計算テスト</TITLE> </HEAD> <BODY bgcolor="#FFFFCC"> <FONT SIZE="3"> <SCRIPT language="JavaScript"> <!-- function keisan1(x1,x2){ a=0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))*1000; return a.toFixed(0);} function keisan2(x1,x2,x3,x4,s1){ b=eval(x2)+Math.pow((0.2*(eval(x1)/10)*(eval(x1)/10)*Math.sqrt(eval(x2))),2)*eval(document.getElementById('s1').value)*eval(x3)+0.1*eval(x4); return b.toFixed(2);} function keisan3(x1,x2){ c=20*(eval(x1)/10)*(eval(x1)/10)*(eval(x2)); return c.toFixed(0);} function calc(){ // ← 計算ボタンが押されたらこの関数が呼ばれる   var d1 = document.fk.d1;   var d2 = document.fk.d2;   var d3 = document.fk.d3;   var d4 = document.fk.d4;   var s1 = document.fk.s1;   var ans1 = keisan1(d1.value, d2.value);   var calc1 = document.fk.calc1;   calc1.value = ans1;   var ans2 = keisan2(d1.value, d2.value, d3.value, d4.value, s1.value);   var calc2 = document.fk.calc2;   calc2 .value = ans2 ;   if(ans2 >= 0) calc2.style.color = "#e60000";   if(ans2 >= 0) calc2.style.backgroundColor = "#ffffff";   if(ans2 >= 1.4) calc2.style.color = "#ffffff";   if(ans2 >= 1.4) calc2.style.backgroundColor = "#e60000";   var ans3 = keisan3(d1.value, d2.value);   var calc3 = document.fk.calc3;   calc3.value = ans3;   if(ans3 <180) calc3.style.backgroundColor = "#D5FFCB";   if(ans3 >=180) calc3.style.backgroundColor = "#FFCC99";   if(ans3 >=270) calc3.style.backgroundColor = "#FF9999"; } //--> </SCRIPT> <FONT SIZE="5"><B>計算</B></font><BR> <FORM name="fk"> <FONT SIZE="3">   ●条件(1):<INPUT size="7" type="text" name="d1" style="text-align:right"><BR>   ●条件(2):<INPUT size="7" type="text" name="d2" style="text-align:right"><BR>   ●条件(3):<SELECT name="s1" id="s1" onchange="b();"> <OPTION value="0.1">A</OPTION> <OPTION value="0.2">B</OPTION> </SELECT> <BR>   ●条件(4):<INPUT size="7" type="text" name="d3" style="text-align:right"><BR>   ●条件(5):<INPUT size="7" type="text" name="d4" style="text-align:right"><BR> <BR>   <INPUT type="button" value="計算開始" onclick="calc()"> <BR> <BR>   ◆回答(1):<INPUT size="7" type="text" name="calc1" style="text-align:right"><BR>   ◆回答(2):<INPUT size="7" type="text" name="calc2" style="text-align:right"><BR>   ◆回答(3):<INPUT size="7" type="text" name="calc3" style="text-align:right"><BR> <BR> </FONT> </FORM> </BODY> </HTML>

  • 『`』がテキストタイプのvalueにある場合にhiddenを追加すると表示が崩れる

    言葉では説明できないためコードを記載致しました。 下記のコードでボタンを押下した場合に表示が崩れるのは何故でしょうか?(IE6,IE7で確認) 又、対策としてはどのような事が考えられるでしょうか?(『`』を入力禁止以外でお願い致します。) 尚、innerHTMLをalertで出すとうまく追加されていないようです。。。 よろしくお願い致します。 <html> <head> <script> function createhidden( name, value, formname ){ str = '<input type="hidden" name="aaa" value="bbb"/>'; document.forms[0].innerHTML += str; } </script> </head> <body> <form action="" name="form1"> <input type="text" name="b"value="`"/><br><br> <input type="button" value="CREATE HIDDEN" onclick="createhidden()"/> <input type="text" name="a"value="`"/><br><br> </form> </body> </html>

  • CFLOOPで計算させたいのですが(2)

    先ほどとの関連になりますが、 <SCRIPT LANGUAGE="JavaScript"> <!--JavaScript function TotalSum(i) { var evalStr = eval("document.sum" + i); with(evalStr) { if(!isNaN(text1.value) && !isNaN(text2.value) && !isNaN(text3.value) && text1.value && text2.value && twxt3.value); { text4.value = eval(text1.value) + eval(text2.value) - eval(twxt3.value); } if( !isNaN(text5.value) && !isNaN(text6.value) && text5.value && text6.value); { text7.value = eval(text4.value) + eval(text5.value) + eval(text6.value); } } } // --> </script> </head> <body> <TABLE BORDER="1"> <FORM name="myform" action="url" method="post" onSubmit="TotalSum(' + i + ');return false;"> <cfloop index="i" from="1" to="10"> <TR> <TD><input type="text" name="text1" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text2" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text3" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text4" onChange="TotalSum('+i+')" value="0"></TD> <TD><input type="text" name="text5" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text6" onChange="TotalSum('+i+')" value=""></TD> <TD><input type="text" name="text7" onChange="TotalSum('+i+')" value="0"></TD> </TR> </cfloop> </form> </TABLE> </body> また、見当はずれなこと言っていたらすみません。

  • JAVASCRIPTでINPUT

    HTMLとJAVASCRIPTとJSPを使ってシステム構築をしております。 --------------- <html> <head> <SCRIPT Language="JavaScript"> <!-- function send() { alert("<input type=text name=name2>"); } // --> </SCRIPT> </head> <body> <form onSubmit="send(); return false;"> <input type=text name=name1> <input type=submit> </form> </body> </html> --------------- 上記のコードでやりたいことは、 submitボタンが押されたときにJAVASCRIPTを呼び出し JAVASCRIPT上で文字を入力し次画面へ送信するような機能を作りたいと思っているのですが、本を見てもなかなか載っていません。 もしかしたらJAVASCRIPTだけではできないかもしれません。 JSPまたはPHPで出来る機能でも良いので教えてください。