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

訳あって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に関連する人気のQ&A

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


人気Q&Aランキング