+ JavaScript の質問用スレッド vol.125 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
前スレ
+ JavaScript の質問用スレッド vol.124 + [転載禁止](c)2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1427008785/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです) 普通に考えてあんな糞言語広めたやつは裁きの場に出るべきじゃないか?
そして死刑が執行されて民衆が納得する。
このままだと暴動起きるよ? >>947
君は非常に大きな考え違いをしている
それは大変な間違いだよ
仕様は仕様、それを勝手に利用してる実装は実装
両者の問題を混同してはいけない
君の理屈だと例えばあるビデオコーディック対応と謳ってながら実際は
プロファイルなどによって再生できなかったり、色の再現などに関して問題が起きたり
いろんなプレイヤー間に非互換性があることに関して
そのコーディック仕様に文句を言うようなもの
そういうライセンスを与えてるならまだしも、
仕様側には世の中の実装を正す責任も権利もないし
そういうことで仕様に対して文句をいうのは完璧にお門違いの話
実装に関しても、もし〇〇対応と言っておきながら違っていたら嘘を言ってることになるが
実際はそんな具体的に対応機能を列挙してそれを価値として売ってるブラウザなんて少ないし
実装に誰から言われなくとも自分たちで気づいて直す義務があるとまでは言えない
『これとこれとこのプレイヤーでは最低でも再生できる動画を作りたい』と願うのは俺たちの方で、
あくまでそれは『俺たちの勝手な願い』なのだから、そこで生じる問題は俺たちが負うのは至極当然のこと
もし、実装に直して欲しいと願う部分があるならば、最低でもissueやパッチを投げるくらいの義務は俺たちの方にある
それなのに実装や、ましてや仕様を「悪」というのは随分おこがましいな >>947
仕様を最初に調べるのが常識なのにMDNやら10年前のstackoverflowやら漁って失敗したのがオマエだろ
JSはクソだがベンダの実装がクソなことと言語がクソなことの区別がつかないオマエはそれ以下の糞
ここの区別がついてないと昔よりだいぶマシになったモダンな言語仕様通りに書いて、実装の汚いところはトランスパイラによしなにやってもらうという解決ができない 御託並べて働きもしない奴「働く必要などない!」
御託並べて仕様も読まない奴「仕様など読む必要ない!」 生jsとトランス前提のjsでは話が変わってくると思うけどな。
前者は嫌だが、後者ならまあ普通に使えると思ってる。
※個人の意見です。 それ生か変換かっていう話じゃなくて
ES2018使えるか、ES5どまりか、って違いじゃないの >>955
日本語でおk。
> それなのに実装や、ましてや仕様を「悪」というのは随分おこがましいな
俺以外も含めて、誰も「仕様を『悪』」とは言ってない。
ちゃんと理解出来るまで読み返せ。
日本語が通じないお前に対していくら書いても通じないと分かりきっているから俺は書かない。
が、頑張って書いた分についてはポイントだけ教えてやる。
君は「他言語でも同様」「JavaScript特有」の案件の区別が付いてない。
これは、やはり君はJavaScriptしか知らないことを意味する。
その程度で、比較論をぶつのは適当ではない。
議論したいのなら、まずは話の筋を完全に理解出来るまで何度でも読み返せ。
今のお前に必要なのはそれだよ。
>>956
君はそこを攻撃ポイントだと捉えているようだが、
俺は「失敗」とは思っていない。逆に、地雷臭を感じている。
あと、JavaScripterの信者化はいったい何なんだ?
JavaScriptが糞かどうかと、お前らが糞かどうかは別の話だ。
逆に、仮にJavaScriptがものすごく素晴らしいとしても、
それを使っているお前らが素晴らしいことには全くならない。
なんだかんだでJavaとPythonが蔓延っているのは、あの程度が丁度良いからだ。
本当に頭抜けているのなら、その言語が世界を統一してしまう。かつてのCがそうだ。
JavaScriptにはそこまでの勢いなんて全くない。
これを認識出来ないのは、お前らがJavaScriptの世界に引きこもっているからだ。 C言語が世界を統一したことなんてないんだけど?
むしろCOBOLの方が使われていただろう 分量すごいのに中身が全然ない…
日本語ってここまで薄められるんだ… JSの良し悪しなら言語比較スレにでも行って好きにやってくれ
CだってC89や下手すりゃK&Rで時代が止まってる様な発言したらそりゃ突っ込まれるだろうに ならさっさと877,878の技術面に突っ込んで来いよ。
お前らの根本的原因はそこなんだよ。
C++のスレの連中は異様なほど技術面に執着する。
お前らは逆に、異様なほど「JavaScriptは素晴らしい」事にしたがる。
だからこういう流れになる。これもいつものことだろ。
俺は今更のこの仕様にしたこと、そしてそれが4年も放置されていることに
地雷臭を感じてる。
それについてお前らの見解はないのか?
(話を理解出来ない奴が大半だとは思うが) ID:FoNGS0Kl が仕様と実装の違いを理解してのは>>947を読めば分かる > C++のスレの連中は異様なほど技術面に執着する。
暇なんだろうね。 普通にライブラリが異なる実装がある言語は仕様と実装のズレなんていくらでもあるのにな
複数の主要な実装があるのが珍しいだけな気がする >>961
君は良く他の言語だったら〜というが、他の言語スレだったら取り合ってもらえないだろうよ
決定的な反論をぶつけて叩き出さないのも全て、俺たちが多様性というのを尊重してるから
あいつとこいつと君と俺の意見が同じような日本語を使ってるはずなのに全然合わないように、
中央管理者の居ない状況で個々の者同士がやり取りするのは一定のルールは必要とは言え
結局細部に齟齬が生じるのが自然の摂理なんだよ
これはもうWebというものの成り立ちからくるものだから、そのポリシーを批判しても仕方がない
もちろん細かな変更はしようがあるが、今だってWebを整えたとも言えるGoogleだって、
Webを牛耳ってると非難する人が出るように明らかな改善というのを定義するのは難しい
いろんなデバイス、いろんな人間が関わっているのがWebだから、程々曖昧にしてバランスを取るしかない
そういう部分が嫌というのは気持ちは分かるが、Webから離れてくれと言うしか無い
1つ言うなれば、仕様やリファレンスに疑問を感じたら自分が直せ 君もWebの一員なんだから
結局そういう物っていうのは、残念ながら世界を作って管理してる神の書いた聖書ってわけじゃないんだよ
Webにおいて仕様やリファレンスとは、勝手に人間がこの世の仕組みや物に名前を付けてる辞書のようなものでしかない
その辞書の内容だって個々違ったりするし、最新の現実を100%表してるわけではない 絶対ってものではないんだよ
でも今更Webに神を置くことなんて不可能なのは君でも分かってくれるだろう?
ならどうしろというのさ? >>969
日本語でおk、マジで。
だから通じてねえと言ってるんだよ。
俺はWebを批判しているのではない。そんなことは言ってないだろ。
そもそも俺は全般的に現状肯定派だ。ここが根本的に違う。
お前らは「JavaScriptは素晴らしい」ということにしたいだけだ。
それは明確な間違いで、何にもならないから、止めろと言っている。
が、お前らのレベルはもう完全に宗教だから、好きにすればいい。
それで馬鹿なままなのは自業自得だ。
ここからは離れ、本題に行く。
> 1つ言うなれば、仕様やリファレンスに疑問を感じたら自分が直せ
これに対する感覚が決定的に違う。
お前らは若く、自分が全知全能の神で、疑問があれば「相手が間違っている」と断定している。
つまり、「現状否定派」だ。
俺は、これには「書かなかった理由があった」と推定している。
つまり、「現状肯定派」なんだよ。
だから、疑問に思ったからといって闇雲に参加して書き加えるとかはしない。
なおこの違いは要するに年の違いだから、お前らが今「現状否定派」なのは問題ではない。
それはいわゆる「若さの特権」だし、若いうちはそれでいい。
「現状肯定派」には今回の件は以下のように映る。
1. 世界中の誰も4年もMouseEventOrderをMDNに追記しようと思わなかったとは考えにくい。
2. まともなプログラマならこの項目が重要だとは認識出来る。(googleも)
3. W3Cの仕様B(877)はゴミ。
4. とりあえず手持ちの環境で軽く試したが、どうやらW3C仕様で動いているっぽい。
重要な項目が、既に実装完了の状態なのに、
誰もMDNに書こうとも思わないってのは明らかにおかしいだろ。
書きたくない理由があるんだよ。分かってて書いてない。 可能性として俺が思いつくのは以下。
α:W3Cなんて無視
(しかしWHATWGはHTMLだけでDOMにはノータッチのようだが)
β:現状のブラウザに未実装の物があるから宣伝を控えている?(消極的無視)
(未実装のブラウザのライフタイム終了と共に宣伝開始か?
しかし新機能を喧伝している状況でこれもない)
γ:W3Cの仕様が気に入らないから仕様変更するつもりか?
俺はこの中ではγかと思っているから、この仕様には乗れない=地雷臭を感じてる。
で、ここら辺についてはお前らの方が詳しいから、何か意見はないのか?と聞いている。
俺にはW3Cがこの仕様にした理由が見えないから、状況が読めない。
一応969の内容に答えておくと、
そんなことは基本的に俺は思ってないわけ。
「俺がやりさえすれば全て上手く行く」「駄目なのはお前らがやってるからだ」というのは、
ガキが巣くっているこのスレみたいな所ならともかく、
俺と同年齢層/同技術レベルの奴らも多数参加している場所ではあり得ない。
Webの現状がどうあろうと、それは関わってきた奴らがこれまで努力してきた結果であり、
そこに俺が参加したからといってたちどころに改善するなんてことはあり得ない。
こんなのは年を取った奴らは全員理解している。
(とはいえ糞は糞である事実は変わらない。
それをさも素晴らしいかのごとく言うな馬鹿タレ、という話)
だからそもそもそういう指摘をしてくること自体が若いんだよ。
ただ、それは若さの特権だから、お前は今はそれでいい。 ここ厶板のJSスレなんだから
DOMの仕様策定に物申すなら向こうでやってよ 向こうでやってよって、自分たちで自分たちの住処ぶっ壊して移住してきたくせによく言うよな。 enterはoverに従属
overはmoveに従属
それで一体何が問題なのか・・ そもそもココでJSの仕様がどうだのと長文の持論を連発し始めてる時点で仕様書もロクに読めないクズ お前らは分かってない君が仕様書を読めない人なのは、以前も見た >>970
> お前らは「JavaScriptは素晴らしい」ということにしたいだけだ。
いや、大多数はそんなこと思ってなくて、お前の技術力の無さをJavaScriptのせいにするなよと思ってるだけだぞ。
(俺はC#やJavaの方が好きだし)
> まともなプログラマならこの項目が重要だとは認識出来る
なぜ仕様書も読まずに5chに質問するやつが自分に異様な自信を持っているのかわからん
需要があればググれば質問がヒットする。単にMouseイベントの順番の重要性が低いから書いてないんでしょ。 この人マジで全く根拠のない思い込みの知ったかぶりで適当こいてるだけだから一切話聞く必要ない
別にLiving Standardが素晴らしいとは言わないけど DOM Living Standard の *存在を知らない* のはエンジニアとして論外
>>971
>(しかしWHATWGはHTMLだけでDOMにはノータッチのようだが)
つ https://dom.spec.whatwg.org そもそもW3Cへの批判を並べながらECMAScriptを語るってのが意味不明
DOMの話してんじゃないの そもそもJavaScript素晴らしいとか言ってんのごくわずかしかいないのに誰と戦ってるのか
ほとんどのWeb屋は英語と同じでJavaScriptがWebの共通語だから使ってるだけで、大抵別のお気に入り言語がある JavaScriptは現在勝ち言語なんだからわざわざ素晴らしいとかアピールする必要なんて無いだろ
そんなこと言ってる人も見ないが 一応 >>877 に突っ込むと、「Cの順なら最速」は意味不明。
stopPropergationでenterが止まるのを見てもわかるように、overの伝搬を利用してenterを実装することを想定した仕様だと思う
入れ子ではなくセットで、overに従属するenterが後から来るのは特段不自然ではない
(C#でもClosing→FormClosing→Closed→FormClosedという順番のイベントがある)
パフォーマンスとIEとjQueryの動作を破壊してまでAを採用する理由がないならBにするのが妥当に見えるが
> WPFはどうなのかな?と思って確認したが、mouseover自体がない。
WinFormsにもWPFにもoverとenterはないと思う
何を持って「.NETは最初からイベントの順番は決まっており、遅くとも2005には固定されてた」なの? 深刻な確証バイアス罹患者だろうからどうしようもない >>979
おっと?これは失敬。
確認したが、EventOrderについては記載がない。
ということは、彼らはこちらを向いていて、W3Cは参考程度の扱いって事か?
それなら一応の辻褄は合う。 >>986
未定義は馬鹿が踏みがちなので、わざわざ「未定義」と注記しているのだよ >>980
DOMとJavaScriptの関係性を理解できてない模様
他人を批判する前に仕様書を読めといいたい >>983
> 何を持って「.NETは最初からイベントの順番は決まっており
「.NET Event order」でググレば俺には最初にヒットするが
> Windows フォームのイベントの順序
> https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/order-of-events-in-windows-forms
その他諸々。いちいち全部決まってるよ。
また、addEventListenerで足した順に処理される。
> (C#でもClosing→FormClosing→Closed→FormClosedという順番のイベントがある)
ClosingとClosedはobsoleteだ。
そしてセットが問題ではなく、入れ子になってないのが妥当ではないと言っている。
とはいえFormsについては最早どうでもいい。
> stopPropergationでenterが止まるのを見てもわかるように
これはアウトだろ。WHATWGとW3Cのどちらにもそれを想起させる記載はない。
ただ、俺環境では止まらないが。もういっぺん確認してみて。
> 「Cの順なら最速」は意味不明。
これは分からなくていい。
俺が最速の実装を目指したら結果的にこうなる、という例でしかない。
君が別の解になることはあり得るし、問題ではない。ただ、
> overの伝搬を利用してenterを実装する
を想定しているのならそれは俺と同じであり、
・overとoutを伝播させてenterとleaveを作る。
・だからoutよりenterが先に来ているBでは、outを事前に空伝播する必要がある。
・同様に、Aの場合はenterがoverよりも前で、overを空伝播させる必要がある。
・空伝播を一回もさせずに済むのはCの時。
だからCは伝播がそれぞれ1回ずつの4パス、Bはout*2で合計5パス、
Aはさらにoverが2回で合計6パス、という想定だ。
が、まあ、これ自体は重要ではない。
普通は決めるならAだし、あるいは規定無し=実装任せで最速実装できるようにする。
どちらでもないのはものすごく違和感がある。 >>983
> パフォーマンスとIEとjQueryの動作を破壊してまでAを採用する理由がないならBにするのが妥当に見えるが
ちなみにこれは最初期からこの実装だった、という想定でいいのか?
ならW3Cは現行のブラウザの実装をそのまま仕様化しただけで、
当然google等が文句を言う筋はないが、
google自身はこの仕様が不味いと理解しているから賛成もせず黙っている、といったところか。
Aの場合はリソース確保/解放をenter/leaveで行い、処理をover/outで行うという、一番綺麗なソースになる。
ただしリソース確保については if (ptr==null) でoverのド頭でやってもいいから、
リソース解放のleaveが最後になっているBにしても問題はない。
だから「高速化」という名目でA->Bにすることはあり得る。
さすがにCまでやると、outの後にenterとなり、全く直感的ではなくなるので、
現行のソースが動かなくなる可能性もある。
(仕様化されていなくてもそれを想定して書いている奴はおり、結果的にそれらが動かなくなる)
だからそこまではやらなかった、というのも割と納得出来るストーリーだ。
で、Bが仕様化されてしまって、ちょ、待てよ、といったところか。
W3Cの連中はマジでコード書いてなさそうなので、googleがここら辺を説明しても通じないとは思う。
それで偉そうに言われたら、分裂するのもまあ納得出来る。 >>989
>いちいち全部決まってるよ。
「書いてあるのだけ」決まってる。実際にはこの前後や間にMove、Layoutなんかが割り込まれる。
なお、イベントの実行順はC#では保証されない。(アクセサでイベント追加/削除を自由に定義できるため)
>stopPropergationでenterが止まる
すまん、再確認したら、拾い物のサンプルで使ってたライブラリが悪さしてたわ・・・
>最初期からこの実装だった
前そうだった気はするけど、さすがに古いバージョンを確認する気は起きん
Pointerイベントに向けて整理しただけかもしれない
ちなみに、Chromiumでは多分この報告で修正されてる。以前はそれなりに実装が異なったらしい。
https://bugs.chromium.org/p/chromium/issues/detail?id=470947
> 処理をover/outで行うという
それはレアケースな気がするが >>991
> なお、イベントの実行順はC#では保証されない。
マルチキャストデリゲートが登録順に実行される仕様なんだよ。
だからJavaScriptのノリでaddEventListenerしていく分には順番は保証されてる。
まあもうこれはいい。
> それはレアケースな気がするが
それはない。
mouseenterの項目見れば分かるが、それぞれが単発イベントになるから重いんだよ。
> With deep hierarchies, the amount of mouseenter events sent can be quite huge and cause significant performance problems.
> In such cases, it is better to listen for mouseover events.
> https://developer.mozilla.org/en-US/docs/Web/Events/mouseenter
だから実行性能を取るのならover/outで組むべきで、実際そういうサイトも多い。
君にenter/leaveで組む積極的理由があるのならご自由に。
単にC#出身で知らなかっただけならover/outへの切り替えを検討した方がいい。
とはいえ単純な置き換えにはならないが。
> ちなみに、Chromiumでは多分この報告で修正されてる。
> Actual event order: mouseenter mouseover mouseleave mouseout
これは元はenter/leaveを作ってそれを伝播させる実装か。
境界跨ぎを厳密に計算して追跡出来ればこれの方が速いのかもしれん。
で、他に合わせて修正か。なるほどchromiumの連中は面白くないだろう。
これだと元凶はFFだな。以下見る限りIEもベースはバブル順だったらしいし。
> https://www.quirksmode.org/js/events_order.html
後方互換性については、逆に2015/05までのライブラリは全て問題なしだと言えるのだが、
この状況だと今更修正する感じはなさそうだな。
なら積極広報すればいいのに、とも思うが。 なんの根拠もないのにwhatwg domでググることすらしないで
>(しかしWHATWGはHTMLだけでDOMにはノータッチのようだが)
とか書いちゃうヤツだから、
自分が詳しくない分野に関する話ほどコイツの発言は無視した方がよいぞ
適当にはったりでっち上げてる可能性があるからなー >>985
>確認したが、EventOrderについては記載がない。
DOMにマウスイベントの発火順が載ってないのは当たり前だよ
>Abstract
>DOM defines a platform-neutral model for events, aborting activities, and node trees.
別に仕様書の細かいところまで読んで覚えなくてもいいけど、要旨ぐらい読んでよ、マジでマジで Google mapをちょっと大きめのディスプレーで開くと、メモリー使用がGB超えるんだよ。
これ何かおかしい方向に進んでるような。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 104日 23時間 34分 23秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。