• ベストアンサー

onClickイベントの変更方法

JavaScriptのonclickイベントについてですが、  <form name="fm">  <input type="button" name="bt" value="開始" onclick="Change(1)"> という感じのフォームで、ボタンを押すとChange関数の方で、  if(f == 1) {    document.fm.bt.value="停止";    document.fm.bt.onclick="Change(0)"; //(A) として、onclickイベントの内容を変更したいのですが、 実際には上のような(A)の文では、 エラーは出ませんが、イベントの実行はできません。 onclickイベントの変更方法をご教授下さい。 ちなみに、プログラム自体は別の方法で対処しましたので、 「もっといい方法がある」というご回答は結構です。 それと、もう一つ教えていただきたいのですが、上の例で、  document.writeln(document.fm.bt.onClick); と実行すると"undefined"と表示されますが、  document.writeln(document.fm.bt.onclick); //(onClickのCが小文字) と実行すると"function anonymous() { Change(1) } "と表示されます。 大文字と小文字で、なぜ動作が変わるのでしょうか? ご教授下さい。

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

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

document.fm.bt.onclick = new Function("Change(0);"); としてみてください。 私もわからなくて色々試してこうなりました。 勉強になりました。 別の方法ってinnerHTMLですかね?

Takochu
質問者

補足

ご回答ありがとうございます。 見事に解決しました。勉強になりました。 ちなみに別の方法とはinnerHTMLではなく、もっとシンプルで、  if(document.fm.bt.value == "開始") {    document.fm.bt.value="停止";      ・  ・  ・      ・  ・  ・  }  else {    document.fm.bt.value="開始";      ・  ・  ・      ・  ・  ・  } として、Change関数の引数をなくしました。 グローバル変数を使っても良かったのですが、 これの方がシンプルかと思いました。 開始と停止の切り替えをするだけでしたので、 無理にonClickイベントの内容を変更する必要はなかったということです。 勉強不足でした。 ちなみに、報告ですが、  document.fm.bt.onClick=new Function("Change(0);"); と、onClickを小文字にした場合、エラーは出ませんが、 イベントの変更はできませんでした。 やっぱり、小文字の方が正しいようですね。

その他の回答 (4)

  • Struts
  • ベストアンサー率48% (29/60)
回答No.5

大文字小文字の件ですが JavaScriptとHTMLはべっこと思ってください。 それぞれの仕様通りにしないと動きません。 仕様はリファレンス本等を見て確認することです。 まぁ、動かないということは仕様外だということです。 > リファレンス本などは大文字の方が多用 これは、HTML内に記述するイベント属性のことだと思います。(onClick等) HTMLの記述については大文字小文字は意識しなくていいです。 ただし、JavaScript内では、オブジェクトのセッターやゲッターを使用する場合は仕様に従わないといけません。もちろん大文字小文字の違いもです。 JavaScriptのリファレンス本では大文字小文字は統一されていると思います。(多分 ^^;)

Takochu
質問者

お礼

JavaScriptとHTMLはべっこなんですね。 おっしゃる通り、そういえば、手持ちの リファレンス本で大文字で記述されているところは、 全て、HTMLタグ内ですね。 ちょっと、混同してました。 とても、参考になりました。

回答No.4

onclickとonClickの違いについてですが、動く方が正しい。つまり、onclickの方が正しいということになると思います。 HTML上に書く場合にはどちらでも良いですが、JavaScriptで操作する場合には他にもこんな場合があります。 document.all.Txt_Test.readonly = false;//間違い document.all.Txt_Test.readOnly = false;//正しい readonlyの切り替えですが、HTML上はreadonly,readOnlyと両方指定できますが、JavaScriptではreadOnlyでなければ認識してくれません。 他にもありますが、私の場合、わからなくなったら、googleで検索して、かたっぱしから実行しています。

Takochu
質問者

お礼

readOnlyの場合は"O"だけ大文字なんですか。 なにか、命名ルールに一貫性がないような気が。 どちらか分からない場合、かたっぱしからやったほうが早いですね。 とても、参考になりました。

Takochu
質問者

補足

※※※※※※ 訂正 ※※※※※※ ANo.#3補足の > ちなみに、報告ですが、 > >  document.fm.bt.onClick=new Function("Change(0);"); > > と、onClickを小文字にした場合、エラーは出ませんが、 >        ~~~~~~ > イベントの変更はできませんでした。 下線部は「大文字」の間違いです。 この場をお借りして、訂正致します。 ※※※※※※※※※※※※※※※※

  • Struts
  • ベストアンサー率48% (29/60)
回答No.2

JavaScriptの関数内で使用されるオブジェクトがプリコンパイラ内で小文字で定義されているからだと思います。 ちなみに、valueも大文字が混じっていたりしたらだめだったと思います。 また、変数名や関数名など自由に決めれるものも大文字と小文字は別の文字として扱われます。

Takochu
質問者

補足

ご回答ありがとうございます。 ということは、"onClick"に限っては、"C"が 小文字での使用のほうがトラブルが少ないということでしょうか? リファレンス本などは大文字の方が多用されているように思うのですが。

  • clieat
  • ベストアンサー率27% (26/95)
回答No.1

それは大文字と小文字で別々の字として認識してしまうからです。 大文字は大文字で認識し、小文字は小文字で認識します。 htmlとかは全然関係ないんですけどね。

Takochu
質問者

補足

ご回答ありがとうございます。 onClickもonclickも、通常使用する分には 違いはないと思うのですが、質問に書いた例では 動作に違いが出てしまいます。 なぜなんでしょうか? しかも、小文字のときの動作の方が正しい動作に見えます。

関連するQ&A

  • onClickイベントの記述方法

    こんばんは、皆さん。 JavaScriptのonClickイベントで、うまく動きません。 以下のようにしました。一部関連する箇所の抜粋です。 どこがおかしいかご指摘ください。 <SCRIPT TYPE="text/javascript"> <!-- function ActionChange(CGI){ document.form.action='http://x.x.x.x/cgi-bin/b.cgi'; document.form.submit(); } //--> </SCRIPT> <FORM METHOD="POST" NAME="FORM" ACTION="http://x.x.x.x/cgi-bin/a.cgi"> <INPUT TYPE="submit" VALUE="aaa"> <INPUT TYPE="button" VALUE="bbb" onclick="ActionChange('b.cgi)"> よろしくおねがいします。

  • JavaScript Eventのタイミング

    Eventの挙動を学ぶために、簡単なスクリプトを作成しました。 テキストボックスに文字列を入れて、Submitボタンを押すと、 テキストボックスの下に(innerHTMLで)入力文字が表示され、 ボタン自体も入力文字になるというものです。 しかし、テキストに文字を入力し、Submitを押してもボタン・innerHTMLともに文字は変化しません。このままリロードをすると変化します。 挙動からして、マウスクリック自体は反応していないが、リロードによりイベントハンドラが動作しているように見受けられます。 イベントハンドラはonclickに代入しているためなぜこのようになるのか わかりません。 できるだけ、JavascriptとHTMLを分離したく外だしのファイルで 実現したいと思っています。 考え方、(比較的平易な)参考資料などありましたら教えていただけないでしょうか? HTMLで<body onload="init()">として、JavaScriptでは以下のように記述しています。 function init(){ document.getElementById("button").click = change(); } function change(){ keyword = document.getElementById("keyword").value; document.getElementById("input").innerHTML = keyword; document.getElementById("button").value = keyword; }

  • onclickタグ類が開けない

    こんにちは。 プルダウン(ボタンあり)のリンクについてなのですが、HTMLサイト様やその他のサイト様ではウィンドウが開けるのに対して、私が打ったonclick系タグ全般(2フレーム同時リンクなど)がエラーを起こしてウィンドウが開けません。 以下が例のタグです。 <form method="post" name="puru2"> <select name="sentaku2"> <option>最初の文字</option> <option value="リンク先アドレス">リンク1</option> <option value="リンク先アドレス">リンク1</option> <option value="リンク先アドレス">リンク1</option> </select> <input type="button" value="ボタンの文字" onclick="parent.表示させたいページ名.location.href=document.puru2.sentaku2.options[document.puru2.sentaku2.selectedIndex].value"> </form> どこが悪いのか全然わかりません。 ご回答、お願いします。

  • OnClickで動画(mpgファイル)を変更する方法。

    リンクをクリックしたら特定の場所にある動画を変更する方法を調べています。 OnClickで画像を変更する方法はいろいろあったのですが、 動画(mpgファイル)を変更する方法が全くわかりません。 画像の場合の、 <IMG SRC="画像ファイル" NAME="test"> document.test.src="画像ファイル"; のような感じで <EMBED SRC="×××.mpg" NAME="test"> のSRCを変更する方法はないでしょうか。 よろしくお願いします。

  • フォームのvalueを変更する方法

    下記はjavaScriptで書いたものですが、javaScriptが有効になっていないと機能しないので perlで同じことをやりたいのですが、フォームのvalueを変更する方法とinnerHTMLの様なボタンをクリックするとテキストを変更する方法が分かりません。 ヒントでも良いので教えていただけませんか? <HTML> <HEAD><SCRIPT language="JavaScript"> <!-- function nextA(){ var data = document.formA.data.value; data++; document.formA.data.value = data; } //--> function nextB(){ var data = document.formB.data.value; data++; document.formB.data.value = data; document.getElementById("print").innerHTML = data; } //--> </SCRIPT> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY> <FORM name="formA"> <input name="data" value="1"> <INPUT type="button" value="足す" onclick="nextA()"> </FORM> <FORM name="formB"> <SPAN id="print">1</SPAN> <INPUT type="button" value="足す" onclick="nextB()"> <INPUT type="hidden" name="data" value="1" > </FORM> </BODY> </HTML>

    • ベストアンサー
    • CGI
  • onclickタグ類が開けない

    こんにちは。HTMLの板でも投稿させていただいたのですが、javascriptの板の方がいいとう回答をもらいましたので投稿してみました。 プルダウン(ボタンあり)のリンクについてなのですが、HTMLサイト様やその他のサイト様ではウィンドウが開けるのに対して、私が打ったonclick系タグ全般(2フレーム同時リンクなど)がエラーを起こしてウィンドウが開けません。 以下が例のタグです。 <form method="post" name="puru2"> <select name="sentaku2"> <option>最初の文字</option> <option value="リンク先アドレス">リンク1</option> <option value="リンク先アドレス">リンク1</option> <option value="リンク先アドレス">リンク1</option> </select> <input type="button" value="ボタンの文字" onclick="parent.表示させたいページ名.location.href=document.puru2.sentaku2.options[document.puru2.sentaku2.selectedIndex].value"> </form> どこが悪いのか全然わかりません。 ご回答、お願いします。

  • JavaScriptでの変数で数値を使った場合の疑問

    JavaScriptでの変数で数値を使った場合の疑問 <form action="sample.cgi" name="fm"> <button onclick="allInput()">全入力</button> <input size="10" type="text" name="hoge1" value=""> <input size="10" type="text" name="hoge2" value=""> <input size="10" type="text" name="hoge3" value=""> ・・・・ <input size="10" type="text" name="hoge30" value=""> </form> 上記のようなフォームがあったとします。 hoge1~hoge30まであるためにうけとる方法をforで受け取りたいのです。 <script Language="JavaScript"> function allInput() { for ( var i = 1; i <=30; i++ ) { document.fm.hoge+i.value = document.fm.hoge1.value; //上のiのところで1から30を文字列としたい } } </script> 内部的には document.fm.hoge2.value = document.fm.hoge1.value; document.fm.hoge3.value = document.fm.hoge1.value; document.fm.hoge4.value = document.fm.hoge1.value; ・・・ document.fm.hoge30.value = document.fm.hoge1.value; のようになっていきばいいのですが・・・ たとえになるかわかりませんが、Perlだと下のように$iの変数を文字列として扱えるのですが・・・ for ($i=1;$i <= 30; $i++){ ${"sample$i"} = param("hoge$i"); } よろしくお願いいたします。

  • onclickイベントでの二重送信防止に関して

    onclickイベントでフォームの二重送信の防止をしたいと考えています。 <input "type="submit">が一つしかないページでは、 <input "type="submit" onclick="this.disabled=true;this.value='送信中';this.form.submit();" value="送信"> でうまくいったのですが、 2つ以上あるページだと、クリックすると空白のページに飛んでしまい、フォームが送信できませんでした。 どのようにすれば、<input "type="submit">が2つ以上あるページでも、この方法で二重送信防止を作動させることができるでしょうか。 ご教授よろしくお願いいたします。

  • onclickは良くないのですか

    以前、こちらでJAVAScriptはonclickで動作すると 教えて頂き、a タグにそのように記述しています。 ところが、こちらのページでそれは宜しくないと 記述されており、大変衝撃を受けています。 http://d.hatena.ne.jp/HolyGrail/20080515/1210861489 質問1 aタグのonclickはプロの方はほとんど使ってないといいます。 やはり上記なような理由でよく使われてないのでしょうか。 質問2 JQueryを使った次のコードが紹介されていました。 どうもこれがベストな方法なようです。 $(document).ready(function(){ $('#clickevent').click(function(){ alert('clicked'); }); }) alertのところにonloadで実行する関数を置けば いいのかなと思います。 ただ、aタグで指定している<img>の設定がよくわかりません。 aタグのname属性なんかでidを指定するのでしょうか? コードを変えてもいいのかすら検討ができていません。 ご教授のほどをお願いします。

  • onclickイベントで、PHPの関数をコール

    下記のようなPHPスクリプトで、ボタンが押された時の、onclickイベントで<?php upload_file() ?>として PHPのupload_file() 関数をコールしてるのですが、画像ファイルがアップできません。 どこが間違いなのか、教えていただけますか。 --------------------------------------------------------------------------------- <form name="form2" method="POST" enctype="multipart/form-data" action="bbs.php"> <!-- ファイル参照フォームを表示する --> <input type="hidden" name="MAX_FILE_SIZE" value="30000"> <input type="file" name="upfile" tabindex="6"> <input type="button" value="画像を送信" tabindex="7" onclick="<?php upload_file() ?>"> </form>

    • 締切済み
    • PHP

専門家に質問してみよう