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>
テキストボックスに数字以外が入力されたら、ゴニョゴニョするスクリプトです。
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を参照することになります。
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を参照することになります。
ありがとうございました。よく分かりました。
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の関数とメソッド
ありがとうございました。理解できました。
ありがとうございました。よく分かりました。