元スレ+ JavaScript の質問用スレッド vol.87 +
JavaScript覧 / PC版 /みんなの評価 :
1 = :
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 質問にならない投稿はご遠慮ください。(煽り、コード制作依頼など)
(2) ユーザの迷惑になるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) メール欄は空欄にすることを推奨します。(質問者を騙って回答者を煽る迷惑な人がいるようです)
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合はhttp://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。質問テンプレートを活用してみてください。
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(*1)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
(*1) Windows ならコピットhttp://www.umechando.com/software/ を利用すると簡単にコピーできます。
2 = :
■主要FAQ (全部はhttp://fiddle.jshell.net/vSqKr/24/show/ )
Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
Q2. document.write()でページ内容を追加したいのですが…
A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A4. 「document.forms.myform.elements[変数名].value」でどぞ。
JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
IEでは要素オブジェクトのプロパティcurrentStyleを使う。
Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
「"...this..."」とか「function(){...this...}」ではうまく行きません。
A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
「function(x){return function(){...x...};}(this)」
Q8. input type="file"の値を設定(参照)できないのですが…
A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
3 = :
■前スレ
+ JavaScript の質問用スレッド vol.86 +
http://hibari.2ch.net/test/read.cgi/hp/1303790568/
■過去スレ全集
http://www2.atpages.jp/mirror/2ch/javascript/
http://usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)
http://wing2.jp/~mirrorhenkan/2ch/javascript/ (閲覧のみ)
■関連スレ
ECMAScript デス 3
http://hibari.2ch.net/test/read.cgi/tech/1190160481/
Ajaxでも語りませんか Rigel4
http://hibari.2ch.net/test/read.cgi/php/1166751613/
【誰か】jQueryのここがわからない【助けて】
http://hibari.2ch.net/test/read.cgi/tech/1229881548/
1行javascriptプログラミング
http://hibari.2ch.net/test/read.cgi/hp/1066750037/
WSH(・∀・)スレッド! Part 4
http://hibari.2ch.net/test/read.cgi/tech/1243095768/
Webサイト制作初心者用質問スレ part224
http://hibari.2ch.net/test/read.cgi/hp/1301891537/
CSS初心者スレッド=9th=
http://hibari.2ch.net/test/read.cgi/hp/1287470663/
役に立つ書籍は? 4冊目
http://hibari.2ch.net/test/read.cgi/hp/1172823674/
5 = :
>>1
乙です。
1秒毎に実行し、決まった時刻まで「残りHH時間MM分SS秒」と表示したいです。
var today = new Date();
var yyyy = today.getFullYear();
var mm = today.getMonth();
var dd = today.getDate();
//↓こいつが、その日の決まった時刻になります
var targetTime = new Date(yyyy,mm,dd,'18','02','00');
//↓取り敢えず引いてみて…
var diff = targetTime.getTime() - today.getTime();
//ミリ秒の差が出せたっぽい
alert(diff);
この後、差から時分秒を生成すればいいんですかね?
単に60で割ったりすればいいんですかね?
もう少しスマートな方法とかあったら教えて欲しいです。
6 = :
テンプレ議論スタート
7 = :
>>5
targetTime - new Date(); で差分ミリ秒を求めて残り時間は除算で求めればいい
8 = :
998: Name_Not_Found [sage] 2011/05/28(土) 14:51:11.20 ID:???
>>983
ありがとう 以前から数値範囲の判定の書き方に違和感を感じていました
しかし、switchの方が良いというのはどういうケースでしょうか?
if(0<a && a<8){}
else if(a<16){}
else if(32<a && a<64){}
else if(63<a && a<100){}
else {}
という条件分岐の場合、switchに置き換えられますか?
http://hibari.2ch.net/test/read.cgi/hp/1303790568/998
9 = :
999: Name_Not_Found [sage] 2011/05/28(土) 15:29:51.58 ID:???
switch(true){
case 0<a && a<8:...
case a<16:...
case 32<a && a<64:...
case 63<a && a<100: ...
default: ...
}
http://hibari.2ch.net/test/read.cgi/hp/1303790568/999
10 = :
>>8
else if(a<16){} が (0 <= a || 8 <= a && a < 16) なのは期待通り?
期待通りでないとして、以下のように出来る。
var a = 1;
if (a < 1) { // 1未満
} else if (a < 8) { // 1以上8未満
} else if (a < 16) { // 8以上16未満
} else if (a < 32) { // 16以上32未満
} else if (a < 64) { // 32以上64未満
} else if (a < 128) { // 64以上128未満
} else { // 128以上
}
11 = :
前スレ 1000 は、何で while (true) がバッドノウハウなんだ?
て思たけど、確かにクライアントサイドでは使いどころない罠。
けど、それと switch (true) は、比較するものではないと思う。
12 = :
>>9はJSLintでエラーになる
13 = :
>>11
while(true) はコードを間違えたときに無限ループになる
間違えたときに止まるのが良いコーディング
14 = :
>>12
ならないぞ?
>>13
それなら、全てのループが使えないじゃん。
間違いが間違っている様に見える様にするコーディングが良いってのなら
聞いたことあるけど。
15 = :
>>14
まあ確かに無限ループする可能性がなくなるわけじゃないけど、条件式が常に true なら無限ループする危険性が高まるのは確か
危険性は出来るだけ排除しておきたいでしょ
16 = :
>>14
下記コードをhttp://www.jslint.com/ でテストすればわかる
var a = 1;
switch (true) {
case a < 0:
alert()
break;
case a < 10:
break;
case a < 20:
break;
default:
}
18 = :
>>16
alert() の後にセミコロンがない。
最後の default に break がない。
この 2つの warning だけだった。
19 = :
while(true)を使ったことがないのは
それが必要になるコードを書いたことがないだけ
ifより>>9のswitchの方がほんのわずかだけ速い
バッドノウハウ云々言う奴は、見慣れてないだけ
コーディング規約で禁止したければ好きにしろ
20 = :
>>18
俺の環境ではこうなる (Clear All Options)
var a = 1;
switch (true) {
case a < 0:
break;
case a < 10:
break;
case a < 20:
break;
default:
}
↓
Error:
Problem at line 2 character 9: Weird condition.
switch (true) {
21 = :
>>19
while(true)で書くことは出来るだろうけど、while(true)でなきゃできないパターンもない
選択の余地があるならwhile(true)を積極的に使う理由もないと思う
22 = :
IE9, Firefox4, Safari5で100000回ループテストしてみたら、Firefox4ではswitchが若干早く、他はifの方が10~20倍早かったです
と言っても、C2D-3GHzマシンの100000回ループで数十msしか違わないので可視性を重視した方が良さそうですね
ありがとうございました
23 = :
>>21
コード生成とか
25 = :
>>23
詳しく
26 = :
while(true) は do-while で書けるから必要性に疑問
27 = :
>>26
ループ条件を先頭に書くか末尾に書くかの違い
俺はスクロールなしで見渡せる程度のループでなければdo-whileは使わん
28 = :
>>27
安全性よりも個人的な視認性を重視するのか
29 = :
>>28
安全性?
while(true) {
if (継続条件1) continue;
if (継続条件2) continue;
if (継続条件3) continue;
break;
}
これが危険だってんならforだって何だって危険だろ
30 = :
>>7
有難う御座います。
できました。
var today = new Date();
var yyyy = today.getFullYear();
var mm = today.getMonth();
var dd = today.getDate();
var targetTime = new Date(yyyy,mm,dd,'18','02','00');
//mili seconds
var diff = targetTime - today;
var hogeH = Math.floor(diff/(60*60*1000));
var hogeM = Math.floor(diff/(60*1000));
var hogeS = Math.floor(diff/1000);
hogeM = hogeM - hogeH*60;
hogeS = hogeS - hogeH*60 - hogeM*60;
alert('残り'+hogeH +':'+hogeM+':'+hogeS);
31 = :
コーディング規約の話でもそうだけどさ
そう書いた方が理に適っているという推奨形と
言葉は悪いがバカでも間違えないようにこう書くなという制限形は
わけて考えるべきだと思う
strict modeでthisを参照できなくなるってのは後者なんだよね
あれはあれで、コンテキストをwindowその他で切り替えられるように
理解して使うならものすごく便利だったのに
33 = :
>>31
理解して使えばいいっていうなら「eval でも with でも何でも使えばいい」ってことになるから不毛だと思う
「バカでも間違えないように」は理にかなっているし、究極的には全てを理解している人は何でも使っていいことになるわけだし
36 = :
>>29はデフォルトでループを抜け、特定条件時のみ継続する
これは理に適った書き方
だが誰もがこう書けるわけではないからwhile(true)を禁止する規約を作る
これは現場の配慮
条件分岐での||や&&の効率的な並べ方とか、考えて書ける奴は少ない
37 = :
>>29はdo-whileで済むコードをトリッキーな書き方にしてるだけだから
オレオレコード出して「書ける奴が少ない」といわれてもね…
do {
} while (継続条件1 || 継続条件2 || 継続条件3);
39 = :
デフォルトで抜けるっつうかtrueで抜けない処理して相殺してるよな
41 = :
タイマー代わりに使う奴もいたな
42 = :
基本的な質問かもしれませんが教えてください
ブラウザなどで無限ループさせてしまってダイアログが閉じても閉じても出る状態になったとき
ショートカットなどでJavaScriptの処理を中断させる方法はあるのでしょうか?
43 = :
>>42
Firefox使えば無問題
44 = :
>>37
それだと、ifの間に処理挟む場合に対応できないだろ
てかwhile(true)が禁止されてる所なんてあるのか…不便だな
47 = :
continue のラベルを禁止されて、どう考えても一気に抜けた方がスマートなのに、
ループ制御をわざわざ変数でやらなきゃならなかったケースがあるな。
while(true)なんて、forのカッコに意味不明な処理突っ込むのに比べれば
「ああそうだねぇ(微笑)」で流せる程度の可愛いもんだ。自分が禁止されなければw
jslintでswitchが警告出すのは仕様。
作者は元々swtchを問題ないとしてて、switch関係でメール受けても「正しく使えば問題ない」と
返事もしてたけど、その返事したあとすぐあたりでjslintでswitch絡みのトラブルだかがあって、
「ああswtchってダメなんだ」と理解したってな話を何かで読んだ。
48 = :
何もしないやつを最後に持ってくるべきだけど
if (condition) {
elseif (condition2) {
} else { //condition3
}
なんかするやつの条件式が複雑な場合
if (condition) {
elseif (condition3) {
continue;
} else { //condition2
}
とかするけどね俺は
49 = :
>>42
ない。
ブラウザのプロセスを殺すか、Chromeとかの連続ダイアログを制限してくれるブラウザを使う。
50 = :
手元にあるプログラムだと、GIFデータの処理の中で
LZWから数値配列を展開する部分が
while (バイナリデータ > 0)
{
1.バイナリから今回調べるデータ(対象データ)以上の量を取り出し
2.取り出したデータから対象データを切り出し
3.対象データがクリアフラグなら、辞書を初期化してcontinue;
4.対象データが終了フラグなら、処理を終了(break)
5.辞書更新
6.対象データを数値化
}
こんな感じになってるけど、LZWデータが正しい限り、このループは必ず終了フラグで終わるので、
while の条件は (true) でもかまわない。
データが必ず正しいことが保証されていれば、whileでのチェックはやるだけ無駄。
この例に限らず、こういった「while(true)でいい(かまわない)」状況なんていくらでもある。
5,6のながーい処理をまとめてifに突っ込んで「対象データが終了フラグ以外なら」という
条件にすれば、終了条件をwhileに入れることはできるが、元々ループ内だけでだけで済んでた
対象データの変数の扱いを、ループの先頭まで持って行かなければならなくなる。
世の中、そういう「変数をわざわざ撒き散らす」プログラムがお好みの人ばかりじゃない。
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.88 + (1001) - [97%] - 2011/7/20 7:03
- + JavaScript の質問用スレッド vol.77 + (1001) - [97%] - 2010/5/8 19:06
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.97 + (1001) - [97%] - 2012/3/1 3:31
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.107 + (1001) - [95%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.117 + (1009) - [95%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.137 + (1003) - [95%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.127 + (1001) - [95%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [95%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.94 + (1001) - [95%] - 2012/1/8 15:46
トップメニューへ / →のくす牧場書庫について