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

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

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

556 = :

ビルド方式はイニシャルコストがかかりますがハンドラ呼び出しコストは低いというメリットがあります

558 = :

addEventListenerの第二引数にオブジェクトを指定すると
オブジェクトのhandleEventメソッドを呼んで、thisはオブジェクトを指してくれるらしいので
IE8以下用にaddEventListenerをエミュレートする関数を用意してあげれば多くのことが解決するのでしょうか?

559 = :

そんな仕様あったっけ?
いずれにしろ呼び出されるのがhandleEventメソッド固定ならほとんど使い道がないような

560 = :

>>559
関数でラップせずに閉じたスコープが作れるとか

561 = :

>>559
逆にイベントを直接受ける関数を1つにまとめられるからかなり有用だよ
イベントオブジェクトが引数に必要な関数ばかり作ると、
イベント発生の時にしか呼べない関数が多数できることになるし。

562 = :

同じところで受けたかったら同じメソッドを指定したらいいだけでは?

563 = :

http://jsbin.com/amarUn/1/edit

documentに、body用のクリックハンドラを付けました
しかし四角をクリックしても反応してしまいます
bodyの上の要素に対するクリックがbodyまで突き抜けないようにするにはどうしたらいいですか?

564 = :

>>563
$('#test').on('click',function(e){e.stopPropagation();});

ちなみに上じゃなくて下な。
W3Cにわかりやすい図がある

565 = :

ありがとうございます
イベント的にはルートノードが上なんですね

566 = :

stopPropagationで止めるとすると、イベントを遮りたいすべての要素にイベントを付けないといけなくなるので
bodyのclickハンドラでe.targetを見て判定したいと思います
$(document).on('click','body',fn)
とdocumentにデレゲートした場合、
e.targetのイベント発生元情報がデレゲート元オブジェクトに変わっているようです
e.targetを使う場合はデレゲートは使えないということでしょうか

567 = :

すみません勘違いでした
stopPropagationしてたからe.targetが変わってただけでした(∵)

568 = :

イベントのバブリングを止める話じゃなかったんか
解決したみたいだが、一応。(...こういうことだったのかな?)
http://jsbin.com/amarUn/10/edit

569 = :

すいませんがもう不必要です^^;

570 = :

↑なり済ましです!

571 = :

ここまで全部偽者ですw

573 = :

>>568
ありがとうございます
同じやり方でした

575 = :

すべてのイベントを一つのハンドラで受け取り
そこから分配するのは確かにいいかもしれませんね

576 = :

とても勉強になりました

578 = :

ライブラリだけの質問はライブラリスレでお願いします。

579 = :

querySelectorのセレクタについて質問です

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

div.querySelector("");
あああ だけを取得したいのですが、どのようなセレクタを書けばいいでしょうか?
イメージ的には > a のような感じです

581 = :

if(/version ([0-9\.]+)/.test(ua)) vn = RegExp.$1; else vn = 0;
のようなことをやってたのですがRegExp.$1~$9は廃止予定で非推奨と聞きました
RegExpオブジェクトを使わない場合どのような書き方ができるのしょうか

582 = :

>>581
RegExp.exec()の結果を使う。

583 = :

vn = (ua.match(/version ([0-9\.]+)/)||"00")[1]

584 = :

>>583
すげ~感心したが、その後でif(vn)とかやってると結果が>>581と変わっちまわない?

585 = :

ならどれでも好きなのをどうぞ

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 = :

キモ

588 = :

変数に入る型がバラバラなのは気持ち悪いな
だからもし>>584の場合は数値に揃えないんなら
0の代わりに空文字にして
最後出力する時に
vn || '0'
とした方がいいな

このやり方だとバージョンがないよと言う状態を持たせておいて
バージョンがなければ0にするっていうのがわかりやすい
vn || '無し'
みたいにしたくなってもとても良い

589 = :

数値と文字列はしっかり区別したいところだね。
やっぱり型付が緩い言語で一番問題になるのはここだから、
使う時じゃなくて事前に揃えておいた方がいいと思う。

590 = :

>>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 = :

これはひどい。。。

592 = :

誤植だろ

593 = :

Chrome、Firefox、IE9で開発をしています。
ソースコード中に旧型の8進数リテラルがあり、strict modeではエラーになります。
そこでモダンブラウザが対応している新型に切り替えたのですが、
今度は当然レガシーブラウザでエラーになります。
可読性を崩したくないのですがどうするのが一番よいでしょうか?
場合によってはレガシーブラウザは切り捨てます。

594 = :

chromeでよく落ちるようになり、バグるようになりました
デバッガで追っていくと突然落ちたり、本来実行するべきじゃないところがいきなり実行されたり。
ロールバックすると起きなくなったのでコードに原因があったようです
JavaScriptで変なことをしても影響が環境の枠の外に及ぶのはおかしいと思うのですが
なんでそんなことが起きるんですか

595 = :

chromeがバグったんじゃね?

596 = :

困りますな~

597 = :

嘘乙
証拠のビデオうpはよ

598 = :

調べてみるとどうも宇宙線の影響だそうで、稀によくあることらしいです
ありがとうございました

599 = :

今まで一つのハンドラで受けてtargetで分岐してたのを、
jQueryのデレゲートに置き換えたのがやったことです
その結果変な風になりました
一つのハンドラで受けていた場合、その処理が終われば他の同種のハンドラに飛びませんが
要素ごとにデレゲートした場合は飛ぶので、その結果変なことになったのか
あるいはbootstrapとの相性か
何なのか分かりませんが

600 = :

jQuery固有の問題はライブラリスレで


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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