X



+ JavaScript & jQuery 質問用スレッド vol.8 +
レス数が1000を超えています。これ以上書き込みはできません。
0001Name_Not_Found
垢版 |
2017/11/10(金) 22:44:30.04ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
http://mevius.2ch.net/test/read.cgi/hp/1467906819/
0932Name_Not_Found
垢版 |
2019/01/31(木) 04:31:34.00ID:WuDCcsv7
とあるサイトに対して、Chrome用のユーザースクリプトを作っています。

そのサイトでは、内部で一気にまとめて処理すればいいところを
わざわざ人間が#a #b #c #dという4つのボタンを順番に押さなければなりません。

これを何らかの1動作(例えば右クリック)だけで済むようにしたいのですが
ただ単に
$('body').on('contextmenu', () => {
$('#a').click();
$('#b').click();
$('#c').click();
$('#d').click();
return false;
});
などとしただけでは、#aの処理が終わる前に#bがクリックされてしまいうまくいきません。
setIntervalを使う以外にどんな選択肢があるでしょうか?
$.when().done()とかだと「クリックをしたことによって起こったイベント」までは待ってくれないですかね?
0933932
垢版 |
2019/01/31(木) 04:35:44.23ID:WuDCcsv7
「起こったイベント」という言い方だとなんか変だったかもしれませんね(クリックそのものがイベントか)
0934Name_Not_Found
垢版 |
2019/01/31(木) 07:42:20.04ID:???
>>932
a,b,c,dの処理はどう定義されているのかを調べてから質問してくれ
0935Name_Not_Found
垢版 |
2019/01/31(木) 10:24:38.58ID:???
完了した際にドム内容が変更されるなら
DOMSubtreeModified propertychange
で検知すればいいと思う
0936Name_Not_Found
垢版 |
2019/01/31(木) 12:05:38.76ID:???
$.when().done() などがネストする場合は、使えるなら、async/await などが良い

>#aの処理が終わる前に、#bがクリックされてしまいうまくいきません
単に、処理A・B を続けて書いているだけなのに、実行される順番が変わるのか?
そんな事があるのか?
0937936
垢版 |
2019/01/31(木) 12:09:54.65ID:???
ああ、ABCD の順番でクリックされるけど、

Aの処理に、時間が掛かっている間に、
BCDの処理の方が、先に終わってしまうという事か

それは、非同期処理の順番を指定するしかない
0938Name_Not_Found
垢版 |
2019/01/31(木) 12:52:58.06ID:???
要素の中心を起点に拡大・縮小させながら対象をshow,hideさせることはできますか
0940Name_Not_Found
垢版 |
2019/01/31(木) 13:00:43.74ID:???
>>938
要素による。inlineとかだと出来ないので、一時的にdisplayを変更したりwrapperを設定する必要がある
あと、文字のサイズも変わらないので何か変になると思う
0941Name_Not_Found
垢版 |
2019/01/31(木) 13:02:59.72ID:???
・canvasを変更
・ページ遷移
この時、canvasで変更された内容をそのまま持ち越すということは可能でしょうか?

ajaxでcanvas意外を変更するか、画像で一旦どこかに保存するしかないでしょうか
0942Name_Not_Found
垢版 |
2019/01/31(木) 13:22:51.00ID:???
>>940
アニメーションはCSSでやったほうが良さそうですね
show→アニメーションはできたのですが、アニメーション→hideがうまくいかず…
0944Name_Not_Found
垢版 |
2019/01/31(木) 20:32:05.27ID:???
>>941
data uriにして持ち越すか
描画するデータを持ち越して再描画するかかな
0945Name_Not_Found
垢版 |
2019/01/31(木) 20:44:13.78ID:???
>>943
あーなるほど、別にdisplay:none;にすることに拘らなくてもいいですね
transform:scaleでギリギリまで縮小して最後にwidth、height0にするようなkeyflames書いてみます
0946Name_Not_Found
垢版 |
2019/02/01(金) 12:45:59.89ID:???
>>938
foreignObjectを使ってCanvasに描画してやるのがオススメ
0947Name_Not_Found
垢版 |
2019/02/01(金) 13:44:00.87ID:???
>>946
ふつうにtransform: scale()じゃだめなのか
0948932
垢版 |
2019/02/01(金) 18:40:45.37ID:Zy/d2zot
遅くなりましたが>>932です

>>934
デベロッパーツールで調べてみるとどういうわけか、
#a〜#dを押すことによって実行される関数a()〜d()自体は単に<head>内にa.js〜d.jsを追加するというだけのものでした
a.js〜d.jsの中身はいずれもわずか20行ほどで、for内でreplaceを繰り返した結果を<textarea>に反映させるというものです
(何故こうなってるのかはちょっとわかりませんが… なにか意味あるんでしょうか)

使うのが今だけなら、いっそこれらの中身を全部コピペしてユーザースクリプトにまとめてもいいんでしょうけど
a.js〜d.jsの中身(replaceすべき文字列)が将来的にいつの間にか書き換わってることもあるでしょうからそれは避けたいなと…

>>935
DOMSubtreeModified propertychange!
そんな凄いものがあったんですね…!
これは今後色々捗りそうです
今回は<textarea>の中身がJSで勝手に書き換わるのはどうもonchangeでは検知できないようで困っていたのですが
先述のように<head>内に<script>を追加するのを検知すればいけるかもしれません

>>936-937
つまりこういうケースではasync/awaitのみの1択…という感じですかね
async/awaitなら全部待ってくれるんですね
0949Name_Not_Found
垢版 |
2019/02/01(金) 18:46:08.85ID:???
> つまりこういうケースではasync/awaitのみの1択…という感じですかね

ぜんぜん違う。というか関係ない
絶対に使わないというわけではないが、問題解決のための手段ではない

例えば、3人交代で仕事する時、相手に起きた出来事を引き継ぎするだろ?
async/awaitはその引き継ぎ作業に相当する。
引き継ぎは行うことだが仕事内容ではない
0950Name_Not_Found
垢版 |
2019/02/01(金) 18:46:45.30ID:???
> 今回は<textarea>の中身がJSで勝手に書き換わるのはどうもonchangeでは検知できないようで困っていたのですが
使えないんじゃね? DOMツリーが変わるわけじゃないんだから
0951932
垢版 |
2019/02/01(金) 19:04:17.20ID:Zy/d2zot
>>949
では他にはどんな引き継ぎ方があるでしょうか?
(ユーザースクリプトからだと、関数a()を直接呼び出すことはできませんでした)

>>950
<head>への<script>の追加はDOMツリーの変更とは見なされず、DOMSubtreeModified propertychangeでは検知できない…ということでしょうか
0952Name_Not_Found
垢版 |
2019/02/01(金) 19:11:30.56ID:???
>>951
調べるのは引き継ぎ方じゃなくて、clickの中でやってる処理が終わったタイミングを知る方法
それさえわかればasync/awaitなんぞ使わず普通にclick()使えばいい
0953Name_Not_Found
垢版 |
2019/02/01(金) 19:43:32.23ID:Zy/d2zot
>>952
ではやはりそれぞれの関数が最終的に行っているのは<textarea>のvalueへの文字列の代入ですね…
0954Name_Not_Found
垢版 |
2019/02/01(金) 20:45:58.07ID:???
>>932
順序なんて考えたくないでござる!って場合はこれでどうだ

str = '';
$.get("a.js", '', function(response) {
str += response;
$.get("b.js", '', function(response) {
str += response;
$.get("c.js", '', function(response) {
str += response;
$.get("d.js", '', function(response) {
str += response;
});
});
});
});
eval(str);
0955Name_Not_Found
垢版 |
2019/02/01(金) 20:47:11.23ID:???
完全に自分用のjsならこれでいいやろ。順序は絶対に狂わない
エラーは適当に書いてくれ
0956Name_Not_Found
垢版 |
2019/02/02(土) 23:38:00.03ID:???
void()って本来なんのためにあるの?
0958Name_Not_Found
垢版 |
2019/02/03(日) 09:36:03.56ID:???
なんで最初っから定数としてundefined用意しなかったの
関数にするとしてもundifined返すための関数なら引数いらなくね
なんでvoid(0)ってしてるの?なにを評価してるの
0959Name_Not_Found
垢版 |
2019/02/03(日) 11:15:37.14ID:???
>>958
http://memories.zal.jp/WP/blog/20150504_2542.html
http://blog.yuku-t.com/entry/20111111/1321021731
※下は2011年の古い記事

昔はundefinedを上書きできてしまう仕様だったので、
それに対する保証としてvoid()があったと思われる

>なんで最初っから定数としてundefined用意しなかったの
これは全員思っていると思う
変数でundefinedは正気の沙汰じゃない

つまり今は使う意味が無いと思う
0960Name_Not_Found
垢版 |
2019/02/03(日) 13:03:35.97ID:???
>>959
今もundefined変数を定義出来るので、状況によっては必要
(typeof演算子で代用出来るケースがほとんどだと思うが)
0961Name_Not_Found
垢版 |
2019/02/03(日) 13:11:59.34ID:???
constと思ってた、違うのか

var undefined = 1
これどうなってるんだ
代入がエラーにならないけど何を代入してもundefined が返ってくる
0962Name_Not_Found
垢版 |
2019/02/03(日) 13:27:02.93ID:???
>>958
voidは関数ではなく、演算子だぞ
演算子に(0)を与えるコードが異常
0963Name_Not_Found
垢版 |
2019/02/03(日) 13:30:49.29ID:???
>>961
グローバルコードだろ?
constや関数コード内のvarでやってみろ
グローバル変数を書き換えられない理由はObject.getOwnPropertyDescriptor()
0964Name_Not_Found
垢版 |
2019/02/03(日) 13:46:43.20ID:???
jsのundefinedは幾ら何でも特殊すぎる
新しくnullを作って欲しい
0966Name_Not_Found
垢版 |
2019/02/03(日) 17:09:33.36ID:???
jsでnullとundefinedって別だよね
他の言語でもそうなの?
0967Name_Not_Found
垢版 |
2019/02/03(日) 17:59:04.11ID:???
nullとundefinedが2つ存在して、同値扱いは普通に考えてないんじゃない?
0969Name_Not_Found
垢版 |
2019/02/03(日) 19:36:12.85ID:???
null == undefined

>true

null === undefined

>false

やめろ
0970Name_Not_Found
垢版 |
2019/02/03(日) 19:38:26.30ID:???
同値判定でfalse出てんだから同値じゃないじゃん。
どうちてそんなこと言うの?
0971Name_Not_Found
垢版 |
2019/02/03(日) 20:03:11.11ID:???
出とるぞ

null == undefined
>true

同じ形ではないようだが
0972Name_Not_Found
垢版 |
2019/02/03(日) 20:13:14.58ID:???
等値演算子と同値演算子を混同してるのでは
0974Name_Not_Found
垢版 |
2019/02/03(日) 20:41:05.97ID:???
>>968
そうだよ
だから、そもそも同値扱いしかあり得ないし、>>966は考慮にも値しない
0975974
垢版 |
2019/02/03(日) 20:42:51.13ID:9tToFlyy
× そもそも同値扱いしかあり得ないし、
○ そもそも同値扱いはあり得ないし、
0976Name_Not_Found
垢版 |
2019/02/04(月) 12:50:45.61ID:???
==も===も両方EqualityExpression何だが
仕様書にないオレオレ用語は止めてくれ
0977Name_Not_Found
垢版 |
2019/02/04(月) 13:15:59.18ID:???
・抽象的な等価性比較 (Abstract Equality Comparison) (==)
・厳格な等価性比較 (Strict Equality Comparison) (===)
0978Name_Not_Found
垢版 |
2019/02/04(月) 13:27:56.28ID:???
・=== を使用する 厳格な等価性 (strict equality) ("三重等号" または "同一性 (identity)")
・== を使用する 寛容な等価性 (loose equality) ("二重等号")
0979972
垢版 |
2019/02/04(月) 13:37:49.21ID:???
>>976
ごめん俺が完全にあほだった
0980Name_Not_Found
垢版 |
2019/02/04(月) 16:08:10.95ID:???
J.Celko 信者のミックが書いているけど、

データベースでは、3値論理。Ruby もそう。
true, false, null

E.F.Codd は、unknown も加えた、4値論理を唱えたけど、
あまりに複雑すぎて採用されなかった
0981Name_Not_Found
垢版 |
2019/02/04(月) 16:12:51.58ID:???
JS, PHP では、必ず厳密等価演算子を使うべき!
使わないと、想定外に型変換されて、バグる

Ruby では、バグる要素が多いから、これを採用しなかった
0982Name_Not_Found
垢版 |
2019/02/04(月) 16:37:33.30ID:???
Rubyにおける==,===,eql?,equal?の違い
https://mickey24.hatenablog.com/entry/20100910/1284052782

==
オブジェクトの同値性のチェック
クラスやオブジェクトの性質に合わせて再定義できる

===
オブジェクトの同値性のチェック(所属性を加味)
case式で使われる
クラスやオブジェクトの性質に合わせて再定義できる

eql?
オブジェクトの同値性のチェック(==より厳密)
Hashで二つのキーが等しいかどうかを判定するのに使われる
クラスやオブジェクトの性質に合わせて再定義できる
再定義した場合はhashメソッドも再定義しなければならない

equal?
オブジェクトの同一性のチェック
object_idが一致するかどうかを調べる
再定義してはならない
0983Name_Not_Found
垢版 |
2019/02/04(月) 17:39:19.38ID:???
>>981
ヴァーーーーーーーーカ!wwwww
0984Name_Not_Found
垢版 |
2019/02/04(月) 17:41:04.67ID:???
es2015からちゃんとSameValueの考え方が示されてる
0985Name_Not_Found
垢版 |
2019/02/04(月) 17:45:21.79ID:???
def 、proc、Proc.new、->、lambda、ブロック、・・挙動と使いどころの異なるこれら関数ライクを使いこなし、
==、===、eql?、equal?の違いと使いどころを完璧に把握しているRuby信者wwwww
0986Name_Not_Found
垢版 |
2019/02/04(月) 17:49:53.38ID:???
>>985
これは酷い。この体たらくで簡単だのバグりにくいだのホザいてんだから呆れる。
0988Name_Not_Found
垢版 |
2019/02/04(月) 22:19:54.30ID:???
必ず===を使うべきというのは間違い
どちらかと言えば==を使うべき
ここ20年職場でもネットでも色んな人を見てきたが
==の方が使用頻度かなり高いのにハマった人は同じくらい

例えばよくあるパターンが正規表現でマッチして数値と比べる場合
==を使うと数値と文字列を勝手にいい具合に比較してしまうとしても
===を使っても数値と文字列が意図せずに来てしまうことには対処できない
本当の問題は数値と文字列が意図せず混在しやすいというところにあるからだ

そうしたときに、==だと高確率で実際問題が起きないが、===だと直ちにハマる
いくら潜在的なバグを生みうると言ったって、その確率は経験上こだわる必要がないほど低い
0991Name_Not_Found
垢版 |
2019/02/05(火) 19:21:20.28ID:???
>>988
正規表現なら、if(/^\d+$/.test(1234)) のように書くので、===も==も使わない
0992Name_Not_Found
垢版 |
2019/02/05(火) 20:37:01.76ID:???
なるほどif(/^\d+$/.test('+1234'))あ、あれ?通らない…(TдT)
if (+1234 == '+1234')は通るのに…
0993Name_Not_Found
垢版 |
2019/02/05(火) 20:42:09.88ID:???
>>991
俺がなんでああいう独特な書き方をしたか分からないか?
書いたことはちゃんと理解してくれないと困る
「本当の問題は数値と文字列が意図せず混在しやすいというところにあるからだ 」
と言ってるだろう
君は正規表現でマッチした値を変数に入れたりすることは一切ないのだろうが
世間ではよくあるのだよ
0994Name_Not_Found
垢版 |
2019/02/05(火) 21:14:24.67ID:???
意図して混在させてるからオッケー😆👌❤??
0996Name_Not_Found
垢版 |
2019/02/07(木) 12:20:22.28ID:???
正規表現って何でコーテーションで囲まなくても良いの?
これが良くわからない
replace('/foo/')
としてしまってアレアレってなる
0997Name_Not_Found
垢版 |
2019/02/07(木) 13:19:37.67ID:???
>>996
まずJavaScriptのリテラルはこれだけある。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Grammar_and_types#Literals

'foo'は文字列リテラルで、
/foo/は正規表現リテラルだ。

昔からある堅い言語は正規表現リテラルがないから文字列からnewして作ってた。
JavaScriptでもそのような作り方もできる。
new RegExp('foo')
これは/foo/と同じように使える。
詳しくは述べないが厳密にはちょっと異なるのでリテラルで書くことを推奨しておく。
0998Name_Not_Found
垢版 |
2019/02/07(木) 13:23:37.16ID:???
>>996
あとほんとに'foobaz'を'barbaz'に変えるようなreplaceは
'foobaz'.replace('foo', 'bar')と、単純に文字列でいい。正規表現使う必要ない。
0999Name_Not_Found
垢版 |
2019/02/07(木) 13:25:22.02ID:???
>>997-998
そういう事なのか、ありがとう
ずっとよくわからずに使ってた
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 453日 14時間 47分 50秒
レス数が1000を超えています。これ以上書き込みはできません。