C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: javascript


(過去ログ 30 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■13870 / inTopicNo.1)  javascript
  
□投稿者/ 新 (7回)-(2008/02/05(Tue) 22:29:14)

分類:[JavaScript] 

var test = document.createElement('input')
で作成するテキストボックスにonclickイベントなどで別の関数(例えばとりあえずアラート)
をつけるにはどうかいたらいいのでか聞いてもよろしいでしょうか
引用返信 編集キー/
■13872 / inTopicNo.2)  Re[1]: javascript
□投稿者/ mあ@反省中 (15回)-(2008/02/06(Wed) 01:36:15)
No13870 (新 さん) に返信
> var test = document.createElement('input')
> で作成するテキストボックスにonclickイベントなどで別の関数(例えばとりあえずアラート)
> をつけるにはどうかいたらいいのでか聞いてもよろしいでしょうか

例1)
var test = document.createElement('input')
test.onclick = function() {
   alert("ok");
};

例2)
var test = document.createElement('input')
test.attachEvent("onclick", function(){alert("ok"); });

例3)
var test = document.createElement('input')
test.onclick = function(msg) {
   return function() {
      alert(msg);
   };
}("OK");

例4)
function message() {

  alert("msg");

}
test.onclick = message;

例5)
function message(msg) {

  alert(msg);

}
test.onclick = "message('" + msg + "')";


・・・

引用返信 編集キー/
■13878 / inTopicNo.3)  Re[1]: javascript
□投稿者/ やじゅ (109回)-(2008/02/06(Wed) 08:58:51)
No13870 (新 さん) に返信

タイトルの「javascript」のみだと、回答が得にくいですよ。
引用返信 編集キー/
■14023 / inTopicNo.4)  Re[2]: javascript
□投稿者/ 新 (11回)-(2008/02/07(Thu) 21:45:24)
No13872 (mあ@反省中 さん) に返信
有難うございます。
アラーとで実行できましたがもう一つご質問なんですが、
var test = document.createElement('input')で
作成したテキストボックスのonclickに作成した
テキストボックスを消す物をアラーとの変わりに
書いたところうまくいきませんでした。
this.parent.removeChild(this)

何がいけないんでしょうか?
お願い致します。

引用返信 編集キー/
■14027 / inTopicNo.5)  Re[3]: javascript
□投稿者/ やじゅ (124回)-(2008/02/07(Thu) 22:58:00)
やじゅ さんの Web サイト
No14023 (新 さん) に返信
> テキストボックスを消す物をアラーとの変わりに
> 書いたところうまくいきませんでした。
> this.parent.removeChild(this)
>
> 何がいけないんでしょうか?
>

引数this が何を指しているか、考えてみればいいです。
引用返信 編集キー/
■14093 / inTopicNo.6)  Re[3]: javascript
□投稿者/ Hirotow (181回)-(2008/02/08(Fri) 21:09:48)
No14023 (新 さん) に返信
> ■No13872 (mあ@反省中 さん) に返信
> 有難うございます。
> アラーとで実行できましたがもう一つご質問なんですが、
> var test = document.createElement('input')で
> 作成したテキストボックスのonclickに作成した
> テキストボックスを消す物をアラーとの変わりに
> 書いたところうまくいきませんでした。
> this.parent.removeChild(this)
>
> 何がいけないんでしょうか?
> お願い致します。
>
tr/parent/parentNode/
#tr/置き換える前/置き換えた後/と言う意味。
#結構よく使われるので覚えといてください。

Firefox+Firebugな環境だとデバックが楽ですよ。

>>やじゅさん
HTML要素のイベントでのthisは関数ではなくその要素自身(.NETでのsenderみたいなもの)なので間違いではないです。
引用返信 編集キー/
■14137 / inTopicNo.7)  Re[4]: javascript
□投稿者/ 新 (12回)-(2008/02/10(Sun) 14:07:03)
No14093 (Hirotow さん) に返信
> ■No14023 (新 さん) に返信
>>■No13872 (mあ@反省中 さん) に返信
>>有難うございます。
>>アラーとで実行できましたがもう一つご質問なんですが、
>>var test = document.createElement('input')で
>>作成したテキストボックスのonclickに作成した
>>テキストボックスを消す物をアラーとの変わりに
>>書いたところうまくいきませんでした。
>>this.parent.removeChild(this)
>>
>>何がいけないんでしょうか?
>>お願い致します。
>>
> tr/parent/parentNode/
> #tr/置き換える前/置き換えた後/と言う意味。
> #結構よく使われるので覚えといてください。

返信有難うございます。申し訳ありませんがそのtr/parent/parentNode/の意味がいまいち
理解できていません。
自分なりに、thisをやめて
document.getElementById(test)//IDをtestとしました。
test.parent.removeChild(test)としてみましたがオブジェクトがありませんというエラーが出てしまいました。

どう直したらいいのでしょうか?

> Firefox+Firebugな環境だとデバックが楽ですよ。

調べてみます。有難うございます
 
> >>やじゅさん
> HTML要素のイベントでのthisは関数ではなくその要素自身(.NETでのsenderみたいなもの)なので間違いではないです。
引用返信 編集キー/
■14138 / inTopicNo.8)  Re[5]: javascript
□投稿者/ やじゅ (143回)-(2008/02/10(Sun) 15:02:32)
やじゅ さんの Web サイト
No14137 (新 さん) に返信

>作成したテキストボックスのonclickに作成した
>テキストボックスを消す物をアラーとの変わりに
>書いたところうまくいきませんでした。

この部分のソースを提示してください。
そうでないと、this・testでいいのか見えてこないんですよね。
引用返信 編集キー/
■14139 / inTopicNo.9)  Re[5]: javascript
□投稿者/ Hirotow (182回)-(2008/02/10(Sun) 15:41:49)
2008/02/10(Sun) 15:43:17 編集(投稿者)

>>tr/parent/parentNode/
>>#tr/置き換える前/置き換えた後/と言う意味。
>>#結構よく使われるので覚えといてください。
>
> 返信有難うございます。申し訳ありませんがそのtr/parent/parentNode/の意味がいまいち
> 理解できていません。
だからparentをparentNodeに汁。

#prototype.js使えばthis.remove()で消せるけど。
引用返信 編集キー/
■14175 / inTopicNo.10)  Re[6]: javascript
□投稿者/ 新 (16回)-(2008/02/12(Tue) 13:14:35)
No14139 (Hirotow さん) に返信
> 2008/02/10(Sun) 15:43:17 編集(投稿者)
>
> >>tr/parent/parentNode/
> >>#tr/置き換える前/置き換えた後/と言う意味。
> >>#結構よく使われるので覚えといてください。
>>
>>返信有難うございます。申し訳ありませんがそのtr/parent/parentNode/の意味がいまいち
>>理解できていません。
> だからparentをparentNodeに汁。
>
> #prototype.js使えばthis.remove()で消せるけど。

function testf(){

var test = document.createElement('input');
test.attachEvent('onclick',testff());
document.getElementById('aiu').appendChild(test);


}

function testff(){
this.parentNode.removeChild(this);
}

テーブルtbへ<td onclick="testf()" id="aiu">で
this.parentNodeはnullまたはオブジェクトではありませんエラー
となってしまいます

function testf(){
var test = document.createElement('input');
document.getElementById('aiu').appendChild(test);
test.attachEvent('onclick',function(){this.parentNode.removeChild(this);});
}
引用返信 編集キー/
■14176 / inTopicNo.11)  Re[7]: javascript
□投稿者/ しながわん (1回)-(2008/02/12(Tue) 13:50:34)
No14175 (新 さん) に返信
> function testf(){
>
> var test = document.createElement('input');
> test.attachEvent('onclick',testff());
                ~~~~~~~~~ <<== 実行してる・・・
> document.getElementById('aiu').appendChild(test);
>
>
> }

以上
引用返信 編集キー/
■14187 / inTopicNo.12)  Re[7]: javascript
□投稿者/ Hirotow (183回)-(2008/02/12(Tue) 18:59:55)
No14175 (新 さん) に返信
> ■No14139 (Hirotow さん) に返信
>>2008/02/10(Sun) 15:43:17 編集(投稿者)
>>
>>>>tr/parent/parentNode/
>>>>#tr/置き換える前/置き換えた後/と言う意味。
>>>>#結構よく使われるので覚えといてください。
> >>
> >>返信有難うございます。申し訳ありませんがそのtr/parent/parentNode/の意味がいまいち
> >>理解できていません。
>>だからparentをparentNodeに汁。
>>
>>#prototype.js使えばthis.remove()で消せるけど。
>
> function testf(){
>
> var test = document.createElement('input');
> test.attachEvent('onclick',testff());
> document.getElementById('aiu').appendChild(test);
>
>
> }
>
> function testff(){
> this.parentNode.removeChild(this);
> }
>
> テーブルtbへ<td onclick="testf()" id="aiu">で
> this.parentNodeはnullまたはオブジェクトではありませんエラー
> となってしまいます
thisを関数に渡していないから。
あくまでthisが要素を指すのはonxxの中だけ。
関数呼び出すならtestf(this)として、
function testf(_this) {
みたいにして受け取る必要がある。

thisが何を指すかの判断はJavaScriptの基本。
引用返信 編集キー/
■14191 / inTopicNo.13)  Re[8]: javascript
□投稿者/ 新 (17回)-(2008/02/12(Tue) 21:09:31)
No14176 (しながわん さん) に返信
> ■No14175 (新 さん) に返信
>>function testf(){
>>
>> var test = document.createElement('input');
>> test.attachEvent('onclick',testff());
>                 ~~~~~~~~~ <<== 実行してる・・・
>> document.getElementById('aiu').appendChild(test);
>>
>>
>>}
>
> 以上

どういった意味なのでしょうか?
引用返信 編集キー/
■14203 / inTopicNo.14)  Re[8]: javascript
□投稿者/ mあ@反省中 (16回)-(2008/02/13(Wed) 00:12:08)
2008/02/13(Wed) 00:41:34 編集(投稿者)
2008/02/13(Wed) 00:41:27 編集(投稿者)
2008/02/13(Wed) 00:28:49 編集(投稿者)
<pre><pre>2008/02/13(Wed) 00:17:55 編集(投稿者)
2008/02/13(Wed) 00:12:59 編集(投稿者)

<pre><pre>■No14187 (Hirotow さん) に返信
> thisを関数に渡していないから。
> あくまでthisが要素を指すのはonxxの中だけ。
> 関数呼び出すならtestf(this)として、
> function testf(_this) {
> みたいにして受け取る必要がある。
> 
> thisが何を指すかの判断はJavaScriptの基本。

いや。そーとも限らないっす。
<input type=text onclick="testf(this)" />
function testf(_this) {} はクロスブラウザではやっちゃいけない。
Firefoxではイベントメソッドの第一引数にイベントオブジェクトが
渡されるから。
強いてやるなら、
function testf(e) {
  var o = null;
  if (e.target) o = e.target;
  else o = e.srcElement;
} 
ってやる。
HTML は、
<input type=text onclick="testf(event)" />
event はIEではグローバル変数チックなイベント変数。

それと、イベントメソッド内での暗黙の this はイベント発生元を指すから
このときの this の用法は間違ってないです。
ただ、this をむやみに使うのはコードの読みに弊害を及ぼすので好ましく
ないことは確かですけどね。

スレ主さん>
xxx.attachEvent("onclick", function() { alert('ok') });
この 匿名関数は実行していません。

xxx.attachEvent("onclick", testf());
このtestf メソッドはattachEvent される時点で既に実行されています。
イベントに登録されるのは、testf() の戻り値。
testf() はイベントが発生するまでは<input>のイベントではありませんから、
this は undefined ってことになりますね。

# 訂正ばっかし。。。
# 更に訂正

Firefox で暗黙の第一引数が何なのか見てください。
<script>
function fff() {
  var o = document.createElement("input");
  o.type = "button";
  o.onclick = function(e) {
    alert(this.tagName); //<<== this はイベント発生元のオブジェクトをさす
    alert("ok:" + e + "::" + e.target); //<<==IE ではここでこける
  };
  document.body.appendChild(o);
  alert(o.onclick);
}
window.onload = function() {
   fff();
}
</script>

#さらに訂正(しつこい)。
IE でもこけないようにするためには、
o.onclick = function(event) {
   var o = null;
   if (event.target) o = event.target;
   else o = event.srcElement;
   ...
}
ってやります。


</pre></pre></pre></pre>

引用返信 編集キー/
■14207 / inTopicNo.15)  Re[9]: javascript
□投稿者/ Hirotow (184回)-(2008/02/13(Wed) 01:38:02)
> #さらに訂正(しつこい)。
> IE でもこけないようにするためには、
> o.onclick = function(event) {
> var o = null;
> if (event.target) o = event.target;
> else o = event.srcElement;
> ...
> }
> ってやります。

訂正有り難うございます。
ただそこは三項演算子の方がいいかなとも思います。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -