のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,686,504人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

元スレ+ JavaScript の質問用スレッド vol.109 +

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
551 : Name_Not - 2013/10/02(水) 11:51:24.17 ID:Y2SqMS34 (-14,+25,-2)
どゆこと?
552 : Name_Not - 2013/10/02(水) 11:56:12.37 ID:??? (-4,-29,-18)
>>546はx=a.bとかやってx()で呼び出す場合に、
関数bの中でaをthisとして参照できない問題を解決したいんじゃないの?
553 : Name_Not - 2013/10/02(水) 11:59:17.53 ID:??? (-2,-30,-23)
$(document).on('click',a.b);

などとすると、thisではbからaを得ることが出来ないのです
554 : Name_Not - 2013/10/02(水) 12:02:29.68 ID:Y2SqMS34 (+0,+29,-5)
あー、なるほど
結局、thisキーワードを使わなければ良いのだね?
555 : Name_Not - 2013/10/02(水) 12:04:20.44 ID:??? (-2,-30,-30)
sageるの忘れてたすまん

$(document).on('click',function(evt){ a.b(evt); });

こうするのと、どっちが効率よいのだろう
556 : Name_Not - 2013/10/02(水) 12:12:07.07 ID:??? (+57,+29,-11)
ビルド方式はイニシャルコストがかかりますがハンドラ呼び出しコストは低いというメリットがあります
557 : Name_Not - 2013/10/02(水) 13:35:45.97 ID:??? (+0,-28,-55)
もともとオブジェクトを走査していくクラスビルド関数があったので、
$_で始まる関数名を持つメソッドに親オブジェクトを持たせる機能を組み込んだら
いい感じになりました
558 : Name_Not - 2013/10/02(水) 14:00:22.99 ID:??? (+3,-30,-142)
addEventListenerの第二引数にオブジェクトを指定すると
オブジェクトのhandleEventメソッドを呼んで、thisはオブジェクトを指してくれるらしいので
IE8以下用にaddEventListenerをエミュレートする関数を用意してあげれば多くのことが解決するのでしょうか?
559 : Name_Not - 2013/10/02(水) 14:11:25.03 ID:??? (+94,-1,-35)
そんな仕様あったっけ?
いずれにしろ呼び出されるのがhandleEventメソッド固定ならほとんど使い道がないような
560 : Name_Not - 2013/10/02(水) 14:13:12.50 ID:??? (+64,+28,-4)
>>559
関数でラップせずに閉じたスコープが作れるとか
561 : Name_Not - 2013/10/02(水) 14:33:38.32 ID:??? (+70,+29,-54)
>>559
逆にイベントを直接受ける関数を1つにまとめられるからかなり有用だよ
イベントオブジェクトが引数に必要な関数ばかり作ると、
イベント発生の時にしか呼べない関数が多数できることになるし。
562 : Name_Not - 2013/10/02(水) 14:43:06.23 ID:??? (+57,+29,-32)
同じところで受けたかったら同じメソッドを指定したらいいだけでは?
563 : Name_Not - 2013/10/02(水) 16:48:25.57 ID:??? (+32,-29,-30)
http://jsbin.com/amarUn/1/edit

documentに、body用のクリックハンドラを付けました
しかし四角をクリックしても反応してしまいます
bodyの上の要素に対するクリックがbodyまで突き抜けないようにするにはどうしたらいいですか?
564 : Name_Not - 2013/10/02(水) 17:20:53.73 ID:??? (+52,-30,-49)
>>563
$('#test').on('click',function(e){e.stopPropagation();});

ちなみに上じゃなくて下な。
W3Cにわかりやすい図がある
565 : Name_Not - 2013/10/02(水) 17:31:43.93 ID:??? (+57,+29,-14)
ありがとうございます
イベント的にはルートノードが上なんですね
566 : Name_Not - 2013/10/02(水) 17:43:53.43 ID:??? (+3,-30,-96)
stopPropagationで止めるとすると、イベントを遮りたいすべての要素にイベントを付けないといけなくなるので
bodyのclickハンドラでe.targetを見て判定したいと思います
$(document).on('click','body',fn)
とdocumentにデレゲートした場合、
e.targetのイベント発生元情報がデレゲート元オブジェクトに変わっているようです
e.targetを使う場合はデレゲートは使えないということでしょうか
567 : Name_Not - 2013/10/02(水) 18:00:03.89 ID:??? (+18,-29,-9)
すみません勘違いでした
stopPropagationしてたからe.targetが変わってただけでした(∵)
568 : Name_Not - 2013/10/02(水) 18:59:45.71 ID:??? (+90,+29,-26)
イベントのバブリングを止める話じゃなかったんか
解決したみたいだが、一応。(...こういうことだったのかな?)
http://jsbin.com/amarUn/10/edit
569 : Name_Not - 2013/10/02(水) 19:25:59.49 ID:??? (+52,+29,-1)
すいませんがもう不必要です^^;
570 : 567 - 2013/10/02(水) 19:28:56.29 ID:??? (+45,+22,-2)
↑なり済ましです!
571 : 567本人です - 2013/10/02(水) 19:31:25.25 ID:??? (+50,+27,-1)
ここまで全部偽者ですw
572 : Name_Not - 2013/10/02(水) 19:41:20.95 ID:??? (-6,-24,-14)
ワロチww
573 : Name_Not - 2013/10/02(水) 20:01:11.73 ID:??? (+67,+27,+0)
>>568
ありがとうございます
同じやり方でした
574 : Name_Not - 2013/10/02(水) 20:10:17.64 ID:??? (-6,-29,-2)
ですので不必要でした(∵)
575 : Name_Not - 2013/10/02(水) 20:43:22.72 ID:??? (+57,+29,-9)
すべてのイベントを一つのハンドラで受け取り
そこから分配するのは確かにいいかもしれませんね
576 : Name_Not - 2013/10/02(水) 21:05:10.26 ID:??? (+52,+29,+0)
とても勉強になりました
577 : Name_Not - 2013/10/02(水) 22:57:52.00 ID:??? (-1,-29,-25)
jqueryではイベントがfocus→focusin、blur→focusoutに名前が変わっているようですが何故ですか
578 : Name_Not - 2013/10/03(木) 01:25:38.29 ID:??? (+11,-16,-3)
ライブラリだけの質問はライブラリスレでお願いします。
579 : Name_Not - 2013/10/03(木) 04:00:03.08 ID:??? (+3,-30,-25)
querySelectorのセレクタについて質問です

<div>
<p><a>いいい</a></p>
<a>あああ</a>
</div>

div.querySelector("");
あああ だけを取得したいのですが、どのようなセレクタを書けばいいでしょうか?
イメージ的には > a のような感じです
580 : Name_Not - 2013/10/03(木) 04:43:46.66 ID:??? (-1,-29,-6)
document.querySelector('div > a').textContent
581 : Name_Not - 2013/10/03(木) 12:22:21.45 ID:??? (+32,-30,-76)
if(/version ([0-9\.]+)/.test(ua)) vn = RegExp.$1; else vn = 0;
のようなことをやってたのですがRegExp.$1~$9は廃止予定で非推奨と聞きました
RegExpオブジェクトを使わない場合どのような書き方ができるのしょうか
582 : Name_Not - 2013/10/03(木) 12:26:19.15 ID:??? (+5,-29,+0)
>>581
RegExp.exec()の結果を使う。
583 : Name_Not - 2013/10/03(木) 13:30:01.79 ID:??? (+18,-30,-21)
vn = (ua.match(/version ([0-9\.]+)/)||"00")[1]
584 : Name_Not - 2013/10/03(木) 13:42:21.40 ID:??? (+40,+2,-23)
>>583
すげ~感心したが、その後でif(vn)とかやってると結果が>>581と変わっちまわない?
585 : Name_Not - 2013/10/03(木) 13:46:28.28 ID:??? (+36,-30,-84)
ならどれでも好きなのをどうぞ

vn = (ua.match(/version ([0-9\.]+)/)||[0,0])[1] //オリジナル
vn = (ua.match(/version ([0-9\.]+)/)||"00" )[1] //文字列型
vn =+(ua.match(/version ([0-9\.]+)/)||"00" )[1] //数値型
586 : Name_Not - 2013/10/03(木) 13:48:24.72 ID:??? (+35,+17,+0)
キモ
587 : Name_Not - 2013/10/03(木) 13:49:39.84 ID:??? (-2,-30,-23)
これも好き
vn = ua.match(/version ([0-9\.]+)/)
vn = vn ? vn[1] : 0
588 : Name_Not - 2013/10/03(木) 14:04:21.81 ID:??? (+8,-29,-56)
変数に入る型がバラバラなのは気持ち悪いな
だからもし>>584の場合は数値に揃えないんなら
0の代わりに空文字にして
最後出力する時に
vn || '0'
とした方がいいな

このやり方だとバージョンがないよと言う状態を持たせておいて
バージョンがなければ0にするっていうのがわかりやすい
vn || '無し'
みたいにしたくなってもとても良い
589 : Name_Not - 2013/10/03(木) 14:17:04.20 ID:??? (+57,+29,-37)
数値と文字列はしっかり区別したいところだね。
やっぱり型付が緩い言語で一番問題になるのはここだから、
使う時じゃなくて事前に揃えておいた方がいいと思う。
590 : Name_Not - 2013/10/03(木) 14:27:57.76 ID:??? (+10,-30,-157)
>>582のアドバイスをいただいたあと色々調べて最終的に関数化しました
ありがとうございました

var r, ua = navigator.userAgent;
if(r = /MSIE ([0-9\.]+)/.test(ua)) return "IE " + r[1];
else if(r = /Chrome\/([0-9\.]+)/.exec(ua)) return "Chrome " + r[1];
else if(r = /Firefox\/([0-9\.]+)/.exec(ua)) return "Firefox " + r[1];

else return "";
591 : Name_Not - 2013/10/03(木) 14:30:31.46 ID:??? (+46,+23,+0)
これはひどい。。。
592 : Name_Not - 2013/10/03(木) 14:49:35.75 ID:??? (+43,+25,-3)
誤植だろ
593 : Name_Not - 2013/10/03(木) 14:56:55.14 ID:??? (+3,-29,-76)
Chrome、Firefox、IE9で開発をしています。
ソースコード中に旧型の8進数リテラルがあり、strict modeではエラーになります。
そこでモダンブラウザが対応している新型に切り替えたのですが、
今度は当然レガシーブラウザでエラーになります。
可読性を崩したくないのですがどうするのが一番よいでしょうか?
場合によってはレガシーブラウザは切り捨てます。
594 : Name_Not - 2013/10/03(木) 15:07:43.95 ID:??? (+69,+30,-75)
chromeでよく落ちるようになり、バグるようになりました
デバッガで追っていくと突然落ちたり、本来実行するべきじゃないところがいきなり実行されたり。
ロールバックすると起きなくなったのでコードに原因があったようです
JavaScriptで変なことをしても影響が環境の枠の外に及ぶのはおかしいと思うのですが
なんでそんなことが起きるんですか
595 : Name_Not - 2013/10/03(木) 15:42:45.30 ID:??? (+27,+4,-14)
chromeがバグったんじゃね?
596 : Name_Not - 2013/10/03(木) 15:53:04.72 ID:??? (+34,+16,-2)
困りますな~
597 : Name_Not - 2013/10/03(木) 15:57:38.08 ID:??? (+49,+26,-3)
嘘乙
証拠のビデオうpはよ
598 : Name_Not - 2013/10/03(木) 16:01:56.09 ID:??? (+57,+29,-20)
調べてみるとどうも宇宙線の影響だそうで、稀によくあることらしいです
ありがとうございました
599 : Name_Not - 2013/10/03(木) 16:06:25.83 ID:??? (+96,+29,-76)
今まで一つのハンドラで受けてtargetで分岐してたのを、
jQueryのデレゲートに置き換えたのがやったことです
その結果変な風になりました
一つのハンドラで受けていた場合、その処理が終われば他の同種のハンドラに飛びませんが
要素ごとにデレゲートした場合は飛ぶので、その結果変なことになったのか
あるいはbootstrapとの相性か
何なのか分かりませんが
600 : Name_Not - 2013/10/03(木) 16:07:56.36 ID:??? (+38,+10,-17)
jQuery固有の問題はライブラリスレで
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について