[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/24 16:40 / Filesize : 290 KB / Number-of Response : 1020
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2015/04/22(水) 01:35:08.20 ID:TQI/XWNo.net]
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。

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

355 名前:デフォルトの名無しさん mailto:sage [2015/11/25(水) 06:40:14.89 ID:xU7WfTzq.net]
ちょっと違うな
プログラムで取り敢えず組めるが
それは数学的に正しくできないから正解にはならないということだな

356 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 08:54:35.58 ID:gxenBIDW.net]
>>350
君、プログラミングの能力低そうだな

357 名前:デフォルトの名無しさん mailto:sage [2015/11/26(木) 09:30:35.50 ID:PuA+0wtS.net]
車輪の再発明はしないのが優秀なプログラマ

358 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 05:10:46.27 ID:YYaQ4CLl.net]
【環境】iOS?
【何をしたのか】Date getTimeによる時刻表期にズレが出てくる
【期待する結果】20msくらいの誤差で複数端末間(PC/スマホ問わず)の時刻を同期する
【サンプルコード】
時刻同期はNTPサーバを使って差分を考慮して行ってます

function getTime(){
$.ajax({
type: 'GET',
url: 'ntp-a1.nict.go.jp/cgi-bin/json?'+Date.now()/1000,
dataType: 'json',
success: function(json){
var nowDate = Date.now();
var latency = (nowDate-json.it*1000)/2;
var fixedTime = json.st*1000 + latency;
var localTIme = Date.now();
offset = fixedTime - localTIme;
}
});
}

やりたいことは複数端末間での精度の高い時刻同期です。
現状、出来ているといえば出来ているのですが、5分くらい放置していると
少しずつズレが出てきて目測ですが400msくらいのズレが発生しているように見えます
その場合、ページを更新するとまたピッタリになるのですが、
ページを更新せずにずっと時刻を同期し続けることは可能でしょうか?

359 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 05:13:39.89 ID:YYaQ4CLl.net]
ちなみに、各端末での時刻表期は

var d = new Date(Date.now()+offset);
var h = ZeroFill(d.getHours(),2);
var m = ZeroFill(d.getMinutes(),2);
var s = ZeroFill(d.getSeconds(),2);
var u = ZeroFill(d.getTime()%1000,3);

各端末の内蔵時計にサーバーとの時刻とのズレを足し引きして
表示させています。Date.now()はnew Date().getTime()と同じです。

内蔵時計がずれていかなければ一回offsetを算出すれば
基本はずれることがないと思うのですが・・・

360 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 08:27:02.13 ID:JennF9kz.net]
そもそも時間の流れとは絶対的なものではないからね。
対象が1.5万km/sくらいで移動していれば相対性理論によりそのくらいの差が出る。

361 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:17:01.45 ID:X+JLR2lJ.net]
無難なのは一定時間毎にサンプルコードのoffsetを更新することかな
もちろんXHRの所要時間も加味して
でも5分で400msもズレる原因を探した方が楽なんじゃねえかな

362 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 12:41:12.67 ID:9ORRm5xJ.net]
Date.now()でのズレはios環境がないので検証できないが
定期的にoffsetを取得するしか無いのではないかな

あるいはaudioContext.currentTimeを使うのはどうか

363 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 13:34:33.24 ID:ADRINJe1.net]
むしろ取得の方がおかしいと考えるべき
片方が遅れて見えるのはsetTimerやらsetIntervalが正確だと思い込んでる所為じゃね



364 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 14:37:30.45 ID:7QRTKik/.net]
>>353
参考迄に教えてけろ。何で
そんなに精度良く同期させる必要が有るん?

365 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 15:08:06.52 ID:YYaQ4CLl.net]
>>356
いまoffsetを20秒ごとに更新するようにしているのですが
どうも一回スリープに入るとズレが生じるような気がしてきています
もうちょっと原因を検証してみます

>>357
サーバーの時刻を一度だして、それ以降はaudioContext.currentTimeを
取得しながら時刻を表示していくということですね
ちょっと一回トライしています!

>>358
setIntervalは20msで設定しています
20msなので人間が知覚できるほどのズレはないような気がしますが
現状は余裕で知覚できるほどのズレが発生しています

>>359
ネトゲで友達と一緒にやるために
サーバーに対して同時刻にアクセスしたいんです

366 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 16:00:53.47 ID:vrZOFMnm.net]
> サーバーに対して同時刻にアクセスしたいんです

同時刻にアクセスしても、一緒にやれるわけじゃないだろう?

367 名前:デフォルトの名無しさん [2015/11/27(金) 16:32:29.72 ID:iIljupK4.net]
>>361
運ですね
ただグループはアクセス順で決まるので
完全に同時刻にアクセスしたら
一緒にやれる確率がかなり高いんです

もちろん人的な誤差やネットワーク的な誤差もあるのは分かりますが
減らせるところの誤差はなるべく減らしたいんです

368 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 17:02:05.49 ID:tJ3YDWoo.net]
setIntervalは信用するな

369 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 18:02:39.08 ID:wJd8+GUt.net]
setIntervalは信用度が低い。

370 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 18:10:23.71 ID:ADRINJe1.net]
20msなら信用度が低くても問題無いんじゃね

371 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 18:25:10.18 ID:G3gCBxYm.net]
>>362
> ただグループはアクセス順で決まるので
> 完全に同時刻にアクセスしたら
> 一緒にやれる確率がかなり高いんです

そういうシステムなのか?

普通に考えたらサーバーが複数ある=負荷を下げるためなので、
短時間に集中したアクセスが同じサーバーに振り分けられたら負荷下がらないし、
先着順に同じサーバーに振り分けられるとするならば、
最後のサーバーはスカスカになるはずだし、設計的にかなりおかしいんだが?

> もちろん人的な誤差やネットワーク的な誤差もあるのは分かりますが
> 減らせるところの誤差はなるべく減らしたいんです

誤差の話じゃないんだ。完全に同時に来たとしても振り分けられるように作ってるはずだということ。
同時刻であれば一緒にやれる確率がかなり高いっていうのは都市伝説だろう?
公式にそういう機能があると明確に言っているならば別だが、やるだけ無駄だと思うがね。

372 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 18:42:23.12 ID:ADRINJe1.net]
>>366
お前が言ってるのは皆が同一のゲームをするMMOの話じゃないのか?
MO系のサーバーなら同一サーバーで処理した方が良いし
それを単純に均一に振り分けてたらいつまで経っても人数が揃わないだろ

373 名前:デフォルトの名無しさん mailto:sage [2015/11/27(金) 20:00:01.00 ID:tds5BOFG.net]
まあルーム方式だわな
それより、目的がそれならTS3とかを使ったほうがよっぽど同期しやすいと思うんだがな



374 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 00:07:51.49 ID:zYBVt+cc.net]
audioContext.currentTimeはPCでは実装できたのですが
iPhoneだとどうもaudioContext.currentTimeは動作しないらしく
値が0に固定されるようなのでトライしたものの残念な結果になりました

>>364,365
seIntervalはそこまで信用していないのですが
20msだろうと、それが50msになろうと、
呼び出した中でDate.now()の返り値が正常であれば
それにoffsetを足して表示するだけの話なので
setIntervalが不安定でもそこまで問題ないように思えるのですが・・・

まぁさすがにsetIntervalが200msくらい遅れるとかなら困りますが・・・

>>366
システムの仕様は明かされていませんが
ほぼ合流不可能な中でこれまで同時押しでかなり高確率で合流できています
時刻合わせしなかったらまず合流できることはありません
まだ時計の精度は悪かった時よりも
NTPで時刻の精度を上げて以降、合流できる確率が上がったのも事実です(体感ですが)

>>368
TS3って調べてみたのですがボイチャですか?
最終的に不特定多数の人に公開したいツールなので
ボイチャはちょっときついかもです

ということで・・・、audioのcurrentTimeがダメだったので
もう少し別のやり方を検討してみます

375 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 01:54:37.04 ID:GEMUQykl.net]
iosでそこまで遅れるという話は挙がっていない
君の設計が悪いことは間違いないので勉強し直すように
以上

376 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 03:46:21.62 ID:hixXfPcg.net]
具体的にコード上げられてるのに指摘も出来ないのか
悪いのは設計だろうかそれとも頭だろうか

377 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 04:19:17.89 ID:zYBVt+cc.net]
performance.now()というaudioのcurrentTimeと似たような関数があったので、それで実装してみました。
iOSでも動作するようです。

時刻をNTPで合わせた瞬間からの経過時間を計測し
その経過時間を加算して現在時刻を表示するというアルゴリズムで実装しました
Date.nowは一切使ってません。
performance.now()は結構精度がいいようで
割と時刻が同期されるようになりました

ただ、iPhoneがスリープ状態に入ったときにカウントが止まってしまうので
それが問題になりました。
それは、スリープを検知するような関数を実装して
スリープを検知したらページをリフレッシュするようにして解決しました。
これで今のところ何時間かたってもほとんどズレがないようになったような気がします。
もう少し運用してみないと分かりませんが・・・

とりいそぎ、同じ状況で困った人がいたときのためのメモ書きです。

ちなみに色々調べてたらDate.now()というかnew Date()もそうなんですが
どうも動作が遅いようです。
konbu13.hatenablog.com/entry/2014/02/08/113447
のページによると140ms〜230msかかっているようで
確かにその時間は僕のやりたいことから考えるとクリティカルな遅さです
iOSとかは特にその遅さの影響を受け安かったんですかね・・・
その他リソースの使用状況にもよるかもしれませんが

とりあえず割といい精度になってきたので書き込みはこれで最後にします
色々情報くれた方ありがとうございました、助かりました。

378 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 04:29:06.31 ID:hiaEqByC.net]
>>372
> 百万回やった合計時間でどちらが速いか算出します.
> Result
> method time
> new Date() 233msec
> Date().now() 142msec

と言うか根本的な解決はできてないと思うけど困ったらまたいらっしゃい

379 名前:610 mailto:sage [2015/11/28(土) 21:52:17.08 ID:u/RqRVR/.net]
立てました。よろしく。

JavaScript情報交換所(プログラミング既習者専用)
peace.2ch.net/test/read.cgi/tech/1448714123/

(289の誘導先には投下済み)

380 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:08:58.63 ID:omVU5b+0.net]
お、またセルフ隔離奴が沸いたゾ〜

381 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:06:32.48 ID:jeYb2Mq1.net]
この人は仕様理解が適当で間違いもあって正しい指摘があっても「おまえはわかってない」と小馬鹿にした態度をとり続けるんだよね
テンプレからも自分以外を見下した感がはっきりと現れているし、まともな議論を望む人は行かないほうがいいかと

382 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 16:34:35.60 ID:9CgkJ04D.net]
自分で隔離されに行ってるんだ
これほど助かる事もあるまい

383 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 16:40:13.54 ID:YeIwqIKD.net]
時刻取得はシステムコールだから概ね遅い。



384 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 21:23:29.08 ID:ttk2cNlA.net]
>>377
各言うここも元々は隔離スレなんですがねw

385 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 22:26:46.50 ID:GFfphPGr.net]
>>7のご本人様には

386 名前:サう見えるんだろうな []
[ここ壊れてます]

387 名前:デフォルトの名無しさん [2015/11/30(月) 00:12:59.62 ID:eeMkzjwS.net]
スピナーの練習ですまんな

388 名前:デフォルトの名無しさん [2015/11/30(月) 00:13:26.95 ID:eeMkzjwS.net]
パッと見
編成事故だろこれ

389 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 00:02:41.35 ID:STfQzAtr.net]
巨大なファイルをJavaScriptをつかってブラウザのローカル上で分割する場合、どんな方法がありますか?

例えば、ドラッグ&ドロップで500MBのデータをFILEAPIで読み込み、BLOB形式に落とし込んだデータを10分割する方法。
読み込み自体は、4GBでも実現できたのですが、それを分割する方法が思い付かない・・・
最初は、sliceやsubstrなどで部分読み込みしようとしたのですが、60MBより大きなファイルに処理をかけるとエラーまたはフリーズ状態になってしまいます。
当然軽くさせるためにlengthなども外しています。
何か良い方法はないでしょうか?

390 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 07:47:46.62 ID:xvXjXk07.net]
はい現行スレ

+ JavaScript の質問用スレッド vol.127 + [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/hp/1448293871/l50

391 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 13:23:56.62 ID:C95UNH5l.net]
>>383
Blob#slice()が通らないならどっか間違ってるか実行環境の問題じゃないかな
それが特定のブラウザだったら>>384で聞いたほうがいい

392 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 15:24:29.22 ID:STfQzAtr.net]
>>385
sliceは巨大な文字列を部分抜きでき

393 名前:るものなの? []
[ここ壊れてます]



394 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 15:30:47.45 ID:lIW/6OLc.net]
試してから聞けよ

395 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 15:33:41.03 ID:STfQzAtr.net]
>>384
ありがとう。
そちらでレスしてみました。

396 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 15:34:35.77 ID:STfQzAtr.net]
>>387
既に試してダメだったので383でレスしました。

397 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 15:56:50.87 ID:C95UNH5l.net]
>>386
ちょっと待ってどこから文字列が出てきたんだ
blob型を分割したいけどできないって質問だった筈だよね
何かおかしいから質問し直すにしてもサンプルコード出した方がいいと思うよ

398 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 18:44:55.03 ID:pST9GKGG.net]
だな。
どういうコードで試したのかは書いてくれないとね。

399 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 07:29:07.30 ID:7ldc1+VM.net]
↓こちらへどうぞ

+ JavaScript の質問用スレッド vol.124 + [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1427008785/

400 名前:デフォルトの名無しさん mailto:sage [2015/12/10(木) 01:22:25.69 ID:Gagm3MNk.net]
〜のページに行って◯◯をクリックするってどう書けばいいの?

401 名前:デフォルトの名無しさん mailto:sage [2015/12/10(木) 01:43:25.58 ID:ZhUmFj4b.net]
実行環境による
その二つを同時にやるならサイト側のスクリプトか拡張機能かサーバーサイドじゃないと無理

402 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 08:28:22.96 ID:GWmwMFvD.net]
同オリジンなら何とでもできる。

403 名前:デフォルトの名無しさん mailto:sage [2015/12/14(月) 23:12:20.44 ID:ls6EZ2cx.net]
>>390
30M程度のBLOB型文字列だとsliceで指定範囲を抜き取れるが、500Mや1Gの巨大なファイルになると失敗してしまう。

JavaScriptだけで巨大な文字列を分割する良い技ないですかね・・



404 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 00:52:49.97 ID:qjG5txy2.net]
>>396
あのなぁ、昔はメモリどころかHDDが1GBもない時代があったんだぞ。
その時代であったって、ちゃんと作ればそれぐらいのデータは扱える。

メモリにいっぺんに乗り切らないなら分割して扱えばいいだけの話。
少しは考えた方がいいぞ。言語の勉強をするんじゃなくて
アルゴリズムの話だ。

405 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 01:38:34.89 ID:uWpoWN+S.net]
>>396
blob型文字列ってなんだよ…
blob型を分割しようとして失敗するならそのコードがどこか間違ってるし
それを文字列に変換したもので失敗するなら実装の制限にぶち当たってるから
その場合は>>397の言うように事前に分割するしかない

406 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 18:08:16.92 ID:WPjAuEFO.net]
HPとかのJavascriptのソースコードを読んでいるんですが非常に読みづらいです
たぶん意図的に読みづらくしているのでしょうが、読みやすくするソフトとかないでしょうか?

407 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 18:45:50.12 ID:AvAOTExp.net]
ブラウザに整形機能付いてるじゃん

408 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 21:55:10.29 ID:uYEbzlBn.net]
>>398
制限か何かにあたったのかな・・

今行っているのは、2.2ギガバイトのファイルをドラッグ&ドロップで読み込み、URLまたはtextで読み込んだあとに、sliceで指定部分を抜き出そうとしているのですが、失敗に終わっています。

59MBまでなら成功したので397の通り自分の書いたプログラムに無理があるのかなと・・・
困り果てています。

因に事前に分割とは、JavaScript以外の方法でということですか?

自分がやりたいことは以下です。
1、fileAPIで読み込む(2ギガ以上)
2、10MB程度に分割
3、Ajaxで送信
4、分割されたファイルを組み立て再構築
5、元のファイルに戻して保存

59MBのファイルなら成功しました。それ以上だと・・・・
何か分割する方法ないでしょうか、

409 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 22:17:38.64 ID:eq/fh4de.net]
自分の書いたプログラムを貼ってみればいいんじゃない

410 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 23:14:28.57 ID:NyiJCKNO.net]
ここまでいわれて何でコードを開示しないんだろ

411 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 00:43:40.05 ID:sgXyEvFI.net]
だから、文字列にするなって何度もいわれてるじゃん

412 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 07:34:17.89 ID:3i7Ahh0A.net]
文字列に変換せずにArrayBufferを取得してTypedArrayの担当範囲を変えながら送ればいいでしょ。

413 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 08:26:46.56 ID:7CCFFtot.net]
>>401
ストリーム入力
ActibXobject



414 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 08:31:01.54 ID:386jW6/x.net]
www.html5rocks.com/ja/tutorials/file/dndfiles/

415 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 11:11:28.48 ID:XbnIVOIY.net]
>>406
オフラインでドラッグ&ドロップのfileAPIで読み込みたいのですが、巨大なファイル(2ギガ以上)だと何かの上限で無理なんですかね?

416 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 11:17:23.35 ID:hg6iyaJa.net]
32bitの符号あり整数の上限があるかもしれんね

417 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 12:14:10.78 ID:FY7Nx9Qu.net]
10GBあるファイルもアップロード出来てレジュームも可能なようつべって一体全体どうやってるんだろうねえ(嫌味

418 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 12:15:49.35 ID:FY7Nx9Qu.net]
つうか何度も答え出てるのにそれを全部無視してる質問者が池沼すぎてもうね

419 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 13:13:47.58 ID:bNVTe3xs.net]
NGになってるんじゃね?

420 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 08:18:25.00 ID:woxLyQ04.net]
>>409
通常の配列は2**32-1以下の制限があるが型付配列は2**53-1以下であり8PiBまで扱える

421 名前:デフォルトの名無しさん [2015/12/17(木) 12:31:04.29 ID:3Bayziwh.net]
テキストフィールド上で、特定のキー操作をしたときに、入力補助としてjsから値の変更をしたいです。
ただ、この機能はあくまで入力補助目的なので、手入力した場合と同じ挙動にしたいのですが、
普通にvalueを書き換えただけでは、フォーカスを失った時のchangeイベントが発生しなくなってしまいます。


質問@
手入力したときと同じように、changeイベントが発生する状況をjsで作り出してやることは可能でしょうか?
※プロパティとか見てみたけど、それらしいものが見つかりませんでした。


また、valueを直接書き換えるのがだめなら、通常のキー入力をエミュレートして入力してやれば、changeイベントも動いてくれるかなと思ったのですが、キーイベントを発火しただけでは文字は入力されないようです。

質問A
実際に値が入力される所まで再現させる方法はあるでしょうか?
(それができたとして、changeイベントが発生するかは、別の話ですが…)


ということで、やりたいのはjsで値を変えつつ手入力時と同じようにchangeイベントも発生させることです。
最悪、タイミングは若干変わってしまいますが、blurの中でchangeイベントを発生させてやるしかないかもと思ってます。

よろしくおねがいします。

422 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 14:17:38.28 ID:o7OE0QW2.net]
var repeat_cnt = 0;
function my_func() {
  repeat_cnt++;
  if (repeat_cnt === 100) { // 上限の100回になったら終了する
    return;
  }

  if (is_end_condition()) {
    // ここで必要な処理をする
  } else {
    setTimeout(function () {
      my_func();
    }, 10);
  }
}
function main() {
  my_func();
}
こういう再帰呼び出しをやっても問題ないですか?
場合によってはstackoverflowエラーなど出ませんか?

423 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 15:05:07.17 ID:X7jSmipQ.net]
もちろんスタックオーバーフローは起こりうる
それが起こる再帰回数は実装依存



424 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 15:28:28.70 ID:4ODMQ8bg.net]
非同期の間接呼び出しなので起こりません

425 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 15:35:01.90 ID:qYA12dWq.net]
起こるのは末尾再帰やな

426 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 15:38:21.34 ID:qYA12dWq.net]
何言ってんだ俺日本語がおかしい
起こらないのは末尾再起やな
>>415のは>>417の言うように非同期だからこれまた起こらない

427 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 17:37:19.09 ID:o7OE0QW2.net]
>>416>>417
どっちが正しいのでしょうか

428 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 20:18:42.20 ID:2fqt+8T5.net]
起こるんじゃね

429 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 20:29:36.50 ID:3Bayziwh.net]
>>415はfuncからfuncを呼んでるわけじゃないから、そもそも再起じゃないので、スタックオーバーフローにはならないですよ。

430 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 21:09:59.65 ID:TfrmoFMM.net]
ループは再帰だろ

431 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 21:59:40.13 ID:dJ6WmCFS.net]
1回目が終わった後、時間が来たら2回目が呼ばれて…の繰返しで、
たんに同じ関数が何度も実行されるってだけの状況だと思うけど、これは再帰って呼んでいいの?

432 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 22:10:00.53 ID:o7OE0QW2.net]
>>424
関数内から同じ関数を呼んでいるので再帰的な動きですが、これをループか何かで書き換えて再帰的な感じを無くす事は出来ますか?

433 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 22:46:28.31 ID:J4jHSYqR.net]
>>425
setTimeoutは、その場で待つわけじゃなく、関数は最後まで走っちゃうよ。
その後、時間が来たらsetTimeoutに登録された関数が実行される。
だから、関数内から自分を呼び出してる訳じゃないんで、再帰とはいわないと思う。

まあ、どう呼ぶかはさておき、普通の再帰みたいにコールスタック使いまくる用な事にはならないから、スタックオーバーフローは発生しないし、別に変えなくてもいいと思う。

再帰っぽい感じのコードが嫌なのならsetIntervalを使ってみたら?同じだけど。



434 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 23:40:09.12 ID:mvUSBC4C.net]
>>414
dispatchEventでchangeイベント発火させてやればいいんでね
element.dispatchEvent(new Event('change'))でできるはずだけど
確かIEはnew Eventできないのでdocument.createEventでchangeイベントを作成する必要がある

435 名前:デフォルトの名無しさん mailto:sage [2015/12/17(木) 23:48:47.04 ID:mvUSBC4C.net]
あゴメン全然的はずれなこと言ってる忘れて

436 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 08:35:49.78 ID:3yHnx8Mf.net]
>>415
無駄にクロージャを形成してGC働かせたり、グローバル変数を使っていることが気になる
setTimeout(my_func, 10, repeat_cnt); で十分

437 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 13:29:51.96 ID:aALELz7q.net]
>>429
そんな書き方が出来るのかよ!
君は優秀だな

438 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 14:08:24.41 ID:7Erpdy7Z.net]
まあな!

439 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 14:10:29.70 ID:7Erpdy7Z.net]
あ、ちなみに、3番目の引数は、IEで動かねーから注意な(笑)

440 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:35:16.80 ID:borw4si8.net]
どっちもfunctionを渡してるだけだし、そんな驚くことじゃねえだろうよw

441 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 17:37:55.19 ID:borw4si8.net]
あ、第三引数でカウント渡す部分に感動してたのかw

442 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 19:11:11.64 ID:/TkrVzDw.net]
>>432
IE10 で動くわけだが、IE全般で使えないかのようなミスリードは良くない
IE9- はpolyfillを使えばよい

443 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:40:36.86 ID:aALELz7q.net]
>>434
一々w付けんなよw



444 名前:デフォルトの名無しさん mailto:sage [2015/12/18(金) 20:51:05.24 ID:g1D+z+o4.net]
繰り返す
このポリフィルる

445 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 04:13:13.83 ID:qAOTtWfG.net]
通常はいらん。
レガシーIEに対応しないといけないような特殊な場合のみ。

446 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 04:46:59.84 ID:ysM2oFx/.net]
IE9はレガシーじゃないよw

447 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 06:54:17.53 ID:lBORTjAw.net]
Windows10が実質無料なんだし、もうレガシーIEは無くなったものとみなしていいよな????
分かっていて使っている「玄人」の相手なんかしなくていいよな???????????

448 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 08:26:31.32 ID:IhTv1p38.net]
>>440
そういうことはWindows10にアップグレード可能なOSとIE9をサポートするOSが一致するか調べてから発言しような

449 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 11:43:33.94 ID:Zi1J5vpJ.net]
Edgeがあるじゃん

450 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 12:49:01.27 ID:IhTv1p38.net]
>>442
そういうことはEdgeの対応OSを調べてから(ry

451 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 19:00:09.47 ID:pEku9roO.net]
Windows10だろ??????
何言ってんだ????????こいつwwwwwww

452 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 19:22:19.99 ID:ysM2oFx/.net]
>>444
おう、お前の知り合いは全員Windows 10にしたかな?
会社のパソコンのOSはなんだい?

453 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 20:17:42.40 ID:HC0McPg/.net]
Windows 10だけサポートするなら>>441に話が戻るな



454 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 03:42:39.14 ID:szXGSrMl.net]
MVC「じゃない」JavaScriptのフレームワークって無いですかね
configとかroutesとかviewとかRESTfulとかめんどくさいんですよ、どうせ俺しか弄らないんだし
今はクライアント側にHTMLとAngularでAjax呼ぶ
サーバサイドでJSON応答する
だけで書いてますがそんな感じの

455 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 03:49:08.88 ID:jqjYNF9z.net]
>>447
HTML+CSS+jQueryでよい。

HTMLとCSSをただしく使えるのであれば
jQueryだけでビュー部分は簡単に作れる。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<290KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef