javascriptのthis。


chkNum(this)のthisは何を指しているんですか?
chkNum(T)になぜTが入るんですか?chkNum()だとなぜダメなんですか。

thisがわかりません。
日本語で「これ」という意味ですが、日本語にしても意味ないですか?

<script type="text/javascript">

function chkNum(T) {
if (T.value.match(/[^0-9]/g)) {
T.value="";
document.form1.text1.value=T.replace(/[^0-9/g]/,"");
}
}

</script>


<form name="form1">
<input type="text" name="text1" onkeyup="chkNum(this)">
</form>

テキストボックスに数字以外が入力されたら、ゴニョゴニョするスクリプトです。

回答の条件
  • 1人2回まで
  • 登録:2006/10/07 20:43:42
  • 終了:2006/10/07 21:38:56

ベストアンサー

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442006/10/07 21:27:54

ポイント35pt

HTMLのタグの中でonkeyupなどのon~でJavaScriptを呼び出す場合、「this」というキーワードは特別に、そのJavaScriptコードを呼び出したタグそのものを意味します。特別なキーワードなので、日本語で「これ」などと書いてもダメです。


<input type="text" name="text1" onkeyup="chkNum(this)">

というHTMLがあるとき、onkeyupのJavaScriptが呼び出されたとき、thisは、このinputタグそのものを意味します。


また、関数の実体を定義している部分では、chkNum(T)と、「T」という文字が使われていますが、関数を定義する場合には、引数には任意の文字を使うことができます。これは一般的には「仮引数」と呼ばれ、その関数が呼び出されたときに「T」は、本来の引数に置き換えられて実行されます。

イメージとしては、chkNum(this)が呼び出されたとき、T = this; が実行されて(Tにthisが代入されて)から chkNum(T)が呼び出されるイメージです。


つまり、サンプルのHTMLでは、onkeyが実行される時、「T」はinputタグを意味します。そのため、T.valueは、this.valueと同じ意味であり、さらにthisはinputタグを指すため、inputタグのvalueを参照することになります。

id:webxix

ありがとうございました。よく分かりました。

2006/10/07 21:36:47

その他の回答(1件)

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442006/10/07 21:27:54ここでベストアンサー

ポイント35pt

HTMLのタグの中でonkeyupなどのon~でJavaScriptを呼び出す場合、「this」というキーワードは特別に、そのJavaScriptコードを呼び出したタグそのものを意味します。特別なキーワードなので、日本語で「これ」などと書いてもダメです。


<input type="text" name="text1" onkeyup="chkNum(this)">

というHTMLがあるとき、onkeyupのJavaScriptが呼び出されたとき、thisは、このinputタグそのものを意味します。


また、関数の実体を定義している部分では、chkNum(T)と、「T」という文字が使われていますが、関数を定義する場合には、引数には任意の文字を使うことができます。これは一般的には「仮引数」と呼ばれ、その関数が呼び出されたときに「T」は、本来の引数に置き換えられて実行されます。

イメージとしては、chkNum(this)が呼び出されたとき、T = this; が実行されて(Tにthisが代入されて)から chkNum(T)が呼び出されるイメージです。


つまり、サンプルのHTMLでは、onkeyが実行される時、「T」はinputタグを意味します。そのため、T.valueは、this.valueと同じ意味であり、さらにthisはinputタグを指すため、inputタグのvalueを参照することになります。

id:webxix

ありがとうございました。よく分かりました。

2006/10/07 21:36:47
id:KirakiraHikaru No.2

KirakiraHikaru回答回数354ベストアンサー獲得回数682006/10/07 21:28:45

ポイント35pt

thisはそのオブジェクト自身を指しています。

(ですので日本語で「です」だとダメです)

この場合、input type="text" name="text1"でthisを用いているので、

このときのthisは document.form1.text1です。

onkeyup="chkNum(this)"によって

function chkNum(T)が呼ばれると、

このときのTにdocument.form1.text1が入ります。

そのため、 T.value=""としたときに、

document.form1.text1のvalueに空文字が設定されるのです。

もし、chkNum(T)ではなくchkNum()と定義していた場合は、

onkeyup="chkNum(this)"でthisを引数に設定して渡すことができないので、

chkNum内ではTによってdocument.form1.text1を参照することができず、

document.form1.text1のように直接指定しなければならなくなります。


固定的な使い方であれば直接指定しても良いのですが、

同じ制御をするテキストボックスが増えたときや、

他のページでも流用することを考えると、

function chkNum(T)を定義しておき、

hkNum(this)として呼び出す方が良いかと思います。


CodeZine JavaScriptの関数とメソッド

http://codezine.jp/a/article.aspx?aid=221

id:webxix

ありがとうございました。理解できました。

2006/10/07 21:37:09

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません