+ JavaScript の質問用スレッド vol.87 +
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/ を利用すると簡単にコピーできます。
■主要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 中でやるとか。
>>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で割ったりすればいいんですかね?
もう少しスマートな方法とかあったら教えて欲しいです。
テンプレ議論スタート
>>5 targetTime - new Date(); で差分ミリ秒を求めて残り時間は除算で求めればいい
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
>>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以上
}
前スレ 1000 は、何で while (true) がバッドノウハウなんだ? て思たけど、確かにクライアントサイドでは使いどころない罠。 けど、それと switch (true) は、比較するものではないと思う。
>>11 while(true) はコードを間違えたときに無限ループになる
間違えたときに止まるのが良いコーディング
>>12 ならないぞ?
>>13 それなら、全てのループが使えないじゃん。
間違いが間違っている様に見える様にするコーディングが良いってのなら
聞いたことあるけど。
>>14 まあ確かに無限ループする可能性がなくなるわけじゃないけど、条件式が常に true なら無限ループする危険性が高まるのは確か
危険性は出来るだけ排除しておきたいでしょ
>>14 下記コードを
http://www.jslint.com/ でテストすればわかる
var a = 1;
switch (true) {
case a < 0:
alert()
break;
case a < 10:
break;
case a < 20:
break;
default:
}
17 :
16 :2011/05/28(土) 16:21:55.74 ID:???
ごめん、alert() は消し忘れ
>>16 alert() の後にセミコロンがない。
最後の default に break がない。
この 2つの warning だけだった。
while(true)を使ったことがないのは
それが必要になるコードを書いたことがないだけ
ifより
>>9 のswitchの方がほんのわずかだけ速い
バッドノウハウ云々言う奴は、見慣れてないだけ
コーディング規約で禁止したければ好きにしろ
>>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) {
>>19 while(true)で書くことは出来るだろうけど、while(true)でなきゃできないパターンもない
選択の余地があるならwhile(true)を積極的に使う理由もないと思う
IE9, Firefox4, Safari5で100000回ループテストしてみたら、Firefox4ではswitchが若干早く、他はifの方が10〜20倍早かったです と言っても、C2D-3GHzマシンの100000回ループで数十msしか違わないので可視性を重視した方が良さそうですね ありがとうございました
ANTLRだったかな LL(k)のパーサージェネレーターだが膨大なwhileとswitch吐くの さすがにJSでは現実的でないと思ってやめた
while(true) は do-while で書けるから必要性に疑問
>>26 ループ条件を先頭に書くか末尾に書くかの違い
俺はスクロールなしで見渡せる程度のループでなければdo-whileは使わん
>>27 安全性よりも個人的な視認性を重視するのか
>>28 安全性?
while(true) {
if (継続条件1) continue;
if (継続条件2) continue;
if (継続条件3) continue;
break;
}
これが危険だってんならforだって何だって危険だろ
30 :
5 :2011/05/28(土) 17:07:21.62 ID:???
>>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);
コーディング規約の話でもそうだけどさ そう書いた方が理に適っているという推奨形と 言葉は悪いがバカでも間違えないようにこう書くなという制限形は わけて考えるべきだと思う strict modeでthisを参照できなくなるってのは後者なんだよね あれはあれで、コンテキストをwindowその他で切り替えられるように 理解して使うならものすごく便利だったのに
while(true) は do-while より明らかに遅い do-while は条件式が一カ所にまとまっているから視認性もいいので do-while を使ってる
>>31 理解して使えばいいっていうなら「eval でも with でも何でも使えばいい」ってことになるから不毛だと思う
「バカでも間違えないように」は理にかなっているし、究極的には全てを理解している人は何でも使っていいことになるわけだし
strictでもコンテキスト切り替えはcall()で出来るような
グローバルコードでthisを参照できるのは理にかなってるが、関数コードでthisを参照できるのは理にかなってなくね?
>>29 はデフォルトでループを抜け、特定条件時のみ継続する
これは理に適った書き方
だが誰もがこう書けるわけではないからwhile(true)を禁止する規約を作る
これは現場の配慮
条件分岐での||や&&の効率的な並べ方とか、考えて書ける奴は少ない
>>29 はdo-whileで済むコードをトリッキーな書き方にしてるだけだから
オレオレコード出して「書ける奴が少ない」といわれてもね…
do {
} while (継続条件1 || 継続条件2 || 継続条件3);
while(true)は本来やらなくていいtrueを毎回評価してるところがスマートじゃないと思うよ わざわざパフォーマンスを落とす必要もない
デフォルトで抜けるっつうかtrueで抜けない処理して相殺してるよな
IE6が全盛期だった頃はwhile(true)を使ったブラクラがあったよね
タイマー代わりに使う奴もいたな
基本的な質問かもしれませんが教えてください ブラウザなどで無限ループさせてしまってダイアログが閉じても閉じても出る状態になったとき ショートカットなどでJavaScriptの処理を中断させる方法はあるのでしょうか?
>>37 それだと、ifの間に処理挟む場合に対応できないだろ
てかwhile(true)が禁止されてる所なんてあるのか…不便だな
(処理() || true) && ~
do-whileってよくわからないから使ったことないお
continue のラベルを禁止されて、どう考えても一気に抜けた方がスマートなのに、 ループ制御をわざわざ変数でやらなきゃならなかったケースがあるな。 while(true)なんて、forのカッコに意味不明な処理突っ込むのに比べれば 「ああそうだねぇ(微笑)」で流せる程度の可愛いもんだ。自分が禁止されなければw jslintでswitchが警告出すのは仕様。 作者は元々swtchを問題ないとしてて、switch関係でメール受けても「正しく使えば問題ない」と 返事もしてたけど、その返事したあとすぐあたりでjslintでswitch絡みのトラブルだかがあって、 「ああswtchってダメなんだ」と理解したってな話を何かで読んだ。
何もしないやつを最後に持ってくるべきだけど if (condition) { elseif (condition2) { } else { //condition3 } なんかするやつの条件式が複雑な場合 if (condition) { elseif (condition3) { continue; } else { //condition2 } とかするけどね俺は
>>42 ない。
ブラウザのプロセスを殺すか、Chromeとかの連続ダイアログを制限してくれるブラウザを使う。
手元にあるプログラムだと、GIFデータの処理の中で LZWから数値配列を展開する部分が while (バイナリデータ > 0) { 1.バイナリから今回調べるデータ(対象データ)以上の量を取り出し 2.取り出したデータから対象データを切り出し 3.対象データがクリアフラグなら、辞書を初期化してcontinue; 4.対象データが終了フラグなら、処理を終了(break) 5.辞書更新 6.対象データを数値化 } こんな感じになってるけど、LZWデータが正しい限り、このループは必ず終了フラグで終わるので、 while の条件は (true) でもかまわない。 データが必ず正しいことが保証されていれば、whileでのチェックはやるだけ無駄。 この例に限らず、こういった「while(true)でいい(かまわない)」状況なんていくらでもある。 5,6のながーい処理をまとめてifに突っ込んで「対象データが終了フラグ以外なら」という 条件にすれば、終了条件をwhileに入れることはできるが、元々ループ内だけでだけで済んでた 対象データの変数の扱いを、ループの先頭まで持って行かなければならなくなる。 世の中、そういう「変数をわざわざ撒き散らす」プログラムがお好みの人ばかりじゃない。
IE以外は連続ダイアログ抑制するんじゃないの?
>>44 そういう場合も何か一つ継続条件を置くね
do {
if (条件) {
// 処理
continue;
} else if (条件) {
// 処理
continue;
}
} while (継続条件);
continue を何度も使うなら break 一つの方がシンプルだと思うけどね
基本的に continue は使わない
>>50 正確にはwhile(true)でもいいけど無駄
while(対象データが終了フラグ以外)にして他に条件があるならif(条件){break;}すればいい
全部の条件をwhile()に持ってくる必要はないよ
54 :
Name_Not_Found :2011/05/29(日) 13:05:56.63 ID:dNZTwSiC
while(true){}はいいと思うけど どうせならloop{}が欲しい メソッドプロパティー以外のもう少し文法拡張してくれないかな
これだけ議論が続いてもfor(;;)派が一人も出てこないことに絶望した
for(;;)もwhile(1)も一緒やん
だからこそ永遠に戦い続けるのだ
thisについて質問です。 1: JavaScriptのthisは、applyなどされない状態で(仕様上)何の値を指すのか? 2: イベントリスナーのthisがelementを指すのは、仕様ではなくブラウザの実装によるものか? 以上、どうか教えてください。お願いします。
厳格比較の===を使いたいんだけど、null || undefinedを判定したい時にちょっと困る。 if(x === y || ((x === null || x === undefined) && (y === null || y === undefined))) と書かないといけないし。 実際のところは if(x === y || (x == null && y == null)) という感じでもちゃんと動くのかな? どちらにせよ面倒で嫌だ。
>>59 x, y が同時に null, undefined の時を判定したいの?
x だけが null, undefined の時はスルー?
>>59 x, y に期待する型がない?
例えば、x, y が同時に Number 型でない場合を期待するなら
if (typeof x !== 'number' && typeof y !== 'number')
>>61 例えばだけど、xとyには"文字列"/null/undefinedが入っている。
なので、===を使わずに==で書いても全然問題ないんだが、
万が一数値などが紛れ込んでしまって
x == 0, y == " "
みたいになったときに一致させたくない
その例だと if (typeof x !== 'String' && x !== null && x !== undefined) で例外投げるべきじゃね?
>>63 横やり失礼。数値と文字列とnullとundefinedが混在する場合にはどうすればいいかな
>>63 例外を投げるのと、===を使うのとは別の話だと思う
その関数内で、比較のたびにその例外のコードを書くのはナンセンスだけど
関数の先頭で例外を飛ばしたから比較は==でいいかというと、そうではない
1:仕様で決まっているのは()で明示的に呼び出すときだけ コールバックのthisが何であるかは暗記もの 2:JavaScript1.0で規定、HTML5で再定義 IE9がDOM-Eventsをサポートした以上はどう考えてもいらない子
HTML5が勧告されるまで標準仕様上は、先行実装状態?
>>59 メイン処理が文字列なら
引数がundefinedかnullのときにさっさとデフォルト値でも入れろ
undefinedかnullのときに特別処理をするのなら
冒頭でチェックする必要なんかない
順番にString-String、undefined-nullのように分岐して
最後まで引っかからなかったら例外でも投げろ
追記 ソートさえしなければページングなども追加したテーブルで正常に動きます。
>>69 だから、例外を投げるのと===を使うというのを同一視するなよ
引数に文字列が入っていることが確実なら==を使ってもいい、という話じゃないだろ?
JSLintでは、===を使わなかった場合に警告を出すよね 作者も常に===を使うべき、と言っているし if(x === y || (x == null && y == null)) が一番わかりやすいが、 これでもJSLintは警告を出す(==を使っているから) if(x === y || ((x === undefined || x === null) && (y === undefined || y == null))) こう書くしかないのかな。
>>62 を読むと null, undefined を厳密比較するのが目的ではなく、実際の処理で必要ない値を例外にしたいように読めるけど
>>59 とは別の人?
「処理を変えずに短く書きたい」だと工夫しようがないと思うよ
目的やその後の処理次第で最善の方法は変わる
=== を使うってことは「型まで厳密に調べます」ってことなんだから、 typeofでもなんでも使いまくってチェックするようなコードに当然なる。 「厳密に調べたいけど簡単なコードにしたい」って、そりゃ矛盾してる。
===を使うのは不用意な型変換によるバグを防ぐためのものなのに いつの間にか==を使わないことが目的になるという本末転倒 undefinedでも、プロパティ値がundefinedであるのと プロパティを持たない (p in obj) で意味が違うしな
>>77 imgタグのalt=""と同じようなもので、lintを通すための書き方になるんだよな
でもlintで警告を消したい気持ちもよくわかる
>>76 JavaScript 1.2なら==で型変換しない
時代が一周したな
>>78 imgの@altはDTDに対して型妥当、つまり正しいインスタンスであるかのチェックなので
作法として使うべきかどうかとは別の話
>>80 JSLintだって、withなどの危険な構文を使用していないことのチェックだぜ
質問です。 JavaScriptを外部ファイルにしている場合、スクリプト内で 自身の外部ファイルのパスを取得する方法はあるのでしょうか? getElementsByTagName("script") で取ってsrcを調べる時に、 それが厳密に「自分自身のパス」であるかどうかを調べるのに、 スクリプト内にパスを決め打ちで書くしかないのかどうかってことです。
ここまで
>>63 への突っ込みなし
'String' とか null でない時に例外投げてどうするのとかw
>>81 SGML/XMLのValidatorに通らないというのは、
文書型・要素型というクラスと照合した時に
データの中に妥当でないインスタンスが混じっているという意味なのであって
つまり型あり言語におけるTypeErrorと同義だ
with自体は構文違反でも何でもない
>>62 まだいるのならその後の処理で必要な型を示してくれ
文字列処理なら文字列型以外を例外にすればいいだけ
null や undefined に限定して考えるから数値が来た場合に困るんだよ
次は true が来た場合にどうするんだ、ってことになる
>>84 整形式違反はSyntaxError
妥当性違反はTypeError
と同じなんだよね
プログラムの作法を語る人の書くHTMLで信頼度も測れる
とJSLintのサイトを見たら、ひどかったw
>>82 どうせ@deferを書いちゃいないだろうから
外部スクリプトのトップレベルでdocument.scripts[document.scripts.length-1].srcを見れば
そのスクリプトのURIだ
コールバックという意味がwikiとか見てもよくわかりません javascriptでコールバックを活用したプログラムの例を一つ教えてもらいたいです
>>88 onclick
example:
var div = document.createElement("div");
div.style.backgroundColor = "red";
div.style.width = "100";
div.style.height = "100";
document.body.appendChild(div);
var callback = function() {
alert("ボタンが押されたらcallbackされる関数");
};
div.onclick = callback;
>>88 [0, 1, 2, 3].forEach(callback, this);
obj.watch('prop', callback);
document.addEventListener('click', callback, false);
document.createTreeWalker(document, 1, callback, false);
document.setUserData('my-data', { foo: 'bar' }, callback);
これらのコールバックのthisを全部当てたらほめてやる
if (!a) { } JSLintってこれだとエラーがでないのが不思議
92 :
忍法帖【Lv=4,xxxP】 :2011/05/30(月) 03:41:37.52 ID:JiDZOoOn
>87 なるほど。 対象のスクリプトはどうせ同サーバなんで@defer書く意味はほぼないですし、 その方向で調べてみます。ありがとうございました。
Javascript使うまでも無いのかもしれませんが 対象のiframeの中を更新するにはどうしたらいいのでしょうか?
iframeのlocationでreload()
ありがとうございます!
>>91 それだけならエラー出るよ
再現しないコードを貼る人が多くて困る
>>97 ==の曖昧なチェックはNGなのに!aはOKなのって不思議じゃない?
>>98 そこは勝手に補完しろよ別に質問なわけじゃないんだから
>>97 型に厳密ではないからじゃねえの
ま、どうせ暗黙の型変換がはしる文脈なら利用した方が
明示的に型変換しておくより速い場合もあるけどな
引き合いに出して悪いが
>>89 なんかCSSのエラー補正まで走らせてるんだぜ
それに比べりゃかわいいもんだ
location.hashがクロスブラウザで動かすにはハッシュをencodeURIComponentしてれば大丈夫でしょうか?
encodeURIComponent(location.hash) にしたら バグのある Firefox 以外は二重エンコードされると思うよ
>>101 いったんdecodeしてからもっかいencodeしる
os/ブラウザ WinXpSP3 Chrome11 HTMLTableRowElement等で高さの変更はできないのでしょうか? 表の中の特定行だけ高さを変えたいのですがググっても分かりませんでした。 <table onclick="this.childNodes[0].childNodes[0].style.height=0"…みたいにしたいです。
!は論理演算子。最初から「何でも」受け取って「ブール」を返すものなんだから、 何を渡そうと文句を言うわきゃない。 これに文句を言うとなると、同じ論理演算子、たとえば論理和で var b = ture; var n = 3; if (b || n){} /* "||" 演算子が別の型(boolとnumber)を受け取ってる! */ なんてものをチェックしなきゃならん。アホくさい。
>>104 デコード後の文字列に%が含まれてたらFirefoxで化けるんじゃない
matchとかsplitで取った方が
ハッシュに#が含まれてたらどうするの?
>>105 event.currentTarget.tBodies[0].rows[0].style.height
>>106 論点はそこじゃない
===での型厳密比較を推奨するのなら
!""=>true, !0=>true, !NaN=>true, !undefined=>true, !null=>true
↑のような型変換規則を暗記しなきゃいけないブール値変換そのものにも
注意を出さないと一貫性に欠ける、て話じゃないの
俺もこれぐらい普通に暗記しろとは思うよ
>>107 それは前段階で多重エスケープされているというマヌケな仕様のせいなので無視
サニタイズ脳の被害者に多い
>>108 別に何てことないけど
>>110 だからその理屈はおかしいって話じゃないの
! で Boolean 型に型変換されるのは明らか
これが認められないなら if 文でさえ使えないよ?
URIの規定上はフラグメント識別子に # 含まれてても問題は無いんじゃない
>>111 文字列中に % が登場する=多重エスケープ と片づけるのはどうかと思うけど
>>112 その通り、同意するよ
だから俺もJSLintのアレは好きじゃないんだ
>>113 URIComponentとして渡された時点で、適切にpercent encodingされているべきだろ
それをdecodeしたときに出てくる%はデータの一部であり、percent encodingではない
これが大前提だ
もしdecodeして出てくる%がさらにpercent encodingの一部であるなら
多重エスケープ以外にありえない
しかし、こちらは何回decodeすれば正しいデータが出てくるのか分からない
そんなデータは無視しなければ危険だろ
116 :
107 :2011/05/30(月) 19:50:05.04 ID:???
ごめんPHPと混同してた splitじゃあかんね
>>115 location.hash を参照したときに Firefox だけ、デコード後の文字列が返される問題について だと思うけど
encodeURIComponent(decodeURIComponent(location.hash)) だと
%DD が含まれていたら、やっぱり Firefox では違う結果になってしまう
119 :
107 :2011/05/30(月) 20:06:19.83 ID:???
>>117 じゃあ正しいURIならsplitでも問題ないのか
たびたびすまん
このスレ的にはどうやってハッシュを取るのが一番なのですか?
var fragment = /(#.+)$/.exec(location.href)[1];でFA?
122 :
105 :2011/05/30(月) 20:40:08.57 ID:???
>>109 レスありがとうございます。本当は行を隠そうと思ったのですが両方動きました。
以下のようなケースではstyle.heightの部分は0には設定できないのは仕様でしょうか?
<table border=1 onclick="event.currentTarget.tBodies[0].rows[0].style.height=100"><tr><td>a</td><td>b</td></tr></table>
<table border=1 onclick="this.childNodes[0].childNodes[0].style.height=100"><tr><td>a</td><td>b</td></tr></table>
location.hrefってバグがあるらしいからwindow.location.hrefで書けって言われたけどバグって何?
>>122 そのコードの100を0に替えたら普通に設定されたけど
見た目の話をしてる? ならスレチ
スレチだけど単位は0以外のときは必須だよ
XHTMLだとtbody要素が無かったりするから、Element.rows[0].style.heightを使った方がいいかもしれない
126 :
105 :2011/05/30(月) 21:34:55.19 ID:???
>>124 スレチなのに教えてくださり有難うございます。
見た目0にならないのは違うかもしれないけどHTMLの仕様と思っておきます。失礼しました。
>>119 確かに RFC3986 規定通りの URI なら location.href.split('#')[1] でハッシュがとれるので URI を管理できるのならそれでもいいかもですね。
実際には規定に準拠した URI ばかりではないです。不特定の URI を相手取るなら # 以降のすべての文字をハッシュ値とする実装が妥当だと思います。
128 :
105 :2011/05/30(月) 21:44:08.19 ID:???
>>125 申し訳ないです。。ググってみるとローカルのファイルでもアップロードできるんですね。
気をつけます。今度こそ失礼・・
ユーザーが適当にURIに#をつけてくるケースもあるから
<script language="JavaScript"> var h=$PL[70];var timerID; function () { var dt = new Date(); dt = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate()+1); h = $DATE + dt; } </script> $PL[70]というPerlで定められた変数の中に1日が終わるまでの秒数を代入したいです こんな感じで作ってみたのですが動作しません;; どこをなおせばいいでしょうか?
JavaScriptはサーバサイドじゃないぞ。ページがブラウザとかに読み込まれないと動かない。 Perlでその数値を使いたいならPerl側で計算しないと。
>>130 text/htmlでそのコードを文字列として吐きなよ
当然変数の部分は文字列で使えるように処理してね
133 :
130 :2011/05/31(火) 01:03:06.94 ID:???
1度クリックすると翌日までクリックできないボタンを作ろうとしてます それで、FORMで値を受け取ったときに同時に$PL[70]の中に12時になるまでの 残り秒数を代入したいです ブラウザには読み込まれるので計算してくれるとは思うのですが・・・
クッキーでいいんじゃね? どうせそんな作りこんでも対策なんて完璧な不可能なんだし
日本語がおかしかったが察してくれ・・・
var hoge = 'けちょんてちょん'; "フリーザ、貴様は ' このベジータ様が hoge に ' 倒す!" とここにhogeを入れたいのですが、どーにも上手くいきません どのように記述したらよいのでしょうか?
"フリーザ、貴様は ' このベジータ様が hoge に ' 倒す!" 表記→フリーザ、貴様は ' このベジータ様がhogeに ' 倒す! "フリーザ、貴様は ' このベジータ様が "+hoge+" に ' 倒す!" 表記→フリーザ、貴様は ' このベジーた様がけちょんけちょんに ' 倒す!
ありがとうございます 解決しました、感謝ですー
d
>>130 大方cgiゲームってとこだろ
var timeID:
がいらない
それで動く
$("aaa").test(); jqueryみたいに↑みたいな形で動くコードってどうかくのでしょうか? ↑のコードでaaaという文字列をalertしたいのです
String.prototype.test = function() { alert(this); }; function $(str) { return str; } $("aaa").test();
String.prototype.test Stringが型 prototypeはおまじない testがメソッド function $(str) $が値を受け取る為の専用メソッド っていう風に認識してよいでしょうか?
$("aaa").test().test().test().test(); こんな風に続けていきたいなら違った回答になるが。 $ = function (str) { return this;} $.prototype.test = function(){ return this; };
>String.prototype.test Stringオブジェクトのプロトタイプベースでの拡張方法 クラスベース(Javaとか)はStringをスーパークラスとして継承するが プロトタイプベースはこのように後から取ってくっつけたような記法が可能 >function $(str) 多くのフレームワークでは var $ = document.getElementById; という感じにdocument.getElementByIdのショートカットになっている
文字通りの意味でなら var $ = function(s) { return { str : s, test : function(){ alert(this.str); } }; }; $("aaa").test(); これでも要求通りに動く。ただし汎用性はあまりない。 JavaScriptにはメソッドの実装方法が複数あるけど、 ここで実例挙げて聞いても直接の参考にはならんと思うよ。 ここで聞いて参考になるのはブラウザ仕様とかだね。 JavaScriptの基本的な組み方は自分で勉強するしか。
147 :
Name_Not_Found :2011/06/01(水) 14:42:03.46 ID:drK/+zi/
循環参照ってわざとやる場合、 具体的にどんな使い道がありますか? ある程度ggりましたが分かりません 教えてください
・単純な例 時計の秒針が1秒ずつずれている画像60枚があって、 1秒ごとに次の画像を表示することで、秒針が回っているように見せるとする。 データの構造が、0秒の画像の次は1秒の画像、1の次は2、2の次は3を指していて、 最後の59の次が0を指すようになっていれば、 プログラム側では「1秒ごとに"次"を表示する」で済む。 ・DOMとかでよくある例 データ構造に親子関係がある場合、親は当然、自分の子供に対する参照を持つから、 親を対象にデータをいじってる時に子供を操作するのは簡単。 逆に、子供をいじっていて、その子供の親を操作したくなった時に、 子供が親への参照を持っていないと、親がどれなのか、 プログラマが保存しとくなり毎回調べるなりする必要がある。 子供が親に対する参照を持っていれば、子供から親がすぐ分かる。
そういう意味か スクリプトエンジンとDOMエンジンの循環参照のことだと思ってた
150 :
Name_Not_Found :2011/06/01(水) 20:02:22.15 ID:Ep16l2so
>>149 そういうのもあるよ
以前のSafari(3か2くらい)が実際そうだった
循環参照はガベージコレクションの鬼門だから 迂闊に近寄らない方がいい
>>151 >>149 のように異なるエンジンを挟む場合限定と思っていいかな
同一エンジン内の循環参照はガベージコレクションが面倒を見てくれると思ってた
原書のサイ6版は今年の3月に出ているけれど、翻訳されたのが出るはいつ頃だろうか?
>>154 ありがとう
C++を読めない俺は半分も理解できなかったけど解決していない問題が異種環境間GCという結論はわかった
異種環境間GCでなければ問題なさそうだね
>>155 もともとはXPCOMという同環境内でも巡回参照でリークが起きていたという話
>>156 そうだったのか…
同環境でも安心できないんだな、ありがとう
書いた奴が無知だから
>>158 初心者は eval で型変換する間違いを犯すから
フォームでevalとかマジでありえんですわ
eval('document.'+FormNameTemp+';')て感動したわ 頭の柔らかい人間っているんだなー 配列をfor-inで回すとかtoGMTStringとか「やってはいけない」の宝庫だから そこに書いてあることをやらないようにすれば、逆に力つくんじゃね
5年〜6年位前はそんな感じのスクリプトばっかりだったな。
そうかなあ 10年前でもまともなのはまともだったよ とほほコピペの功罪の罪の部分は、やっぱ大きいと思う
この場合はeval()で合ってるよ eval('document.'+FormNameTemp+';'); こうしないとフォーム取得できないでしょ document.forms[FormNameTemp]; こっち規格外でしょ?
>>167 /V\ ・・・
/◎;;;,;,,,,ヽ document.FormNameも規格外でしょ?というのはおいといて
_ ム::::(,,゚Д゚)::| なんでdocument[FormNameTemp]にしないの
ヽツ.(ノ:::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
id付けるなりすりゃいいだろ。 evalを使わない取り方なんていくらでもある。
Javascript始めたばかりで何が出来るかを聞きたいのですが 例えば画面上にストップウォッチがあって、記録ボタンをクリックするたびにクッキーにクリックした時刻を追加し それと同時に<div>〜</div>で囲まれたところ保存されたクッキーを表示 なんてことできますか? CGIとかだとF5とかで画面全体を更新しないとクッキー表示の更新できませんが
onclickする度にcookie保存→cookieを呼び出しの順番でDOM操作で表示すりゃできる。 更にAjaxならクッキー所か<div>〜</div>で囲まれたところ「だけ」をサーバーと通信して更新する事もできるんだな。 javascriptは極めると自分の世界を作る魔法使いになれるよw
>>170 できます。
CGIもF5もAjaxもいらんでしょうそれ
なんてこった俺は魔法使いだったのか
>>167 document.forms[FormNameTemp]は由緒正しいDOM-HTMLだが
あーだからか
フォーム操作にgetElementByIdだのgetElementsByNameだの
余計なのを使うのがちらほらいるなーと思ってたんだ
フォームのフィールド名はフォーム単位だから <form id="A"><input name="n"></form> <form id="B"><input name="n"></form> document.forms["A"].elements["n"]とdocument.forms["B"].elements["n"]は違う ところがdocument.getElementsByName("n")なんぞで一緒くたにする奴が意外に多い しかも<meta name="n">とか<param name="n">とかも拾ってしまうが、分かってんだろうか 一方で<input id="n1">みたいにいちいちIDを振る奴がいる labelを使いたいわけでもなく、nameの代わりだと勘違いしているらしい フォーム内スコープのnameに対し、IDは言わばグローバル変数をまき散らすようなもん そもそもnameがなければ送信対象にならないぞ、と
>>167 document.forms は HTML5 にあると何度いえば...
name は唯一を保証できないから id つけて getElementById を推奨するけどね
name にまつわる旧来からの参照法はいくつかのブラウザで実装してないパターンがあるし、今更使う意味もないと思う
>>175 form@name もグローバル汚すこと知らないの?
送信前の検査程度の極小スクリプトなんて、 よほど外道なことしてなければ、実装方法なんてどうでもいい。 JavaScript前提のAjaxとかなら、起動時に自分でフォーム組み立てて appendChildしてしまえば、個々のフォームにidもnameもいらん。 ついでに、ブラウザのJavaScriptがoffのくせに「動きません」なんて 問い合わせしてくる奴も防止できるw
>>175 form/@nameはform/@idと同じ名前空間であり
後方互換性で残されているだけだなんてHTMLの基礎知識だろ
そんな話をした覚えはない
入力フィールドの@nameはそれとは違うと言っている
>>178 カスだな
Ajaxなんぞなくてもformに@idなんかいらん
>>179 「<form>には」idが普通なら必要。
普通でない作り方してる奴は知らん。
とりあえず、カスがいるとすれば、このスレ的にはまずお前が第一だよ。
181 :
177 :2011/06/02(木) 12:04:51.76 ID:???
for var i in aみたいな書き方って5大最新ブラウザで使えますか? firefoxしか対応してない系ですか?
自分で試せばわかること
185 :
184 :2011/06/02(木) 14:30:34.47 ID:???
自己解決しました
自己解決したコード貼ってきなよ
いやです
つまり自分で試して分かったからここに書く必要ないって事ですね
教えてもらうのはいいけど 教えてあげるのは嫌やでぇーという事ですね
あきらめました(=他でなんとかします)ってオチだったりしてなw
<div> hoge </div> の部分にinnerHTMLをするとhogeの部分は消えてしまいますが 消さずにinnerHTMLで追加するような事はできますか?
>>187 じゃあ最初から書き込むな、検索の邪魔、リソースのムダ
>>191 できます
他のdivを用意してidふって、そこにinnerHTMLでおk
<div>
hoge
</div>
<duv id="fuga">
</div>
以下JS
document.getElementById('fuga').innerHTML = 'ふがふが';
>>194 文字を繋げたいなら<p>や<span>でもいいし
>>192 みたいに連結してもいいよ
duvは間違え。divです。念のため
>>195 なるほどー
このスレって親切な人多いですね、ちょっと感動しました
確かにそうだな
定期的に現れる煽り厨房だからスルー推奨です
>>1 (1) 質問にならない投稿はご遠慮ください
オブジェクトについて質問です var test = new Object(); test.one = "iti"; window.alert(test.one); これで「iti」という結果が出ます この場合のtest.oneの型は【オブジェクト.プロパティ】ですが 【オブジェクト.オブジェクト.プロパティ】は可能でしょうか? 上の例でもvar one = new Object(); と追加したところ、test.one.two = "ni"; と格納した後 アラートで試してみましたが何も表示されませんでした。 ご教授お願いします
200 :
Name_Not_Found :2011/06/02(木) 23:19:10.19 ID:XzNqn6Ve
window.focus(); alert('アラート'); というサンプルプログラムでwindow.focus();って消しても 問題ないみたいなんですが、window.focus();がよく分かりません window.focus();って何ですか?
>>199 test.one と one は別物。後は分かるな
203 :
Name_Not_Found :2011/06/02(木) 23:47:14.76 ID:XzNqn6Ve
>>200 window.focus();はいらないってことでいいですか?
204 :
Name_Not_Found :2011/06/02(木) 23:48:18.90 ID:XzNqn6Ve
まあタブとAjaxな時代の今ではあんまりいらない
・・・のかな?
>>201 >// 既にフォーカスされているので特に何も起こりません
どんなサンプルだw
>>199 alertのダイアログ自体が表示されないのであればエラーで止まってるわけで
まずはエラーの確認の仕方をググって調べよう
var test = new Object();
test.one = new Object();
test.one.two = "ni";
alert(test.one.two);
207 :
Name_Not_Found :2011/06/03(金) 14:57:08.97 ID:hl1USVBO
以前中高生向けに教えたときは 式とかで説明してもあんまり伝わらなかったけど リテラルでインデントして書いて見せたら一発だったな、こう var test = { one : { two : "ni" } };
new Objectなんて書く人って珍しいな いまどき{}じゃないのか
>>199 じゃないけど
それ呼び出す時test["one"]["two"]でniが表示されるでいいんだよね?
すみません・・・、配列とオブジェクトのプロパティ勘違いしてました・・・。
var testにjsonを代入して test.aで"こんにちは" test.bで"こんばんは"って表示できるようにしたいのですが var test = [ { "a":"こんにちは", "b":"こんばんは" }] alert(test.a); っとやっても出来ませんでした たすけてください
212 :
Name_Not_Found :2011/06/03(金) 15:08:51.32 ID:hl1USVBO
thickboxを使用して子ウインドを作成しています。 子ウインドからPOSTでサーバにデータを送信後に、子を閉じて 親のウインドを1度リロードしたいのですがどのようにすればよいですか? POSTされたデータはDB操作を行い、操作後に親のウインドをリロードする必要があります。 Javaサーブレットを使用しているのでdoPost()関数内で上記のこと行うことは可能でしょうか?
またきみか
初心者なんですが document.cookie = 'example=value1;';←1としておく document.cookie = 'example=value2;';←2としておく .. ↑のようなモノをX秒後に1から2へ、またX秒後に2から〜へ‥という風にcookieをセットして、 最後まで行ったらまた1へ戻って繰り返すようなモノが作りたいんですが、どのようにすればいいですか? ちなみにvalueの数字はバラバラです。 ブックマークレットで作成可能ですか?
配列とsetIntervalで作れるでしょう ブックマークレット余裕です
save, load処理を行うゲームを、何かしらのscriptで作ろうとしています; >別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です と、テンプレにありますがjavascriptでは、ローカルで保存してあるjavascriptファイルを実行し、 同じくローカルに保存してあるファイルを読み書きすることも不可能でしょうか?
なぜ試さない
試してみて以下の点は分かったつもりでいます。 ・読み込みだけならばできそう ・activXを使えば読み書き共に可能 ただ、activXは可能ならば避けた上で読み書き共に行いたいため質問しました。 言葉足らずで申し訳ありません。
アクティーフX
情報は小出しにするなよ。 Cookieやlocalstorageじゃダメなのか?ブラウザ毎に固定になるけど。 鯖を通さない保存もできるらしいけど(flashのASとか。詳しくはぐぐって)、 ユーザーがクリックや保存場所の指定をする必要があるから、(セキュリティ的には当然だけど。) それなら復活の呪文形式(コピペ)でいいじゃん。
>>199 関連だけどvalueOfとかtoStringとかいじればC++の型キャストオーバーロードみたいなことができるんだ
初めて知った
>>220 読み書き時にファイルの開く・保存ウインドウが出てもいいなら
不可能ではない
DOM RangeにtoStringがわざわざ定義されてるのもそのせい WebIDLならstringifierで片付けられるが
javascriptでweb目覚ましってつくれますか??
はい
while(1)alert("起きろ");
>>228 こんな感じで組んでみたんですが・・・
途中で無限ループによりブラウザが落ちます。
助言いただけたらありがたいです。
function mestart(){
supervisor = prompt("時間を入力してください(半角英数字24時間表記)");
supervisor2 = prompt("分を入力してください");
mezamasi();
}
function mezamasi(){
a=now.getHours();
b=now.getMinutes();
if(a == supervisor && b == supervisor2){
sound2Play();
}
else{
setInterval("mezamasi()",1000);
}
}
timeout
timeridをオーバーフローさせた奴は手をあげろ
ノ
setTimeoutで入力した時間を指定すると・・・多分時間がズレるんだろうな
236 :
Name_Not_Found :2011/06/04(土) 02:56:35.77 ID:zTFEClr0
不可能
firefox拡張
画像とかも出来ないのかな? ○○.jpgとかってURLだったら何か方法ありそうな気がするけど
何でJSONPなんてしょうもない方法ができたか考えろ
>>231 デッチあげてみた。目覚ましの30秒前にループ開始して1秒ごとにチェックする、つもり。
実際その通りに動くかは知らん。
function mestart() {
supervisor = prompt("時間を入力してください(半角英数字24時間表記)");
supervisor2 = prompt("分を入力してください");
var t = new Date();
var nsec = t.getTime();
t.setHours(supervisor); t.setMinutes(supervisor2); t.setSeconds(0); t.setMilliseconds(0);
var tsec = time.getTime();
if (tsec < nsec) { t.setTime(tsec + 24 * 60 * 60 * 1000); tsec = time.getTime(); }
var mezamasi = make_mezamasi(tsec); var n = tsec - nsec - 30 * 1000;
setTimeout(mezamasi, (n < 0) ? 0 : n);
}
function make_mezamasi(tsec) {
return function() {
var timeid;
var loop_mezamasi = function() {
var t = new Date();
if (t.getTime() < tsec){ return; }
clearInterval(timeid); sound2Play();
};
timeid = setInterval(loop_mezamasi, 1000);
}
}
jqueryを含むjavascriptのライブラリから外部サイトのRSSを取得するのってできないのですか?
できるけどクロスドメイン通信について調べたら幸せになれるかも
jsonpを使わないでRSSを取得できるんですか?
クロスドメイン通信がjsonpのことだろ
外部のRSSを取得する事はできないってことですね?
そのRSSの配信形態によるんじゃない
・まずPerlとかPHPとかのサーバサイドスクリプトの使用できるサーバを用意します ・次にRSSを取得してJSONP形式で返すサーバサイドスクリプトを作成します ・最後にJavaScriptからそのサーバサイドスクリプトにアクセスして取得します これが現実的
サーバーサイドを使わずjavascriptだけでは取れないってことでいいんですね?
いいですよ RSSの定義を誇大解釈すればJSONPにまで及ぶので (ニュースやブログなど各種のウェブサイトの更新情報を簡単にまとめ、配信するための幾つかの文書フォーマットの総称) JSONP形式で初めから配布してるところならJavaScriptだけで取れると言ってもいいと思うけど 一般的なtext/xmlのRSSでは無理ですね
無理ですよねありがとうございました
自分だけでやりたきゃオプションでチェック外せよ そういうサービスやりたきゃ、そもそもJSなきゃ動かないアホシステムにすんな
誰にレスしてんだ
254 :
236 :2011/06/04(土) 14:07:34.60 ID:???
外部サイトがJSONP等を利用していない限りは不可能なんですね。 クロスドメイン通信という単語を知ることが出来たので勉強になりました! ありがとうございました。
256 :
236 :2011/06/04(土) 14:58:32.13 ID:???
>>255 なるほど、とてもわかりやすいソースでした!
ありがとうございます!
今回は公開型のWebサービスではないため、
ユーザーがテキストボックスに内容をコピーする形にして、テキスト解析を行う形にします。
RSSならGoogleのAjaxなんたらAPI使えばJSONPでとれないっけ
258 :
Perl忍者 ◆M5ZWRnXOj6 :2011/06/04(土) 16:48:01.25 ID:jgj52i6S
おまえらまだこんなことやってんだね かわいそう、グズっていうか終わってるね Javascript(笑)ださいね まじださいよ まじで 終わってる 早く死ねばいいんじゃないんですかね??? Javascriptでベンチャーとかまじそういうやつ沸いてそうだね ごみみたいなハテナにつづってるやつ ああああ、いっちゃった 本当のことをいっちゃったよ君たち まだAJAXとかJAVASCRIPTってわめいてんだね
(´;ω;`)
面白い人だなー JavascriptとかAJAXとかJAVASCRIPTとか どれだけ突っ込みどころを作れば気がすむんだろう
変換くらいしっかりやれよ
5.003ぐらいから手をつけて、5.8になる頃には使わなくなったなー。 嫌いじゃないが、使う理由がないっていうw 独占市場抱えてる言語とは立場が違いすぎ。
忍者に反応するやつは忍者以上にあわれだわ
自演じゃないんですか?
つづき b.htmlの中の<div id="test">〜</div>のid属性の属性値(ここでは仮にtest)を取得したいのですが 属性値を取得する仕組みは出来ているのですが、肝心のフレームにアクセスする方法が分かりません どなたかご教示お願いします
米Yahooにxml→json変換サービスがあったような
至急そのサービス名を教えてください
>>270 Yahoo!Pipes
pipes.yahoo.com
idがtableのテーブルに新しい列を追加するときですが、 var table = document.getElementById('table'); var col = document.createElement('tr'); var value1 = document.createElement('td'); var value2 = document.createElement('td'); var value3 = document.createElement('td'); var value4 = document.createElement('td'); var value5 = document.createElement('td'); value1.innerHTML = 'a'; value2.innerHTML = 'b'; value3.innerHTML = 'c'; value4.innerHTML = 'd'; value5.innerHTML = 'e'; col.appendChild(value1); col.appendChild(value2); col.appendChild(value3); col.appendChild(value4); col.appendChild(value5); table.appendChild(col); こんなひどそうな感じになったのですが、これでいいんでしょうか?
せめてループで回すとかcloneNode使うとかしろよ
>>273 <tbody> も作って配列をループさせる
>>273 お前にinsertRowとinsertCellを与えよう
大事に使うのじゃぞ
277 :
273 :2011/06/04(土) 22:26:00.84 ID:???
レスどうもありがとうございます。 ちょっと知らないことが出てきて困っているので、 また色々試して後できます。
278 :
273 :2011/06/04(土) 22:38:33.41 ID:???
var table = document.getElementById('table'); var raw = table.insertRow(-1); raw.insertCell(-1).value = 'a'; raw.insertCell(-1).value = 'b'; raw.insertCell(-1).value = 'c'; raw.insertCell(-1).value = 'd'; raw.insertCell(-1).value = 'e'; こんな感じになりました。 だいぶスッキリした気がします。 どうもありがとうgざいました。
>>278 6回リフローが発生するからcloneNode方式がいい気がする
280 :
273 :2011/06/04(土) 23:11:18.53 ID:???
cloneNodeがよくわからなかったのでこんな感じになってしまいました。 var table = document.getElementById('table'); var raw; if (!table.childNodes.length) { raw = table.insertRow(-1); raw.insertCell(-1).value = 'a'; raw.insertCell(-1).value = 'b'; raw.insertCell(-1).value = 'c'; raw.insertCell(-1).value = 'd'; raw.insertCell(-1).value = 'e'; } else { raw = table.appendChild(table.childNodes[0].cloneNode(true)); raw.childNodes[0].childNodes[0].innerHTML = 'a'; raw.childNodes[0].childNodes[1].innerHTML = 'b'; raw.childNodes[0].childNodes[2].innerHTML = 'c'; raw.childNodes[0].childNodes[3].innerHTML = 'd'; raw.childNodes[0].childNodes[4].innerHTML = 'e'; } 馬鹿な子でごめんなさい(´・ω・`)
おまえらさああ おもしろいもん作ってみてよ つくれないんでしょ ほら どうせ劣化のもの 依存のアプリのぱくり つまんない やめれば? サイトとかつくってよろこんでるカスばっかりだし死ねば良い世マジでだわ なんかアマチンコロがjavascriptでテトリス!!とかよろこんでハテナに書いてたけどかすすぎてまじなえた javascriptでつくれるものが激しくつまらないからゲームいかだからね オンラインゲームつくってるやつらのほうが数1000億倍凄いと思う お前らまじぜんぜん凄くない ただのサイト飾る程度きえろ お前ら らない
いやだよもうLLのやつとかJavascriptのやつら死んでくれないかな? 消えてください はずかしい
トリップのない忍者は偽者
ほらつくれない どうせ、サイトでチカチカ点滅させたり Ajaxとかいってるそういうやつらばっかり クロスドメインとかそんなのばっかり 消えろJSONとか まじくだらない くだらない 本当にくだらないしつまらないし おもしろくもないし 寒い 消えろやめちまえ
いいこと言うじゃないか
義理も義務もないのに何故見ず知らずに人に作ってあげなきゃいかんのだ おまえは「おもしろいもん作ってみてよ」といわれたら無条件で作るのか?
こいつらさあ いつまで JSONとかエンコードとかファイル形式とかやってんの そろそろ統一すればいいじゃん 本当にそれの繰り返し 規約とかの ずっとそういうのやってるだけ まじつまらない 飽きる どうせつくれねーだろばーか アホくさコイツ286死ね どうせつくれねーだろクソハゲ消えろ まじつまんえー どうせチャットとかWEBサービスとかSNSだろてめえがつくれんの 見飽きたんだよボケカス
こいつらどいつもこいつも ハテナに技術ネタかきつづつってるだけのかすやろうばっかりwwwwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
マジプログラミングおわおん消えろ
うむ、続けろ
Perl忍者さん、どうか参考になるものを作ってください 期待してます!
なんかこいつらさああ 作らないやつが言うな ってほざいてるみたいだよね その程度の認識だよね まじれべるひくいね
一番えらいのは使う側のユーザーだから 勝手につくってみせてきたバカがわるいんだから 文句いっていいの当然
使ってやるからおまえが作れ
実にウェブ向きの意見で感動しました
>>293 > 勝手につくってみせてきたバカがわるいんだから
今はおまえが「作って見せろ」と
>>281 で誘導してるんだろうが
なんかよくわからない もういいよやめよう
助言いただきたく、書き込みました。無知な私にご教授いただけたら ありがたいです。以下の関数で読み込んでいる画像を先読みしたいの ですがうまくいかず・・・よろしくおねがいします。 function sh(){ x=Math.floor(Math.random()*10) y=Math.floor(Math.random()*10) z=Math.floor(Math.random()*10) a=Math.floor(Math.random()*10) b=Math.floor(Math.random()*10) c=Math.floor(Math.random()*10) d=Math.floor(Math.random()*10) document.aso.src= + x + ".jpg" document.hso.src= "cn.jpg" document.bso.src= + y + ".jpg" document.cso.src= + z + ".jpg" document.dso.src= + a + ".jpg" document.eso.src= + b + ".jpg" document.fso.src= + c + ".jpg" document.gso.src= + d + ".jpg" tID=setTimeout("sh()",30); }
後で別人と言い張るためにトリップをつけてないんだろうな 同一人物なのは丸わかりなわけだが
さよなら
new Image().src = 読ませるURL
消えて良いかな?
消えますよおおお?
さようなら
>>304 ばいばい
>>301 こんな感じでしょうか??
img=new Array();
img[]=new Image();
img0.src=0.jpg
||略
img11.src=ch.jpg
x=Math.floor(Math.random()*10)
document.hogehoge.src ="img" +x+".src"
>>305 function sh(images){
for(var i = 0; i < images.length; i++) {
new Images().src = images[i];
}
}
//
img = ["./bunsen11-hp.png", "./evliyacelebi11-hp.jpg", "./houdini11-hp.jpg", "./persiannewyear11-hp.jpg"];
sh(img);
ちょっと試してみてもエラーが出るので聞きたいのですが javascriptで<dl id=xxx>〜</dl>をidで取得した場合 その中にある<a>リンク、<dt>、文章とかも取得されるんでしょうか?
309 :
273 :2011/06/05(日) 01:47:56.83 ID:???
他の質問よろしくお願いします。 <p> <span id="test">aaaa</span> </p> ここでidがtestのところを全部削除したいのですが、 要素を削除する適当な関数とかがremoveChild以外に見つかりません。 var test = document.getElementById('test'); test.parentNode.removeChild(test); こういう感じに一度親までもどって子供を消すという手順でよろしいでしょうか? なんか無駄が多い気がしますが。
if (evt.which==3) return false で右クリックのコンテキストメニューを出さないようにしたいのですがOperaだとどうもうまくいきません 目的はワンクリックで進めていくゲームで特定の領域だけ右クリックを禁止状態にしたいです あと「このページによる追加のダイアログ表示を抑止する」みたいなやつも出したくないのですが (勢い余ってチェックいれてしまうとリロード=リセットしないときかなくなってしまうので) なんかこのへんの情報ありませんでしょうか?
<form action="
http:// " method="GET">
<input type='hidden' name='aaa' value=''値">
<input type="text" name="q">
<input type="submit" value=" 検索 " onclick="Search();" />
</form>
このようなフォームでSearch()内でaaa を除外するにはどうしたらいいでしょうか
function Search() { xxx.submit(); } やはりsubmitで削除は無理でしょうか
273氏 いいことを教えてやろう。 「プログラムが動いてるならそれ以上いじるな」 目的の動作をしているならそれでいい。何も不満などないだろう? より良い方法を追求するのはいいことだが、それは動作を理解した上で、 リファレンスを眺めて「あ、こんなメソッドあったんだ」と気付くように なってからの話。 そしてもちろん、リファレンスを眺めるなんて作業は、ここで質問する理由がない。
var a = [[1,2,3,4,,,,,9,,],[1,2,3,4,5,6,7,8,9,0,]]; この配列を文字通り文字列に変えるにはどうしたらいいでしょうか? toStringではなく、[]も全て文字列にしたいのですが(evalで使えるような形)、 そういう手頃な関数とかありますでしょうか?
hoge.toSourceとかuneval(hoge)とか
javascript: Array.prototype.toString = function() {return "["+this.join(",")+"]";}; alert([[1,2,3,4,,,,,9,,],[1,2,3,4,5,6,7,8,9,0,]]); よしよし、動いた動いた
318 :
315 :2011/06/05(日) 16:19:32.30 ID:???
>>315 JSON.stringify([[1,2,3,4,,,,,9,,],[1,2,3,4,5,6,7,8,9,0,]])
IE8だとtoSourceもunevalもJSONオブジェクトもナイ
>>317 がよさそう
>>317 わざわざprototypeに突っ込む理由ないだろw
せめて myArrayToString() とかなんとか適当な関数名にしてやれよ。
>>315 警告しとくが、そんな発想でプログラムしてると「文字列化しておいたデータを
evalで戻すとかキチ○イに刃物」と罵られることになるぞ。
データを丸ごと文字列化しておきたい・文字列化したものをデータに戻したいってのは
誰でも考える(必要になる)ことだから、ちゃんとライブラリもある。
「JSON使え」がまともな回答。
322 :
315 :2011/06/05(日) 16:45:03.55 ID:???
>>319 ありがとうございます。こっちはnullも入れてくれるんですね。
>>320 たしかにおっしゃるとおりでした。エラーでました。
>>321 どんな発想かわかりませんが、
機密情報を含むセーブデータで実際はさらに圧縮したものをcookieに入れることになります。
サーバにも保存してキャッシュになかったらapplication/jsonで取得するようにしますが。
このスレ的にはもう少しまともに教えてやるべきなんだろうが、 生温かく放置して大惨事になるところを観察したい俺がいるw
機密情報をcookieに入れるなwwww
>>322 機密情報なら尚更安全にパースする必要がある
>>317 は "hoge,foo" などが来た場合に適切にパース出来ない
>>310 preventDefaultじゃないの?
どちらにしろブラウザのオプションで簡単にブロックできるから設計を見直したほうが
>>320 JSONはあるよ
>>327 cookieに書き出すのはいいとして、ブラウザが「これcookieです」といって
渡してきたデータを無条件に「これ安全だよね」と信用できるなら
お前はその辺の新興宗教に洗脳される素養があるよ。
なんかずいぶん煽り気質のやつがいるね キチガイだの新興宗教に洗脳されるだの なんかリアルで嫌なことでもあったのか?
セッション管理でクッキー使った方が安全ならわかるが 普通にXSSでクッキー漏洩があるのに「安全」って何だろ
windowオブジェクトの拡張ってどうやるんですか? StringとかArrayの拡張はよく見るんですが、 window.prototype.hogeとかWindow.prototype.hogeとかやってみたけどIEでエラーが出ます。
いまどき専用鯖も持ってない雑魚はよくないですね。
俺はnew window();なんてコードは見たことないなぁ。 Elementのことか?
window.__proto__.hoge = 1; alert(hoge); __proto__ は持ってるみたいだね。
>>332 IE なら window.constructor でとれるけど、セキュリティ上の理由でprototype拡張は無理
338 :
332 :2011/06/05(日) 21:08:38.71 ID:???
>>335-337 IEで実装されてないいくつかの実装を拡張すればいいのにと思ってましたが、
セキュリティ↑の理由で無理なんですね。
どうもありがとうございました。
>>330 このスレに、evalでデータ戻すだのcookieに機密データだのという奴が来るのは仕方がない。
イヤなことがあるとすれば、それらに対してまともな回答のできない奴が
回答者気取りで刃物を渡してしまうことだな。
>>338 他ブラウザにあってIEにないwindowの機能、たとえばbtoaとかは
if (!window.btoa){ window.btoa = function(){/*実装*/}; }
とかで自分で用意できる。prototypeに入れようとする必要はない。
それだとフレームに対応できない、てことじゃねの
windowはグローバルとビューを兼ねてるからわかりづらい locationやdocumentやイベントリスナーはビューごとに必要だけど setTimeoutやbtoaはグローバルでいい こんなちぐはぐな仕様、何とかならなかったのかねえ
>>343 その手法が通るのは Firefox4 だけでは?
Window.prototype.hoge = 'hoge';
alert(hoge); // Fx4 は "hoge"
"Window" の名前が通るのも Fx だけかと。
>>342 globalにglobalStorageを置き
global.frames[0]、global.frames[1]がビュー集合
global.windowとglobal.documentが現在ビューと現在ドキュメント
こんな感じで良かったんじゃないかなあ
後方互換性を考えたとしてもglobal==windowである必要はなかったのに
W3C草案にタブがアクティブか調べるdocument.hiddenなんて出てたな
windowではなくdocumentに付けてるのが笑いどころ
あいつらもビューをどう扱ったらいいか分かんなくなってるっぽい
window.hiddenなんてもうけたら 今グローバルでvar hiddenしてるコードは全滅 だからdocumentにつけとく そのていどの理由じゃね と考えつつ、ビューでビュー制御できないってのもアホくせと思った
>>344 IE9のIE7モードだと駄目で、IE8モードだと動いたけど、実際のIE8じゃ駄目なんかな
あとFirefox3.6でも動いた
あーすると今度は<div id="hidden">がdocument.hiddenとぶつかるのか しったこっちゃないけど
>>347 あー、ごめんなさい。IE8 の検証時には数値代入してましたが、String型の値を代入したら IE8 でもいけました。
window.constructor.prototype.hoge = 'hoge';
hoge; // "hoge"
ただ、セキュリティ上の理由があったのは Constellation さんから聞いた話なので確かだと思います。
過去試したときにはフレームを跨いで「グローバル変数」を実体化させる挙動を狙っていて(>342で取り上げられたように全てのフレームで btoa を使えるようにする、みたいな)それがセキュリティ上の理由で出来ないって話だったかと。
つまり、window.constructor.prototype.hoge を定義することによってフレームを跨いで window.hoge を定義する動作は出来なかったと思います。
>>348 衝突する場合は既存のプロパティが優先される仕様なんじゃないですかね。
過去、以下のようなケースの質問者さんに出会ったことがあります。
/* グローバルコード */
var name = [1, 2, 3]; // String型にキャストされるんだけど何故?→答え、window.name を初期化してるから
衝突なら <form action="..."><input name="action">... form.actionでaction属性がとれないと泣いてたのもいたな form.getAttributeNode('action').valueで何とかなるが オブジェクトのプロパティとしてノード名をまき散らすの、あれ害悪でしかねー 既存プログラムの救済だかなんだか知らないが、何でHTML5に入れちゃったんだ ホント馬鹿じゃね
ちなみに当時IEだったから form.getAttribute('action')もinputの方を返すというトンデモ事態だった
>>350 HTML5でやってることって、半分が既存の文法の追認だから。
HTML4では文法的に好ましくないとされていた事ですら追認しちゃってるし
>>241 様
返信遅くなってしまい申し訳ありません。
いただいたソースコードで無事動作いたしました!ありがとうございます。
自分の知識と理解力が足りないためいまいちどのように動いているのかわか
らないのでよければ解説いただけたら幸いです。あつかましいお願いで申し
訳ありません。
特に複数の設定時間が指定できるあたりが・・・
>>352 とりたかったのはaction「属性」な
form.actionで「action属性」をとりたいのに
form.elements['action']へのショートカットで潰される仕様の
どこが相互運用性だよ
普通そういうのを相互運用性とは言わない、後方互換性
しかもたちの悪い種類の「互換」だ
>>356 ごめんなさい、読み間違えていました。
GC11, Fx4, Op11, IE8 で再現されることを確認しました。(form.attributes["action"] で対応できそうです)
http://jsfiddle.net/WMxRR/1/ この仕様は確かに変ですね。WHATWG にバグ報告していいレベルかも…。
初歩的な質問で申し訳ないのですが、以下のようにUL要素にstyleを指定しているのですが、LI要素がリスト表示されません。 どういったことが考えられるでしょうか。。 <li><a href="#" onclick="OpenClose('sub2');return false;">注意事項</a> <ul id="sub2" style="display: none; list-style-type: decimal;">
>>358 ソースが半端になってすみません。<ul 〜以下は以下のようになっていてリスト表示したい部分です。
<li>hoge1</li>
<li>hoge2</li>
display: none;
>>360 オンクリックで表示される文章をリスト表示にしたいと思ったのですが・・・。
テキストで「1.hoge1」と入力するしかないですかね(´・ェ・`)
362 :
Name_Not_Found :2011/06/06(月) 14:43:38.30 ID:ZVspiHxv
>>361 問題ない気がするが。
ちょっとコード上げてみてよ
>>361 1.hoge1
2.hoge2
↑のように表示したいんだよね?
今の状態ではどう表示されるの?
>>357 attributes["action"]という書き方は「ない」
>>363 今はクリックイベントで表示されると、
hoge1
hoge2
でリストの数字だけが付加されていない状態です。
>>352 HTML5はとっくにナンバリングがなくなってHTML Standardになってる
今後は定期的にバージョンアップするのでなく、継続的にアップデートされる
勧告を待っている奴にはご愁傷様だが、勧告に中間発表以上の意味はない
裏を返せば、訂正・修正は後でいくらでもやってくれということ
後で廃止するにせよ何にせよ、それを整理・検討したという記録は必要だ
RFC 4329のように、正式に廃止のステータスを与えるためだけに定義された
"text/javascript"の前例もある
当たり前のことなんだが
「HTML5に記載された」イコール「安心して使える」とはならない
使ったときにどうなるかが明記されたにすぎない
>>365 おおかたIEでも使ってるかmargin/paddingが狂ってんだろ
CSSバグ辞典をながめてから出直せ
>>365 その言い方だと、onclick と display: none; なしで普通に表示した場合は数字つくってこと?
ってことは、onclickで動作するJavaScriptの部分でstyleが変更されてるわけ?
ならJavaScript部分のコードも貼ってください
369 :
Name_Not_Found :2011/06/06(月) 19:31:25.32 ID:ZVspiHxv
>>365 ulじゃなくてolでした、ってオチじゃないだろうな
>>372 理解した、これ以上不毛なやりとりをするつもりはないので
attributes.item(i)をattributes[i]と省略できることはDOM参考規定にあるが
attributes.getNamedItem(name)をattributes[name]と省略できるとは書かれていいない
これはgetNamedItemNS()の存在から分かるように、名前空間の存在による
Web IDLではNamedNodeMapはなくなり、attributesはAttrの配列として定義される
当然、attributes[name]というアクセス方法もない(現時点では)
IEの独自拡張を他のブラウザが追随したもので、HTML5にすら未だ明記されていない
getElementsByTagName(name)が変わったように、後で変わる可能性がある
375 :
Name_Not_Found :2011/06/06(月) 23:09:46.15 ID:ZVdAQ6Nt
<button onclick="test(arguments)"> こういう要素をフレームに読みこませたときに IEだとargumentsが空になるのはどういう仕様なんですか?
376 :
Name_Not_Found :2011/06/06(月) 23:30:53.35 ID:4Pr3Jagq
なんかクロージャでどんなプログラムを作れるんですか? 適当なサンプルプログラムを教えてください(ゲームなど)
クロージャは使うべきではありません。
var count = (function () { var c = 1; return function () { return c++; } })(); count(); // 1 count(); // 2 count(); // 3 クロージャはこんなのだけど、クロージャ使わずにも同じものかけるから、すごいものではない。
an Event、そのままの意味だろ
>>380 それは何に使うんですか?
aEvtはこの引数に書いてるだけで
その後呼び出されてないようですがこれ必要なんですか?
>>381 イベントリスナーの書き方を覚えろ
あとmdcの日本語版はあまり参考にならん
>>383 なるほど
これはイベントリスナーなんですね
ということは
req.addEventListener('readystatechange', aEvt, false);
これと同義で
aEvtはここには書いてないけど
この下か上に書かれているといったところなんでしょうか?
385 :
Name_Not_Found :2011/06/07(火) 02:07:26.08 ID:iBr2GC1R
>>384 ちげえ
addEventListenerの第二引数はコールバックじゃん?
んで、そのコールバックが実行される際に引数にイベントオブジェクトが渡される
それを引き取ってるのがaEvtで、結果論として使ってないだけ
他にも、replaceとかでもコールバックの引数のところに
string.replace(/fuga(hoge|hage)/,function( $0,$1 ){
// ごにょごにょ
});
と勢い余って変数名を書いちゃうこともあろうて
386 :
385 :2011/06/07(火) 02:09:00.98 ID:iBr2GC1R
後半わかりづらかった 例え使う予定があってもなくても、来ると分かっているなら 引数の変数名は、書きたくなっちゃうよね ってことです
a:linkの@roleを上書きできるようになったのは2011/4/11草案の後
>>385 ありがとうございます
実はコールバックはあまり仕組みを理解していなかったり
これから勉強してきます
JQueryのページ内遷移とかタブ切り替えライブラリを利用するとき、 htmlの記述は href="#menu1"、href="#menu2" のように単純にアンカーにハッシュがついていて、 いざクリックするとそのライブラリで指定した動作はするけれども urlには #menu1、#menu2 などは追加されません。これはどうやっているのでしょうか? JQueryではなく自分でいろいろ試作しているときに location.hash = ""; location.href.replace(/#/$,''); などとしてみましたが、#が残ってしまいます。
>>389 event.preventDefault()
391 :
Name_Not_Found :2011/06/07(火) 12:39:40.62 ID:iBr2GC1R
単にevent.preventDefault()してるだけじゃないかと <a href="#hoeg"> querySelector("a[href=#hoge]").addEventListener("click",function(evt){ evt.preventDefault(); // これでa要素の動作はなかったことに },false);
ありがとうございました。
$xってどこで定義されてるんですか? ブラウザの実装?
394 :
Name_Not_Found :2011/06/07(火) 14:07:23.60 ID:jzg1ApoX
任意のページ(またはサイト)の画像を収集したい java scriptで上記のことはできますでしょうか。 任意のサイトの画像を収集しダウンロードする デスクトップ上で使うスタンドアローンの フリーソフトなどは多くあるのですが、 そうではなく、 web上で、任意のurlを入力して送信ボタンを押すと そのurlにある画像を全て収集し、表示させる、という サイトを作りたいです。 調べているのですが、なかなか見つかりません。。 そもそもphpとかの言語になるのでしょうか? java scriptでそういったことができますでしょうか? 出来るばあい、ざっくりとどのような コードやメソッドが必要になりますでしょうか。 ご存知の方いらっしゃいましたら、 何卒よろしくお願いいたします。 。
>>2 Q1
通常は別ドメインのサイトはアクセスできない。
>>255 作れたとしても特定のサイトに集中とかしたらブロックされそうだな。
>>394 javascript:(function(){var img=document.querySelectorAll('img');for(var i=0;i<img.length;i++){window.open(img[i].src);}})();
もしアクセスできるとしたら持ってきたソースからimgとりだすだけじゃん それくらいわかれよ
398 :
Name_Not_Found :2011/06/07(火) 15:41:39.16 ID:jzg1ApoX
>>396 ありがとうございます!!
1つ質問させてください。
document.querySelectorAllというメソッドは
IE8からの対応でIE7やFireFoxでは使えないのでしょうか?
試してみればいいじゃない。
どっちにしろそんな迷惑なコードは動かないだろ やるとしたら自分で言ってるようにサーバサイドでどうにかする必要がある
401 :
Name_Not_Found :2011/06/07(火) 17:47:03.46 ID:jzg1ApoX
>>399 はい、試してみます!
>>400 なるほど、phpとかperlですかね。
こちらもちょっと試してみます。
402 :
akiyan :2011/06/07(火) 18:28:59.20 ID:0SPLxjds
おまえらきめえwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
403 :
akiyan :2011/06/07(火) 18:29:52.73 ID:0SPLxjds
マジ呼吸すんなってwwwwwwwww あ?俺の顔面みてないやつまじ土下座しろ わかった?早くakiyanでぐぐって顔面みて土下座しろよ わかったな 不細工率のおおいIT業界じゃイケメン重宝 俺重宝!ヘイヘイヘイ!!!
404 :
Name_Not_Found :2011/06/07(火) 18:33:00.25 ID:0SPLxjds
ってakiyanに書き込めって命令されました
とあるフィールドのonKeyPressイベントで event.keyCode===13?funcHoge():void(0); とコーディングしてあるのですが、このvoid(0)の使い方はありなんですか? 要は if(event.keyCode===13)[ funcHoge(); } と、やりたいだけなのですが、 void(0)の代わりにreturn false();とかだとダメ?なようです。 IE6対応?なのか、な
普通だな てかちょっと弄るだけで女としてパスできそうな顔だな
テキストフォーム内のある範囲を選択し、指定したキーを押すとその範囲を取得するようにしたいのですが、うまくいきません。どうしたらいいでしょうか。 var form = document.getElementById("srch"); var str = form.value; var strLength = str.length; form.setSelectionRange(strLength-2,strLength); var r = window.getSelection().getRangeAt(0); alert(r) // 空白になる
409 :
Name_Not_Found :2011/06/07(火) 19:53:55.51 ID:iBr2GC1R
>>405 voidの使い方がありかと言われればアリだとは思うけど、素直に
if(event.keyCode === 13) funcHoge();
でいいと思う。文字数も少ないし
return falseの件は、まず最後のカッコいらない
んで、return しちゃうとそこで処理終わっちゃうから
それが適切かどうかも怪しい
IE6云々は多分関係ない
ごめんなさい、初心者で下らない質問ですがヒントだけでも頂けると助かります・・・
自分のサイトにこちらのウェブコミックビューア→
http://viewer.webcomicranking.com/ を使用して、一つのページ内に2,3つ別の画像郡(サンプルの下の四コマ漫画劇場)を表示させたいのですが、どうしても2つ目以降になると
・・・ の文字が出て、表示されなくなります。
すみません、よろしくお願いします。
411 :
Name_Not_Found :2011/06/07(火) 20:30:21.61 ID:iBr2GC1R
idで特定してるみたいだから2つは無理なんじゃないかと
412 :
405 :2011/06/07(火) 23:13:14.18 ID:???
>>409 ありがとうございます。
return falseでもvoid(0)でも問題なさそうですが、確かにelse側の処理が不要なら
何もしない方が処理をスルーするのでパフォーマンス的にも良さそうですね
413 :
akiyan :2011/06/07(火) 23:35:09.98 ID:0SPLxjds
きずついた
414 :
akiyan :2011/06/07(火) 23:36:31.82 ID:0SPLxjds
>>406 >>407 訴えるぞ?
お前侮辱か?民事で訴えてやろうか?あ?
名誉毀損だな
いい加減にしろ!!
415 :
amachang :2011/06/07(火) 23:36:56.93 ID:0SPLxjds
いい加減にしろ!!! 訴えるぞ!!!
<ul> <li>HOGE <ul> <li>hoge1</li> <li>hoge2</li> <li>hoge3</li> </ul> </li> <li>HAGE <ul> <li>hage1</li> <li>hage2</li> </ul> </li> </ul> こんな感じのメニューがあって、 ul>liをクリックしたらul>li>ul>liをペローンと出すJavaScriptを書いてるのですが、 ul>liのところにonmouseover="peron()" onmouseout="kurukuru()" と今まで記述してたのですが、このソースには書かずに、 onload時にリスナーに登録したほうがソースの見た目は綺麗になると思いました。 ここで疑問なんですが、ベタベタにソースにonmouseover="peron()"とか書いたほうが、 速度面じゃやっぱり有利でしょうか?
>>417 気にするほどのパフォーマンス差は出ない。
可読性を優先しといた方がいい
Firefoxの場合、 ハッシュ付きのURLが渡されたらそれを無効化できない、という仕様でしょうか? たとえば、外部ページから index.html#footer などでリンクしてきたとき、 ページの冒頭で location.hash = ""; とすると Chrome や Safari ではハッシュが無効となって、ページの先頭が表示されます。 しかし Firefoxは <div id="footer"></div> の表示部まで移動してしまします。 Firefoxでも index.html#footer の #footerを無効にするにはどうしたらよいでしょうか。
>>355 下の make_mezamasi は「特定の時刻を渡すと、その時刻をセットした目覚まし時計を作る」関数と考える。
引数 tsec がセットする時刻(ミリ秒)。戻り値は関数。
戻り値の関数を実行すると、1秒ごとに時間をチェック(setInterval)して、
設定時刻を過ぎた時点で1秒ごとのチェックを終了(clearInterval)して、
sound2Play() を実行する。
上の関数では、現在時刻(nsec)と設定時刻(tsec)を計算してる。
設定時刻はとりあえず当日として設定(setHour〜setMilliseconds)しておいて、
設定時刻を既に過ぎていた(現在時刻が7時30分、設定時刻が7時ちょうどなど)場合、
設定時刻に24*60*60*1000を足して明日の時刻にして、目覚まし時計を作る。
作った目覚まし時計は、設定時刻の30秒前になったらオンにする( setTimeout(mezamasi, n) )。
ただし、作った時点で既に30秒を切っていたらすぐにオンにする( setTimeout(mezamasi, 0) )。
nはその計算をしてる。
>>420 納期>仕様>堅牢性>柔軟性>可読性>>>>>>エンジニアの命
>>>>>個人情報
<dl> 1 <dt>1<dd> </dl> <dl> 2 <dt>2<dd> </dl> <dl> 3 <dt>3<dd> </dl> のHTMLにある要素をjavascriptで取得して hoge[0]=<dl>1<dt>1<dd></dl> hoge[1]=<dl>2<dt>2<dd></dl> hoge[2]=<dl>3<dt>3<dd></dl> と配列に格納したいのですがgetElementsByTagNameでやってもどーも上手く行きません 何か良い方法あるのでしょうか?
よくある「数字の3桁ごとに[,]を付ける」という while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); だけど、いったいどういう動きをしているのかサッパリ このwhile文の中身を数行に分けて書くとどうなるの? while(num != num){ num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"); } じゃないよね?
do { var num_tmp = num; num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"); } while(num_tmp != num)
>>427 後判定…そんなのもあるのか。
何となく自己解決版
while(num != old){ //oldとnumが一致するまでループ
old = num;//1個前のデータをoldに
num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2");
}
無駄な領域作らないからそっちのほうが良いかも
ありがとう
429 :
忍法帖【Lv=25,xxxPT】 :2011/06/08(水) 10:59:49.59 ID:h3pY8BZl
何と! 無料で被リンク1万件貰えます。
今すぐに下のURLをクリック。
http://p.tl/5s7j FireFoxでエラーになる場合は、IEで登録してね。
430 :
Name_Not_Found :2011/06/08(水) 12:09:56.60 ID:ZZKVZkGz
while('笑'); num.replace(/\B(?=(?:\d{3})+$)/g, ',')
function a(n = 100) { alert(n); } a(); メソッドa()に引数を与えなかった場合は100を与えるというのはjavascriptで実行できませんでした PHPで書くとこういうのです <?php function a($n = 100) { return $n; } echo a(); ?> こんな感じの動作をjavascriptではどのように書けますか?
function a(n) { if (n) { alert(n) } else { alert(100); } } a();
function a(n) { n = n || 100; alert(n); } a(); 引数の初期値の設定はPHPがわかりやすいね
afunction a(n) { n = typeof !== 'undefined' ? n : 100; alert(n); } 初期化するしかない n=n||100;とかalert(n||100); って書き方もできるけど0が来た場合100が表示されるからなー
あれだな、もっと言えばundefinedを受け取る場合もあるから argumentsで引数の数をチェックすべきだな・・・
まぁ重要なところはJavaScriptでは引数を記述しなくても それ自体にエラーは起きないということだな
439 :
忍法帖【Lv=29,xxxPT】 :2011/06/08(水) 16:09:59.82 ID:4VGx5JDJ
何と! 無料で被リンク1万件貰えます。
今すぐに下のURLをクリック。
http://p.tl/5s7j FireFoxでエラーになる場合は、IEで登録してね。
var date = new Date(); ↑このdateをタイムスタンプに変換する方法をご教示お願いします
441 :
Name_Not_Found :2011/06/08(水) 16:44:17.96 ID:DfrynOA1
ちょっとはぐぐれよ getTIme()
442 :
440 :2011/06/08(水) 16:44:59.39 ID:???
すいませんgetTimeで出来ました
439みたいなのよく見かけるけど何なの? 短縮URL怖くて踏めない
スルーしなさい
ここのスレいらないよ 僕がいればこのスレだって不要 僕>>>>>ここのスレ
僕はjavascriptマスター
447 :
Name_Not_Found :2011/06/08(水) 17:09:50.16 ID:DfrynOA1
いや俺こそJavaScriptマイスター
んじゃ俺は素股で
俺はjavascriptになれない・・・。
僕はJavaScriptのJ
じゃあ俺ecma
じゃぁじゃぁJScript
僕はCoffeeScriptちゃん!
へい、MocaScriptをひとつ
idではなくclassのHTMLをinnerHTMLで変更したいんですが、できます?
int[] document.getElementsByClassName(String className) usage var hoge = document.getElementsByClassName('hoge'); alert(hoge[0].innerHTML);
458 :
457 :2011/06/09(木) 14:23:11.13 ID:???
ごめん適当にかいた returnはHTMLCollectionだ HTMLCollection document.getElementsByClassName(String className) usage var hoge = document.getElementsByClassName('hoge'); alert(hoge.item(0).innerHTML);
> var hoge = document.getElementsByClassName('hoge'); > alert(hoge[0].innerHTML); ByClassNameって使わないほうがいいんじゃなかったっけ? 昔の話だし、理由をよく理解してなかったし勘違いならそれでいいけど
460 :
457 :2011/06/09(木) 14:34:41.27 ID:???
>>459 IEで対応してなかったからね
どこまで対応してないか調べたら8は対応してなかったわ
おとなしくquerySelectorAll使ったほうがいいかも
>>460 今調べたらIE9は対応してた
IE9で本当にIEは変わったな
使わない方がいいのではなく、バカには使えない、わりとマジで 返ってくるNodeListがliveだから、classNameを変更するそばからリストから消えていく
>>461 今までwindowsのデフォって立場に甘えて他のブラウザから大きく遅れてたからね
遅すぎて他ブラウザの猛攻を許してしまった感じもあるけどー
連続レススマソ
>>462 別にDOM操作しないのなら気にしないでいいんじゃね?
>>455 みたいに変更するのは確かに「live な」NodeListの影響出てくるけど
>>458 のような変更せずただ値を取得するだけなら問題ないだろー
用は使いようだけど
>>462 だから賢い奴はgetElementsByClassNameを一回実行してキャッシュしておく
あとはノード挿入除去に応じてキャッシュが勝手にアップデートされる
何度も同じgetElementsByClassNameを呼ぶ奴は賢くない
467 :
466 :2011/06/09(木) 15:45:04.06 ID:???
丸投げやスクリプト改造の依頼は受け付けておりませーん
は?なんで??
上下関係はJavaScript関係ないし ここで質問すること自体が的外れ もちろん、「どこの担当ですか?」なんて質問も的外れだからするなよ
ワロタ
>>467 あえて言うなら質問に答えられない、って感じ
他者のjavascriptのある特定の部分が分からないとかならわかるけど、全体をポンと置いて質問ってのはなぁ
YAHOO知恵袋とかで質問するといいかも
それとちょっと皆冷たすぎだぞ
>>466 lancersで1万円ぐらいで成立してそうな内容ですよこれ
>>473 見当はつくぞ。
ホントにその気になればそりゃ答えられるだろうが、
ただし、解決までクソ面倒なのも見当がつくがな。
なにせ、自分が直接手を出せるわけじゃない。
ここにこんな質問持ってくるレベルなんだからどの程度なのかも推測がつく。
1度や2度の回答では絶対に解決しないことも分かる。
んで、これに長いこと付き合ってると「スレ違い他でやれ」と
言われるところまで全部想定済みだ。
先に書いたように、そもそもJavaScript関係ないし。
いじるべきなのはスクリプト以外の場所だ。
1万もなにもFlashとのz-indexなら <param name="wmode" value="transparent"> あたりで解決したはずだが
>>466-475 なんでこの質問でもめてるの?「ツールチップの位置に合わせて
下にiframeを配置すれ」このひとことで終りじゃないの?
478 :
466 :2011/06/09(木) 16:53:30.63 ID:???
いろいろ、調べたら自己解決しましたm(_ _)m
やたらprototypeで無理に書きたがる人がいますけど何でprototypeを使うんですか? functionじゃだめなの?
好きにしなさいよ
わしはライブラリは全く使わずにゴリゴリ書いているよ(`・ω・´)
老害wwwww
それを使うことでコードが自然に見えるようになるなら、 そうすることにはそれなりの意味がある。 無理に書きたがってるだけかどうかの判断は難しいな。力量によるところがある。 で、本当の意味で「無理に書きたがる」場合には、2つの理由がある。 ラジオを分解してみるのが好きなタイプと、オモチャを飽きるまでいじるタイプだ。 前者は経験として有用だから温かく見守るべし。 後者はどうにもならんから放置すべし。
>>483 後者が老害か
ウチの現場はJSがまともに使える奴が少なくてprototype呼び出してるのに
総スルーなコピペコーディングばっかw
邪魔なのはLIBRARYか老害エンジニアか答えは明らか
先日リーダー権限で部長とPMに訴えて外したら老人の会社から俺にクレームきた
話し合いで老人がライブラリ使わない方がワシは生産性高いと言うので
ライブラリ使えない人は要りませんと言ったら泣いてた
時代に取り残される。これは他人事じゃないなと思った
485 :
Name_Not_Found :2011/06/09(木) 19:13:38.06 ID:vnaIaGOV
老人=ライブラリ使えない、とか漫画じゃないんだからw 単にその人が不器用なだけなんじゃないかと…
>>484 君のその文章力は会社の中で大丈夫なのか?w
>>479 は
var a;
function set(_a){a = _a;}
function get(){return a;}
var Hoge = function(){};
Hoge.prototype = {
a: null,
set: function(_a){this.a=_a};
get: function(){return a};
};
ってことを言ってるのかと思った
>>487 そうでそちっちのほうでs
jqueryのライバルであるprototype.jsの事ではございません
>>484 それは
>>479 と逆のケースだから、理由も変わってくるぞw
ベタベタに書く理由は大きく2つ。
ベタベタに書くことでトラブルを回避できることを知っている場合と、
ベタベタにしか書けない場合だな。
>>488 単純にクラスベースになれてるとそっちのほうがコード的にしっくりくるからじゃね?
prototypeキーワード使ってる人はC++とかJavaとかそういう記事書いてる人に多いと思う
スコープ汚染どうこうは詳しくないので他の人に頼む
>>479 はどういう場合に「無理してる」って感じるの
別の話になるけどクラスベースのつもりでprototype 書いている人は何だかなあって思う
493 :
Name_Not_Found :2011/06/09(木) 20:09:45.07 ID:vnaIaGOV
>>488 前者の方で書いてると
変数名考えるのが面倒くさいんだぜ
機能ごとに閉じたスコープが作れると楽チン
>>493 甘いな
そのうちprototypeのメンバーもいっぱいになって
名前考えるの大変になるんだぜ
それは考え方自体が変なんじゃないか?w
どう考えても機能分割できてないだろw 自分の古いコード見て「何でこのメソッド(のグループ)とこっちのメソッド(〃)を 同じ扱いにしてんだよ」って突っ込むことはよくある。 別の名前空間になるように割ってやると、これがまた綺麗に割れるんだw
497 :
Name_Not_Found :2011/06/09(木) 21:16:34.62 ID:vnaIaGOV
>>496 あまり考えずに勢いで書きだすと、そういう事になりやすいかも
ある程度書いちゃってから、失敗したなー、やってもうたなー、って
思うことある
最初にきっちりかっちり設計詰めてからやると、
ポロリ落としのように、綺麗に出ますな
>>487 前者は名前空間が共有される他にもクロージャを無駄に生産してる。
規模にもよる あるウィジェットの計算hogeが汎用化できると気づきNumberに移動させた でも、もとからNumberにあるメンバーとは区別したい 名前空間が深くなって使いづれ ディレクトリ型の限界
jQuery全盛期に無駄クロージャの大量生成を言っても仕方ない
今はスピードの時代だから無駄じゃないと思うけどね
>>484 求められる品質の物をより短時間で出来るならどっちだって良いんじゃないのか?
一般的にはLibrary使った方が短時間で済むから使うんであって、それより早く書けるならそれに越したことはない。
>>484 >ウチの現場はJSがまともに使える奴が少なくてprototype呼び出してるのに
現場のレベルが低すぎるのでPrototypeで底上げしてるということ?
prototypeはかっこつけ functionで十分
>>503 実際にそんなのばっかじゃん
そのくせわずかなスピード向上記事にとびついたり、何の冗談かと思ってる
>>506 おまえはパフォーマンスに興味がないだけ
>>504 察するに「ウチの現場はJSがまともに使える奴が少ない。
たとえば、prototype.js読み込んでるのに全く使わない」という意味。
>>502 ライブラリ使うのは環境(ブラウザ)の差を吸収する部分が大きい。
差の吸収なんて定型文だし、そんなのいちいち自作してたらテスト含めて手間大きすぎ。
それを分かってる人間がライブラリ使わないってのは、特に業務じゃありえんだろ。
どう考えても、自作の方が要求品質を提供するまでのコストが大きい。
>>508 >たとえば、prototype.js読み込んでるのに全く使わない」という意味。
それ俺だわ
ajax部分も気づけば自分で書いてたわ
$系の関数使うぐらいしか使いこなせていない現実
JSをある程度使えるのに応用のきかないフレームワークの関数群覚えるのはなんか抵抗あるんだよね
そんで読み込んだはいいが仕様書はみてないから簡単なものしか使えないという・・・
車輪の再発明を喜んでやっちまう非効率野郎なので性格変えないとな
prototype.jsだから使わないとか・・・ これはありえる話かもしれない まぁ例え話だから実際は違うんだろうけど・・・
ライブラリを使う使わないと、ライブラリの質は別の話だからなあ 仕事では使っても、プライベートじゃ使いたくないってのはある
安定するまで手を出したくないってのは、新ブラウザや ブラウザのメジャーバージョンアップの機能追加と同じだなw ただ、その名前をよく聞くようになったなら、どんなものなのか 調べておくべきだって点でも同じ。 調べない使えないでは、少なくとも仕事にゃならない。
いやprototype.jsを使いたくない理由は安定とは別のところにあるんしないかな グローバル変数使いすぎとかprototype で拡張しすぎとか
>>513 prototype.jsがウケた理由も
prototype拡張していいのか!
privateなんかいらなかったんや!
という所だったんだが
過去ログにもあると思うけど 当時はビルトインのprototypeにぺたぺたつけんなと言っても ぜんぜん聞く耳もってくれなかったんだぜ
行儀は悪いが、代替出るまでは使う価値があったのも確か。
みんな真似し始めるからなあ みんなやってる=いいものだと信じて疑わない
まともな継承ができない構造が悪い
まともな継承とは何か
クラスがないのに継承しようとするのが悪い。 自分でクラス(っぽいもの)作る時に、必要なメソッドが他のクラス(っぽいもの)にあるなら、 自クラス内でそれを借りるか、インスタンスにそのメソッド突っ込めばおk 丸ごと継承するのは静的クラスしかない言語の手法
プロトタイプを作ってObject.createでクローン&固有プロパティだけ上書き これ一択
いちいちクローン作った物をいじってちゃプロトタイプのよさを生かせない たしかにオーバライドは必要なときはあるけど オーバライドしないときはそのままくっつけちゃっていいんじゃないかと
>>522 めんどうだからクローンと書いたが
Object.create(O, desc)で生成するのはOをプロトタイプにし
descを固有プロパティに持つオブジェクトな
フレームのボーダーラインの現在の高さとか取得する方法ってありますか?
生javascriptを書くのは時代遅れ 趣味でやってるなら生で書いても誰も文句は言わないけど仕事でやるなら時間との勝負なんだよ
どんなライブラリ使ってても生の部分は出るわけだが。
a=1+1; は生だし、s=""+a; も生だし、Math.floor(Math.log(n)); も生だな。 C++でポインタ理解してなくてCStringしか使えなかった頃を思い出す。 中身理解しないままライブラリ使う奴は始末に負えない。 無駄が(非常識なほど)大きいプログラムを書いておきながら、それに気付かないw
Ajaxを使おうと思ったのですが Ajaxで呼び出した要素のスクリプトが使えないと書いてありました コレって例えばHTMLが記述されてるテキストを呼び出して そこに記述されてるscriptやCSSが使えないという意味で 元々そのページにjavascriptを用意して、それを呼び出したテキストにあるonClickなどで呼び出すことは可能ということなのでしょうか?
うん
530 :
Name_Not_Found :2011/06/10(金) 15:04:19.79 ID:Ux58BUOJ
>>528 prototype.jsとかだと
JS部分をソースから引っ掻いてきてeval()に渡して実行
みたいなことしてるね
なるほど、ありがとうございますー つまり前もって用意しとけばCSSもscriptもeval使わなくて呼び出せるんですね!
呼び出した部分の <style type="text/javascript"> | </script> が実行できないだけだからな 当たり前だが <script language="JavaScript" type="text/javascript" src="○○.js"></script> も
なんでstyleなのかは良いとして deferつけても無理だっけ?
>>525 ライブラリも生のJSだろ
別もんだと思ってるから、非効率で生産性のないものになるんだ
>>535 生の意味分かってないなら沈黙が金。
document.getElementById は仕様で定められた純インターフェース。
$() は、仕様と自分以外の第三者が勝手に作ったインターフェース。
後者ありき(=第三者のライブラリを噛ませること前提)で作ったプログラムは
生とは言わない。生ならgetElementByIdを直接呼ぶ関数を自分で作る。
>>536 だからそう言ってんだろ
なーにが沈黙が金だ、ニホンゴワカリマスカ?
じゃあライブラリをコピペして使うのは生 ライブラリをDLしてきて、そのまま使うのは生じゃないと言う事だね もう関係なくなっちゃたね 凄くどうでもいいね
>>537 お前、「だからそう言ってんだろ」って、
536の文章が537と全く同じ意味だと本気でそう言ってんのか?
……義務教育終わってるか?
>>538 バカか。
ブラウザのバージョンアップで仕様が変わった時に、ライブラリ側が
対応してるか確認取れるまで動作が保証できなくなるのがライブラリ使用プログラムだ。
ダウンロードとか全然関係ねぇよ。現実理解してないにもほどがあるw
ミスった。"536の文章が537"じゃなくて"535の文章が536"だ。
>>536 いいたいことほわかるけど「生」とかいうオレオレ用語を使うのが誤解のもとなんじゃないの?
>>541 時間と勝負しながら2chで無駄な議論したいんだよ察してやれ
>>542 二度手間に費やした方がよっぽど時間かかるでしょ
>>525 と同じ意味で「生」と言ってるのは
>>535 >>536 は「生」をホストオブジェクトの意味ですりかえている
ちゃんとホストオブジェクトというべきだったな
>>1 > (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
546 :
Name_Not_Found :2011/06/10(金) 19:59:50.34 ID:wsWUZkE7
まぁ、真の意味でライブラリと呼べるのはホストオブジェクトだけなんだよな いわゆる「JSライブラリ」はホストと同レベルでコンパイルされるわけでなく なんつーか、ただのラッパーというか、なんか違う気がする
>>544 >525と>535が同じ意味で使ってるなら
>525は「全てのjavascriptは時代遅れ。仕事にならない」という意味になるわけだが。
>>535 は昨日の流れのprototype.jsをつかえない老害というオチ
549 :
Name_Not_Found :2011/06/10(金) 20:27:16.21 ID:ptNOZIC3
文字列が正しい色の値("#fff"とか"#000000"とか"blue"とか"rgb(0,0,0)"とか"rgba(255,0,0,0.5)"とか)になっているかどうか 簡単に判断する方法を教えてください
>>525 「生javascriptでなくライブラリ使え」
>>535 「ライブラリも生javascript(で作られてる)から(生javascriptの知識がないと)非効率になる」
>>536 「生とは純インターフェース(ホストオブジェクト)だけを使うプログラムである」
>>538 「ライブラリをコピペすれば生です」
>>549 適当な要素作ってstyle.colorに突っ込んで変更されるかチェック
またはgetComputedStyle().color
552 :
549 :2011/06/10(金) 20:36:39.38 ID:???
>>551 どうもありがとうございますm(_ _)m
試してみます
>>550 どんだけ好意的な解釈してるんだよw
ライブラリはブラウザ依存のベタコードをできるだけ抽象化するためにある。
生コードと抽象化コードは当然別モノになるし、別モノにするためにあるんだから、
抽象化したコードで実装依存の部分を気にする必要があるなら
どこかが間違ってるだろ。
大抵の場合、抽象化コードのそもそもの仕様、あるいは前提ががおかしいだけだが。
だからお前は「生コード」と「抽象化コード」を定義してから書け、な
>>554 >>536 アプリ作ろうとしてる人間がブラウザの仕様を気にしなければならんのが生コード。
差が吸収されて、アプリのロジック・アルゴリズムだけ書けばいいのが抽象化コード。
ライブラリ使用者は、ライブラリ内部の動作を知っている必要があるが、気にする必要はない。
ライブラリの生産性は「気にする必要がない」ことで生まれる。
>>535 は間違いだよ。ライブラリ使用の抽象化コードを
生コードと区別せず(別モノだと思わず)に、実装気にして書いてたらただのアホ。
>>555 PrototypeもjQueryも、全然抽象化されてないわけだが
>>555 気にする必要がないと思ってる人はおかしなコードを書くけどね
>>555 「納期>>>品質」か
お世話になりたくないタイプだな
>>556-559 区別ができないならできないと書けばいいのに。
むしろ黙ってりゃいいのに。
ブラウザのメジャーバージョンアップで新仕様が追加されれば
動作確認が必須。
ベタ書きしてると、ただでさえ確認作業が発生してるところに
書き換え作業&テストが発生する。
ライブラリ使ってりゃ、ライブラリ側の動作確認が済んだかどうか調べて、
動作確認だけすればおk。
これらの作業工程は単体アプリでもWebアプリでも同じこと。
「納期>品質か(キリッ」とか何をマヌケなこと言ってるんだか。
ベタ書きしてて書き換え発生したら、その分動作確認に割り当てる時間が
減るという現実を経験したことないだけだろ。
561 :
Name_Not_Found :2011/06/10(金) 22:35:21.96 ID:RchKVl1l
ラジオボタンの値によってフォームのactionの値を変更したいのですが上手くいきません。
ttp://phpjavascriptroom.com/?t=js&p=sendform#a_action こちらのサイトを参考にしてみたのですが・・・
function InputCheck(){
var frm = document.contact;
frm.action = frm.mail_to[i].value;
frm.submit();
}
<form id="input" name="contact" action="#" method="post">
<input type="radio" name="mail_to" id="1" value="frm_check1.php" />
<input type="radio" name="mail_to" id="2" value="frm_check2.php" />
<input type="submit" value="確認画面" onclick="return InputCheck()" />
スクリプト内には他に正規表現チェックもしていますがそちらは正常に機能していました。
エラーメッセージはこのように表示されています。 Method Not Allowed The requested method POST is not allowed for the URL /~xxx01xxx/lucent-tower/form.html. もう長いことこの問題に取り組んでるのでそろそろ解決したいです・・・
>>560 おまえの主張していることはブラウザの仕様を気にする必要がないであって「ライブラリ使用者は、ライブラリ内部の動作を知っている必要があるが、気にする必要はない。 」には繋がらないだろうが
頓珍漢な説明ばかりしないでオレオレ用語もやめて説明すれば突っ込みはなくなるんだよ
腹筋した回数を入力して棒グラフにするプログラム作ったんだけどさ、
ttp://shirou37564.web.fc2.com/ 自分が勉強のために適当に作るプログラムって難しいな。
300行以内くらいで作れるプログラムって制約でやってるんだが、
みなさん、勉強に作る適当なプログラムって何作ってます?
>>527 お前恥ずかしい奴だな
PHPでフレームワークを使って開発するのと生PHPで書くのを一緒だと思ってる勘違い君か
基本的に作りたいものを作りながらそれに必要なものを勉強してる
>>564 自分はオミトロンでページいじりながらhtmlとcssとjsの知識が増えていった。
そのプログラムのアドバイスしておくと、
ブラウザやPCによっては重いこともあると思うから、棒グラフはdiv1つでcssのbackgroundで作ればいいと思う。
あとは、cssで目盛り位置指定(手計算)してるけど、jsで自動計算させるとか。
>>561 まずはInputCheck()の中にalert()を突っ込んで設定しようとしている
値が正しいかどうか調べる。値が正しくなければ正しくするようにする。
値が正しければ正しい値がなぜ設定されないかを次は調べる。そうやって
場合分けして行かなかったら解決しないだろ。基本中の基本。
ついでだけど、それだけ見るとiの値がどっから来るのかすごく疑問。
571 :
Name_Not_Found :2011/06/10(金) 23:31:54.48 ID:Ux58BUOJ
>>564 スレとあんまり関係ないけど、
自分のための何か、とかは実験以外ではあんまり伸びない
誰かのために作った上で、あんまり面白く無いとか
使いづらいとか、バグが多いぞ糞野郎とか叩かれて、
軽くイラッとしないと
個人的にはそんな感じ
572 :
564 :2011/06/10(金) 23:36:25.27 ID:???
みなさんありがとうございます。 >CSVやXMLをパースする >オセロのAI をやってみます。 >ブラウザやPCによっては重いこともあると思うから、棒グラフはdiv1つでcssのbackgroundで作ればいいと思う。 指摘のように、このプログラムは思いので改善を考えないと いけないのは分かってます。
573 :
Name_Not_Found :2011/06/10(金) 23:41:48.39 ID:Ux58BUOJ
>>572 グラフやるんだったら
HTMLの表をCanvasでグラフに置き換える、とかやると
今っぽいかもしれんね
574 :
Name_Not_Found :2011/06/10(金) 23:51:55.59 ID:i0uWjp8v
以下のような機能を実現したいです。 1.入力欄がいくつかある画面を表示 2.確認ボタン(FormのSubmit)が押された時にJavaScriptを呼び出す(action="javascript:check()") 3.呼び出されたJavaScriptで入力値をチェックし、エラーがあれば画面遷移せず、 入力欄の右に赤字でエラー表示(innerHTMLを使用) 4.エラーがなければ確認ページへ遷移する(入力したデータを渡す) このうち3番までは簡単にできたのですが、4番で大苦戦しております。 location.href="next.html"; とやると画面遷移はしますが、データを送れません。 どのように行えば、JavaScriptでデータを渡せるのでしょうか?
formあるんだからpostすればいいじゃない。 完全にjsでやりたいなら、XMLHttpRequestとか。
576 :
Name_Not_Found :2011/06/10(金) 23:55:01.61 ID:i0uWjp8v
574です。 データ渡しは、GETではなくPOSTで行いたいです。 入力内容にパスワードとか名前とかがあるためです。 アドレス欄に表示されるのはまずいです。
577 :
Name_Not_Found :2011/06/10(金) 23:56:14.79 ID:i0uWjp8v
>>575 画面遷移する前に入力値のチェックを行いたいのです。
formでPOSTすれば楽なのは分かりますが、
それだとチェックせずに画面が移動してしまいます。
578 :
Name_Not_Found :2011/06/10(金) 23:57:49.02 ID:i0uWjp8v
>>575 すみません、見落としていました。
Ajaxは何度か使っているので使い方は分かりますが、
あれってHTMLやJSPに対してリクエストパラメータを送ることもできるのですか?
jsでpostされた時の関数の中で、チェック→エラーはreturn falseで中止。 あと、jsからでもformのpostを実行できる。
580 :
Name_Not_Found :2011/06/11(土) 00:01:33.98 ID:mo3poXzS
>>579 ありがとうございます。
JavaScriptからFormのPOSTができるとは知りませんでした。
その辺りをキーにして調べてみます。m(_ _)m
単なるデータ送信だろ? submitのあとの処理を全てJavaScriptにやらせようとしてるからコケる。 JavaScriptを使わないで、普通にpostで送るように作っておいて、 そこにJavaScriptでチェック(&中止)を作って乗せる。 JavaScriptを前提にしていいなら、Ajaxで画面遷移自体が不要になるように作る。
582 :
Name_Not_Found :2011/06/11(土) 09:29:32.00 ID:mo3poXzS
>>581 色々と説明不足ですみません。
3のチェック処理の中でAjaxを使うため、単純に中止はできないのです。
入力された名前をServletに送り、登録済みでないかデータベース検索をかけます。
応答が返って来たとき、未登録であれば確認画面に遷移する感じです。
>>579 のレスにあったFormのPOSTを使う処理でなんとかなりそうです。
こんな感じで書けばできそうだという認識です。
// Ajax通信完了時に呼び出される関数
function onAjaxResp( resp ) {
if ( resp != "OK" ) {
// 画面に「登録済み」のエラーメッセージを表示
return;
}
var form = document.getElementById( "main_form" );
form.setAttribute( "action", "kakunin.jsp" );
form.setAttribute( "mathod", "post" );
form.submit();
}
>>561 YUI compressor使えば行数も圧縮出来る
>>582 <form action="kakuninjsp" onsubmit="onSubmit(event);"> でいいんだよ。
多くの実装はハンドラ内で return しても form 送信はキャンセルされない。
event.preventDefault と event.returnValue を使い分ければいい。
windowオブジェクトのプロパティやメソッドを書くときに「window.」って付けてますか? alertとかはそのままalertと書いていてaddEventListenerはwindow.addEventListenerと書いていて 統一したほうがいいのかなと思ったのですがどっちで統一すべきですか?どっちで統一してますか?
必要な時意外使わないかなぁ onloadとかの時は使うけど
どうもありがとうございます onloadも「window.」は省略可能ですよね 統一せずなんとなくのマイルールで使い分けてる感じですか
onloadはwindow省略不可
オブジェクトを明示したほうがいいものにつける obj.addEventListener obj.onevent このへんはwindowだけではないからな alertやlocation.hrefなんかは window以外に指定することはないからつけない
どうもありがとうございます window以外のオブジェクトにも同じメソッドがある場合は「window.」ってつけたほうがわかりやすいですね
innerHTMLでswf objectを(何回も)書き換えるスクリプトで あまり詳しくないので的外れな表現になっていたら申し訳ないのですが 書き換え前のobjのために用意したメモリはきちんと開放されますか? つまり、何回も書き換えてるとメモリ食いますか?
食うことがある。 IEでメモリの使用量がモリモリ増えたら確定 他のブラウザは割としっかりメモリ解放してくれるから問題になることは少ないな
formのテキストボックスにid属性を割り当ててもパラメータとして送信できないです もしかして、name属性も指定する必要があるのですか?
>>597 ありがとうございます
やっぱりそうなんですね
逆に言えば、送信したいやつだけname属性付けるってことで扱いやすいですね
>>598 基本的に全部つけていいと思うけどね。id属性をつける意味が全くない。
送信したくないコントロールは disabled でいい。
>>599 idの方がオブジェクト取りやすいです
idだと
getElementById("hoge").value
nameだと
getElementsByName("hoge").item(0).value
item(0)が面倒なんですよね
forms["formName"]["hoge"].valueじゃだめなの?
602 :
Name_Not_Found :2011/06/12(日) 00:26:00.09 ID:kTNOhXM6
>>598 >>597 見たらわかるけど、typeがsubmit、reset以外なら、name必須だよ
604 :
591 :2011/06/12(日) 00:45:38.26 ID:???
>>592 >>593-594 回答ありがとうございます、メモリリークと言うんですね
内容はパッと見難しそうですが頑張って理解したいと思います
安価ミス × 593-594 ○ 594-595
>>600 form.elements.hoge では?
elements を変数格納しておけば各コントロールにスマートにアクセスできる
window.forms['formname'].name.valueかな window.formnameは非奨励
document.formsの間違いね
forms['formname']に対しての nameがすごく気持ち悪い
質問させていただきます。 var a = new Array( 10, 22, 1, 23, 45); のような配列がありこれをソートしたいのですが、配列の値とキーの値を関連付けているため、配列のsortメソッドを使うと値のみソートされてしまうため、 キーと合わせてソートしたい場合はどうすればいいか悩んでおります。 a[2] => 1 a[0] => 10 a[1] => 22 a[3] => 23 a[4] => 45 このような出力をしたのですが、どうすればいいでしょうか?
>>608 document.formnameが非奨励 なら form.name も非推奨かと
>>611 どういう結果を求めてるの?
sortにコールバックを渡すだけでいけそうだけど
>>611 それだとソートの意味をなしてないな。
単純に値を出力したいだけなら、配列をコピーしてソートしたらどうだ。
>>611 再現できないんだが…
キーを揃えるのがsortじゃないか
このような出力をした「い」のですが、のtypo? 文意が180度変わる
617 :
611 :2011/06/12(日) 04:03:03.88 ID:???
>>616 さんのいうとおり、「出力したい」です。
とりあえず、連想配列で二つの値を持たせて自前の関数で連想配列をソートさせました。
Javascriptでは連想配列に持たせる以外に、
>>611 を実現する方法はありますでしょうか?
jQueryの質問です slideupの動作を終えてからcompleteのように関数を実行したいのですが animateではなくslideupの時はどうすればできるんでしょうか?
620 :
Name_Not_Found :2011/06/12(日) 07:43:27.65 ID:h9PMtxBj
>>619 jQuery使ったことないけど、↓見る限りだと第二引数に関数おけばいいんじゃね?
ソース眺めてるだけだから、嘘だったらすまん。
>// Generate shortcuts for custom animations
>jQuery.each({
> slideDown: genFx("show", 1),
> slideUp: genFx("hide", 1),
> slideToggle: genFx("toggle", 1),
> fadeIn: { opacity: "show" },
> fadeOut: { opacity: "hide" }
>}, function( name, props ) {
> jQuery.fn[ name ] = function( speed, callback ) {
> return this.animate( props, speed, callback );
> };
>});
>>617 2次元配列とか連想配列にするしか無いような気がする。
自力でforで回して最小のを探し出して出力していくってのも効率よくすればsortと同じだと思うし。
var a = new Array( 10, 22, 1, 23, 45);
for (var i = 0, len = a.length; i < len; i++) a[i] = [a[i], i];
a.sort(function(n1, n2){
return n1[0] - n2[0];
});
for (var i = 0, len = a.length; i < len; i++) console.log("a[" + a[i][1] + "] => " + a[i][0]);
623 :
Name_Not_Found :2011/06/12(日) 08:59:01.29 ID:h9PMtxBj
>>617 IE6とかECMAScript互換性無視のブラウザ使わないなら↓になる。
var s = "";
var a = [10, 22, 1, 23, 45];
a.map(function(v,i,array){
return {index:i,value:v}
}).sort(function(l,r){
return l.index-r.index;
}).forEach(function(v,i,array){
s += 'a['+v.index+'] => ' + v.value '\n';
});
alert(s);
ここでArray.mapとArray.forEachの実装拾ってくれば、互換性クリアできる。
https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/forEach
forEachってfor文でいいじゃん って思ってたけどそういう書き方ができるんすね
626 :
Name_Not_Found :2011/06/12(日) 11:29:24.94 ID:h9PMtxBj
>>593 ajaxでデータ取ってきてるんじゃね?
取得方法はhttpヘッダでも監視するしかないんじゃね?
まぁ、他人のサイトに無用に負荷かけるなよ。
ajaxで取ってくるそのファイルが見つかりません
Firebug のコンソールを開いてみ。必要なものは大方確認できるはず。
/c/数字 でjsonが帰ってきてる。 chromeはいつの間にかxmlloadingが表示されなくなったよね。
>>629 xmlloadingが何を指すのかわからんが
XHRはコンソールで右クリックしてXMLHttpRequest loggingにチェック入れたら
通信ごとにコンソールに表示されるし
通信内容もNetworkタブから見れるよ?ヘッダとか全て含めて
>>630 お、ホントだ、右クリックメニューに何かあるなーと思いつつ今まで無視してたわw
サンクス。 XHR finished loadingだった。
>>593 のデータの場所。
よく個人情報入力後に確認の画面が表示されますが 入力画面に戻るための修正ボタンはどうやれば作れますか? history.back()を呼び出すだけだと内容消えちゃいますよね? パスワードとか特に
戻ると考えずに 再編集画面に進む と考えればいいだけだろ?
>>634 なるほど
確認の画面が隠し持っている値を編集画面に送る訳ですね?
var Foo = function(){ this.Baz = function(){ ... } } var Hoge = function(){ this.Foo = new Foo(); this.Start = function(){ setInterval( "this.Foo.Baz()", 500 ); }; } FooクラスのBazメソッドをHogeクラスのStartメソッドからインターバルで呼び出したいのですが、Firebugに"this.Foo is undefined"と言われてしまいます。 どの様にすれば実行できるでしょうか?
>>636 var Hoge = function(){
this.Foo = new Foo();
var baz = this.Foo.Baz;
this.Start = function(){
setInterval(baz, 500 );
};
}
>>634 ありがとうございました
POSTパラメータに乗せることでできました
JSでPOSTのパラメータ取るにはどうすればいいですか?
Ajaxではなく、innerHTMLでsrcの部分のHTMLを読み込んで その後にとある一文を実行させたいのですが、どのようにしたらいいのでしょうか?
2人とももうちょっとわかりやすくおね。
643 :
Name_Not_Found :2011/06/13(月) 11:21:53.81 ID:nGlFUN44
YUI compressorを使ってjsやcssのシェイプアップするようにHTMLの不要な空白や改行、コメントをシェイプアップするツールって知らない?
CSSはYUI compressorでできるだろw
>>644 正規表現で改行と空白と<!--から-->までを削除すればおk
HTML用のツールについて なぜここで聞く
バックグラウンドのタブとか、ウィンドウがアクティブになっていないときでもJavascriptは処理されているんですか? ウィンドウがアクティブになっていないときには処理しなくてもいいようなsetInterval等がある場合は 止めておくものですか?もしそうだとしたら、止め方、再開の仕方を教えてください window.onfocusとwindow.onblurで?
そう、onfocusとonblurで普通だと思うけど。
650 :
648 :2011/06/13(月) 20:47:15.51 ID:???
どうもありがとうございますm(_ _)m
URLエンコードについて教えてください。 JSからサーブレットにUTF-8の日本語文字列を送りたいです。 escape(・・・)関数でエンコードして送ったところ、なぜがパラメータを取得できませんでした。 エスケープ直後の文字列を表示してみたところ、%uXXXX(XXXXは16進文字列4桁) となっていました。 つまり、JS側での変換はうまくできている筈なのです。 しかし、それをサーブレットでreq.getParameter(・・・)を行った結果はnullになるのです。 なぜこのようになるのか、ご存じないですか?
アニキぼすけて selectでいうselectedIndexみたいなのをラジオボックスで使えませんか? checkedでbool拾うしかないですかね?
654 :
Name_Not_Found :2011/06/13(月) 22:07:14.56 ID:nGlFUN44
655 :
Name_Not_Found :2011/06/13(月) 22:16:09.92 ID:nGlFUN44
>>653 input[type=checked][name=hoge]:checked
でチェックされてる要素はとれるだろうから
それでゴニョゴニョすれば
656 :
Name_Not_Found :2011/06/13(月) 22:18:27.09 ID:5y0uOpHU
>>654 おおっ!日本語を取得できました!素晴らしいです!
ありがとうございます!
ところで、自分のやり方が悪いのか知りませんが、半角イコール記号がエスケープされません。
これだとパラメータ的として致命的な欠陥になりそうですね。
これは自前でエスケープするべきでしょうか?
>>656 encodeURIComponentは?
658 :
Name_Not_Found :2011/06/13(月) 22:25:31.40 ID:nGlFUN44
659 :
Name_Not_Found :2011/06/13(月) 22:25:42.10 ID:nGlFUN44
ああかぶったごめんなさい
660 :
Name_Not_Found :2011/06/13(月) 22:31:57.87 ID:zFDNhwB+
クリックで画像を入れ替える方法は検索ですぐ発見できましたが、 gifアニメをクリックで入れ替える方法はありますでしょうか? 画像を入れ替える方法で単にjpg画像をgif動画に変えただけでは無理でした。 よろしくお願いします。
661 :
Name_Not_Found :2011/06/13(月) 22:32:17.27 ID:5y0uOpHU
>>657-658 こ、こいつはすごい関数ですね!
探し求めていた関数ですよ!
ありがとうございます!
IE、firefoxだと document.getElementById("hoge").contentWindow.document.getElementById('fuge') でインラインフレーム(hoge)の(fuge)を取得できるんですが クロームだと上手くいきません document.getElementById("hoge").contentWindow.documentでundefinedとなるのですが
contentDocument
>>663 document.getElementById("hoge").contentDocument
でもundefinedでした
ちなみにバージョンは12.0です
665 :
Name_Not_Found :2011/06/13(月) 23:16:00.56 ID:PICTJC8/
666 :
640 :2011/06/13(月) 23:16:12.10 ID:???
>>643 ありがとうございます
ということは、やはりCGIとかJSPとかを組まないと駄目なのですね
難しそうですが勉強します
>>640 それPOSTを有効活用できてないぞ。自分でPOSTするページも作ったんでしょ?目的があるはず。
情報を次のページへ渡したいなら、urlに〜?a=1&b=2とかでクエリいれるか、
CookieとかlocalStorage使えばいいと思うよ。
668 :
Name_Not_Found :2011/06/13(月) 23:28:57.15 ID:nGlFUN44
670 :
Name_Not_Found :2011/06/13(月) 23:32:36.85 ID:nGlFUN44
>>664 ローカルファイル(file:///〜)だと別ドメイン扱いになるくさい。
起動オプション --allow-file-access-from-files 付けて開けばおけぃさ。
関係ないけどchromeってやたらローカル仕様が異なる場合が多いんだけどなぜ? 別用途の目的でもあるの?
【環境】 Windows 7 SP1 64bit、Firefox3.6.17 【何をしたのか】 - 【エラーメッセージ】 - 【期待する結果】 <input type="text">にフォーカスが移った時に、右クリックメニューを表示したい。 右クリックメニューはブラウザ標準のメニューです。(コピー・貼り付け等) 【サンプルコード】 <input type="text" value="TEST" align="right" readonly onfocus="this.select()"> あと、【期待する結果】に書いた内容とは別に、Firefox3.6.17でJavascriptのみを使って 文字列をクリップボードにコピーをする方法があれば知りたいです。 ※下記のようなFlashとの組み合わせでなく。 labs.unoh.net/2009/01/javascript_flash10.html よろしくお願いします。
674 :
Name_Not_Found :2011/06/14(火) 02:16:59.85 ID:xayMKQEi
むり
refererを付けずにリンクを開く方法ってありますか?
dataurlの中でlocation.href =URLとかやればできそう
>>662 Apache インストールするのが確実
GC でなくても file:/// は挙動が違う
Garbage Collection
679 :
Name_Not_Found :2011/06/14(火) 11:50:24.18 ID:5DboEh0C
680 :
679 :2011/06/14(火) 12:05:51.43 ID:7H9XEaUF
自己解決しました。 スレを汚してスミマセン(恐縮 × changeDisabled(this.form,['test1'], ['test2','test3'])">例1 ○ changeDisabled(this.form,['test1'], ['test2','test3','test4','test5'])">例1
681 :
677 :2011/06/14(火) 12:36:06.50 ID:???
Google Chrome
>>671 >>677 ありがとうございます!
クライアント側でもローカルとかそーじゃないかで結構変わってくるんですね
ヘンな先入観もってました、助かりましたちゃんとなりましたー
683 :
Name_Not_Found :2011/06/14(火) 17:35:05.20 ID:BbAXg++Z
contenteditable をつかったときキャレット位置を得ることは出来ますか? できないのかなあー
684 :
Name_Not_Found :2011/06/14(火) 18:10:17.30 ID:jdIpOn/g
Thickboxについて質問があります。 リンクで別URLに遷移と同時にすぐにThickboxのウィンドを表示させたいのですがどのようにすればよいでしょうか?
685 :
Name_Not_Found :2011/06/14(火) 18:54:55.05 ID:xayMKQEi
Thickboxに、ボックスを開くメソッドがあるだろうから それを発火させれば
686 :
684 :2011/06/14(火) 19:30:04.74 ID:???
Ajaxについて教えてください application/octet-stream形式のレスポンス(ファイル)を受けとりたいのですが、 どうやれば実現できますか?
>>687 // slidemenu.js
if(sl!=null){m.timer=setInterval(function(){slideMenu.slide(sa[sl-1])},t)}
sl(buildの第5引数)の値で特定要素のスタイルが変更される。
slideMenu.build('sm',200,10,10,null)
引数をnull(無し)にすりゃいい。
690 :
673 :2011/06/14(火) 22:44:34.18 ID:???
>>674 分かりました。
ありがとうございました。
javascript:window.open("");location.replace("
http://www.yahoo.co.jp/ ");
新しいタブを開いてそこに指定したアドレスに飛びたいのですが
新しいタブを開区と頃まではいけましたが飛べません
アドバイスお願いいたします
ごめんなさい自己解決しました
window オブジェクトがもとのページを見てるよ
186 Name_Not_Found sage 2011/06/02(木) 15:52:40.14 ID:??? 自己解決したコード貼ってきなよ 187 Name_Not_Found sage 2011/06/02(木) 16:04:56.12 ID:??? いやです 188 Name_Not_Found sage 2011/06/02(木) 16:17:41.88 ID:??? つまり自分で試して分かったからここに書く必要ないって事ですね 189 Name_Not_Found sage 2011/06/02(木) 17:12:00.26 ID:??? 教えてもらうのはいいけど 教えてあげるのは嫌やでぇーという事ですね
上から目線な煽り屋がいれば自己解決してもここにコードなんて書いてく気にならんだろう
いちいち絡んでくる奴がいるから「自己解決しました」じゃなくて「質問を取り下げます」とレスしといたほうが無難だね
クッキーにデータを追加保存したいのですが document.cookie = string1; を保存して、次実行したらは document.cookie = string2; を追加、という風にしたいのですが如何せん上手くいきません やっぱりクッキーを読み込んでstring1を呼び出し document.cookie =string1 + string2; とやるしかないのでしょうか?
>>689 遅くなりましたが、ご丁寧にありがとうございました!!
>>698 当り前でしょ。あなたの「望んでいる」方式を採用した場合、
「既にあるデータを書き換えたい」ときはどうするわけ?
>>700 document.cookie +=string2
みたいな感じでできるのかなーと
>>698 stringを略さないで中身書いてくれないと・・・
書き方が間違ってるんじゃないの?
document.cookie="a=1";
document.cookie="b=2";
alert(document.cookie);
document.cookie="a=3";
document.cookie="c=4;expires=Wed, 15-Jun-2011 10:00:00 GMT+9";
alert(document.cookie);
cの有効期限は今日の10時まで
他はブラウザ閉じたら無効になるセッションクッキー
質問です。 イベントハンドラの登録において、addEventListenerを使う方法とonを使う方法がありますが、 キャプチャをしない&2つ以上登録しないことがわかっている場合はどちらを使っても同じでしょうか? なるべく癖としてaddEventListenerを使うようにはしているのですが、 img.onloadなどでついそちらを使ってしまうことが多いので質問しました。
なるほど、有効期限はやってますー それと追加質問なんですが a.htmlで保存したクッキーをb.htmlで取得する方法あります? 1日に2回も質問してしまってすみません
705 :
Name_Not_Found :2011/06/15(水) 15:44:41.57 ID:kneo6M8L
>>703 eventをハンドリングできるかどうか、とか
706 :
Name_Not_Found :2011/06/15(水) 15:45:33.68 ID:kneo6M8L
>>704 普通にdocument.cookieを見ればいい
もともとそういう用途のためのものと言っても過言ではない気がする
>>706 ありがとうございます!
凄いですねjavascriptは、何でも出来る気がしてきます
ページが呼ばれたとき、要求がGETかPOSTかをjavascriptで判断することはできますか?
709 :
Name_Not_Found :2011/06/15(水) 21:01:49.55 ID:kneo6M8L
>>708 JavaScriptは呼ぶ側にいるのです
710 :
Name_Not_Found :2011/06/15(水) 21:05:50.11 ID:n4fyKVeo
>>709 つまり、不可能なのですね。
ありがとうございました。
>>707 javascriptで北朝鮮と韓国と中国を潰してください
>>710 うるさいこと言うけど不可能なんじゃなくて無関係なんだよ
GETやPOSTを受け取るのはサーバサイド
JSが実行されるのはクライアントサイドだからね
>>712 了解しました。
確かに、クライアントが受け取る訳じゃないですね。
判断するのはサーバアプリですね。
array[1]〜array[100]を test1〜test100っていう変数に入れたいんですけどどうしたらいいでしょう? for(i=1; i<=100; i++){ testi = array[1]; } じゃtestiっていう変数に入るだけで無理でした
>>714 FAQのQ7A7と思ったらなんだよこれ
テンプレと本スレと別サイトとでQナンバーかぶってんじゃん
これ作ったアホは書き直せよ
だから別サイトは嫌なんだよ
同じもの載せる必要はないよね、載せるなら分ける必要ないだろ
>>715 元々はあの数だったのを今の数に減らしてからNoが合わなくなってる
テンプレを飛ばしNoにするのは合理的ではないから今のままでいいと思うけど
HPから引用してるなら統一しろや
ヒューレットパッカード?
>>714 変数何かいらないよ
for(i=1; i<=100; i++){
array[i]="test"+i;
}
>>714 変数100個も使う時点で既におかしい。素直に配列使う設計に直せ。
javascriptでwavファイルを鳴らしたいんですが 鳴らすときにwavファイルにアクセスするのではなくて ページを表示したときにwavファイルを読み込ませておく方法ってありませんか?
723 :
Name_Not_Found :2011/06/16(木) 11:17:02.67 ID:QKx/TX46
【環境】IE9 【期待する結果】 jQueryを使って特定hogeの配下にあるfugaを取得したいです。 var hogeList = $('.hoge'); と、hogeのオブジェクト一覧がhogeListにある前提です。 「どこかのhoge」配下のfugaなら$('.hoge .fuga')でもよさそうですが、「特定のhoge」配下のfugaを取得したいです。 直接DOM使って冗長なコード書いても問題なくfugaが取得できそうですが、 jQueryならではの何かショートカットはないでしょうか? 【サンプルコード】 <div class="hoge"> : <piyo> <h2 class="fuga" /> </piyo> </div> <div class="hoge"> : <h2 class="fuga" /> </div> (以下略) よろしくお願いします。
何でjavascript1.5で止まってるんですか? 1.6とか2.xとかどんどんバージョンアップされていますよね? 何で最新の5大ブラウザ全てが対応してないのですか?
>>723 CSSセレクタを勉強するんだ
.hoge > .fuga
726 :
Name_Not_Found :2011/06/16(木) 12:04:13.34 ID:QKx/TX46
>>723 自己レス。
$(hogeList[n]).find('h2.fuga')でいけました。
配列 = splitとか使うとき 配列をnew Array();で宣言する必要ないと思うんですが、する場合としない場合があるのはなぜなんでしょうか? もしかして配列をvar 配列と宣言しなおしたりnew Array()と宣言すると空っぽになったりするんでしょうか?
730 :
Name_Not_Found :2011/06/16(木) 13:15:27.57 ID:8YKi/605
質問です フォームを利用したWebアプリケーションを作成しています。 以下のフォームで、削除をクリックした時に、remove() より、submit を実行します。 ボタンをクリックする場合には、望んだ通りの挙動になります。 しかし、idを入力するテキストボックスでEnterを押した場合には、 remove() を通さず submit のような挙動になってしまいます。 Enterで飛ばないようにするには、非表示のテキストボックスを追加で配置すればよいようなのですが、 逆に、Enterを押した時に remove() を実行させるようにする方法が分からず困っております。 解決法をご存じでしたら教えてください。(なるべくブラウザを問わない方法でお願いします) remove() { // input name="name" に、 valueを設定 // こちらからsubmitを実行(); } <form method="post" class="remove"> <input type="text" name="id"/> <input type="hidden" name="name"/> <input type="hidden" name="type" value="remove"/> <button type="button" onclick="remove()"/>削除</button> </form>
>>729 var arr = new Array(); arr = str.split(""); ってことか?
var arr = str.split(""); と同じ。
先に何が入ってようが、代入した時点でそれは上書きされるんだから関係ない。
>>730 <input type="text">でEnterすればsubmit()が呼ばれるんだから、
submit()の中でremove()を呼べばおk
いまsubmit()の中で処理しているものを、別の場所から単体で呼ぶ必要があるなら、
その処理を丸ごと別の関数にしておいて、それをsubmit()から呼べばおk
>>732 そうです。御免なさいです説明不足でした
勉強になりました
>>730 formにonsubmit
buttonのtypeをsubmit
>>729 極局所的に使われる一時変数は別だけど、重要な変数はデータ型をあらかじめ明示しとく。
var arr = []; // コメント
行頭にでもまとめて注意を促せば、単純な名前でも上書きするミスが減るし、可読性も良くなるわな。
>>736 本だけの知識でしたが本当に勉強になります。感謝の極みです
データ型なんてPHPのMySQLぐらいでしか注意してませんでした。javascriptでもミスが出たりするんですね
質問です 誰でも入力可能なテキストエリアの値をinnerHTMLでそのまま表示すると危険と言われたのですが本当ですか? スクリプト実行されてハッキングされ放題なんでしょうか?
そいつが入力した値をそいつのブラウザだけで表示するなら問題ないよ 他の人のブラウザで表示するなら問題
>>738 「クロスサイトリクエストフォージェリ」で検索して勉強すれ。
読んでも理解できないなら、そういう仕事をしてはいけない。
Oh...了解です
742 :
Name_Not_Found :2011/06/16(木) 16:31:57.49 ID:mr/Ai4o/
クロスサイトリクエストフォージェリって 想定しないリクエストを受け付けちゃう、って問題じゃないの? はまちちゃんのアレみたいな
まぁサーバー側は問題ないから安全っちゃあ安全だろ クッキーをイジられてINNERHTMLしちゃってもクライアント側が痛い目見るだけやし
ウイルス作成罪でサーバ没収されるかも 純粋なウイルスじゃなくても適用範囲は広いから・・・
政治家ってウイルスが特別な個体とか思ってるんだろ
はまちちゃん逮捕されないの?
クロスサイトスクリプティングの方だな。 まあ要するに、自分の設置したサイトに穴があると、 悪意ある他人がその穴に好き勝手なプログラム仕込んで別の第三者にアクセスさせることで 誘導された第三者がそのプログラムを実行してしまい、被害を受けるだろうってこと。 直接表示、eval、Functionコンストラクタ、その他いろいろ穴を作る可能性のあるものがある。 プログラムを作る時の前提は、他から取り込んだデータは 絶対に信用できるレベルまで洗うこと。洗わず使ったり表示したりはダメ。
evalは前から気をつけろって言われてたけど直接表示についてだけどさ クッキーとかを表示するときdocument.writeもinnerHTMLも変わらないと思うんだよね セキュリティ面に関してだけど
閲覧者が入力したデータをinnerHTMLで表示しても 閲覧者自身が自分の行為の結果を受けるだけじゃないんですか?
evalもwriteもinner*も用途がわからん
evalの話題は荒れるからやめようぜ
evalはお遊びにしか使えないな
htmlエレメントをstyleも込で作れる関数の中で使ってる。 eval('elem.' + attr[i][0] + '=attr[i][1]'); evalのおかげでイベント用の関数もそのまま引数として渡せるようになった。
<script> a = 1; function a(){ alert(a); } </script> aにvarをつけたほうがいいですか?
757 :
Name_Not_Found :2011/06/16(木) 22:31:59.93 ID:mr/Ai4o/
varって書く意味がわかってるなら別にどちらでも。 よくわからないなら書いた方が。
type付けよう
クロスサイトスクリプティング対策として、以下のような関数を作成しました。 function strToHtml( str ) { str = str.replace( /&/g, "&" ); str = str.replace( /</g, "<" ); str = str.replace( />/g, ">" ); str = str.replace( /"/g, """ ); str = str.replace( /'/g, "'" ); return str; } function htmlToStr( html ) { html = html.replace( /'/g, "\'" ); html = html.replace( /"/g, "\"" ); html = html.replace( />/g, ">" ); html = html.replace( /</g, "<" ); html = html.replace( /&/g, "&" ); return html; } もっと効率の良い書き方はないものでしょうか?
すみません。 ここもHTMLだということを忘れてました。 function strToHtml( str ) { str = str.replace( /&/g, "&amp;" ); str = str.replace( /</g, "&lt;" ); str = str.replace( />/g, "&gt;" ); str = str.replace( /"/g, "&quot;" ); str = str.replace( /'/g, "&apos;" ); return str; } function htmlToStr( html ) { html = html.replace( /&apos;/g, "\'" ); html = html.replace( /&quot;/g, "\"" ); html = html.replace( /&gt;/g, ">" ); html = html.replace( /&lt;/g, "<" ); html = html.replace( /&amp;/g, "&" ); return html; } 全角アンパサンドは半角だと思ってください。
>>760 5つの文字だけしかやらないんならXSS対策になりませんよ
サロゲートペアとかブラウザの実装はどうなんだろう、正規化されるのかな まあテキストとして扱うなら普通はtextContentなりdocument.createTextNodeで
>>765 ヌル文字をエスケープするのですか?
どんな文字に置換するのか想像もつかないですね。
str = str.replace( /\0/g, "" );
ちなみに\の置換で\0は消せないのでよろしく
>>765-766 ありがとうございました。
ヌル文字の置換も行うようにします。
合計6種類の文字の置換ですね。
俺みたいなカス初心者には参考になるな
おいサロゲートペア無視するなよww
775 :
Name_Not_Found :2011/06/17(金) 01:09:36.40 ID:QK27aoQf
jQueryとDOMでimg要素を作って、HTMLに挿入するコードを作ったのですが、 IE9だと挿入されません。IE6、7、8互換モードだと想定通りの動きをしますが、 IE9だけダメなようです。(その部分より下が1行下にずれるので「何か」が入ってるようには見えるのですが…) var element = $(document.createElement('img')); element.attr('src', 'image/hoge.png'); element.attr('width', '236'); element.attr('height', '60'); target.after(element);
776 :
564 :2011/06/17(金) 01:34:57.76 ID:???
<input id="t1" type="text" size="14"> var t1=document.getElementById("t1"); テキストボックスに入力した値をt1とした場合 このt1が半角数字か、半角数字以外かを判断するには どうすればいいのですか?
if(/^\d+$/.test(t1.value)) alert('半角数字でつ');
778 :
564 :2011/06/17(金) 01:51:18.96 ID:???
779 :
730 :2011/06/17(金) 02:45:42.75 ID:???
>>733 >>735 さん
二人のアドバイスのおかげで、思ったような挙動になりました。
formにonsubmitがあったことや、その場合にsubmitを利用すれば良いことを知らなかったので
どちらかのアドバイスだけでは、解決するまで余分に時間が掛かっていたかもしれません。
有用な情報を教えていただき、本当に有り難うございました。
remove() {
// input name="name" に、value を設定
// 送信可能な状態かを判断
// 戻り値として true か false を返す
}
<form method="post" onsubmit="return remove()">
<input type="text" name="id"/>
<input type="hidden" name="name"/>
<input type="hidden" name="type" value="remove"/>
<button type="submit">削除</button>
</form>
780 :
Name_Not_Found :2011/06/17(金) 02:45:57.57 ID:vR5kbH9N
javascript、初心者です。特殊文字変換に関して分からないことがあります。 <>といった特殊文字を投稿するときに&lt;や&gt;に変換するjavascriptを使用したいと思っています。 上の方(headタグ内)に、 <SCRIPT type="text/javascript"> <!-- var replKeywords = { '&': '&amp;', '<': '&lt;', '>': '&gt;' } onload = 〜 //--> </SCRIPT> があります。 (&lt;等は全角で書いています、半角だと思ってください) 下に続く
781 :
780 :2011/06/17(金) 02:49:45.90 ID:vR5kbH9N
下の方(bodyタグ直後)に、 <button onclick="javascript: showhideForm()" accesskey="i">入力フォーム</button> <SCRIPT type="text/JavaScript"> <!-- window.onload=showhideForm; function showhideForm() { var form = document.getElementsByTagName('form')[0].style; form.display = form.display !== 'none'? 'none': 'block'; init(); } --> </SCRIPT> IEで確認した所、うまくいったのですが、 Firefoxではうまくいきませんでした。 そこで、他所で質問したところ、 >上の方(headタグ内)にある、 >onload = >を消してしまえば動くと思います。 とのことで試してみたところ、確かにIEでもFirefoxでも、うまくいったのですが、 今度はIEでもFirefoxでも他のページのフォームで特殊文字が変換できなくなりました。 下に続く
782 :
780 :2011/06/17(金) 02:51:42.86 ID:vR5kbH9N
他のページでは、はじめからフォームがあります。 つまり、 <button onclick="javascript: showhideForm()" accesskey="i">入力フォーム</button> 〜 </SCRIPT> が存在しません。 onload = を消さず、IEでもFirefoxでも特殊文字が変換できないでしょうか? または、消してもいいので、なんとかならないでしょうか。
>>755 var attr = [
{ className : "cls1 bgcol1", id : "id1", style : { display : "none" } },
{ className : "cls2 bgcol2", id : "id2", style : { position : "absolute", top : "10px", left : "3px" } },
{ className : "cls3 bgcol3", id : "id3", click : funcClickId3 }
];
もしこの程度のものだとしたら、どう見てもevalいらんぞ。
これ以上のものがあるかは、今すぐには思いつかんが。
>>780 単純なのは、showhideFormの方でonloadをやめて
addEventListenerかattachEventにする。
if (window.addEventListener) {
window.addEventListener("load", showhideForm, false);
}
else {
window.attachEvent("onclick", showhideForm);
}
addEventListenerとattachEventのどちらも使えないブラウザじゃ動かんが、
今じゃそんなん対応させる意味もないだろうし。
"onclick"じゃねーや。"onload"なw
ゲームなんかで使う画像を全て開いたときに先読みする場合って var img_src = ['1.jpg','2.jpg','3.jpg','4.jpg','5.jpg']; var p = 0; var img_obj = {}; function load() { if (!img_obj[img_src[p]]) { img_obj[img_src[p]] = new Image(img_src[p]); img_obj[img_src[p]].onload = p++; return true; } else { return false; } } while (load()) {} こんな感じでいいんですか?
787 :
780 :2011/06/17(金) 06:44:45.92 ID:vR5kbH9N
>>784 こうしろということですか?
なんか、エラーが出て、うまくいかないんですが…
<button onclick="javascript: showhideForm()" accesskey="i">入力フォーム</button>
<SCRIPT type="text/JavaScript">
<!--
if (window.addEventListener) {
window.addEventListener("load", showhideForm, false);
}
else {
window.attachEvent("onload", showhideForm);
}
-->
</SCRIPT>
>>787 書き間違ったかと思ったが、ちゃんと通るのを確認した。
関数 showhideForm() は残せよ?
置き換えるのは showhideFormをonloadに登録してる1行だけ。
つまり window.onload=showhideForm;
>>786 そのonloadには何を入れている?w
キャッシュされてるか確認するには、ブラウザのキャッシュ削除しておいて、
その処理実行しただけで画像がキャッシュフォルダにくるか見ればいい。
"JavaScript 画像 先読み"でググればいろいろ出てるが、
ブラウザによっては多数同時に読みに行くと止まるみたいだし、
処理をブロックされにくくするならこんな感じ?
var img_src = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg'];
function img_load(arr) {
var i = arr.length;
while (i--){ setTimeout(load(arr[i]), 0); }
function load(src) {
return function() {
var obj = new Image();
obj.src = src;
}
}
}
img_load(img_src);
790 :
780 :2011/06/17(金) 07:31:20.17 ID:vR5kbH9N
>>788 フヒヒ…
できました!!
ありがとうございます。
もしかして、JavaScript ではヌルバイト攻撃に対処不能ですか? 探しても対応策の情報がでてこないのです。 JavaScript の処理中で影響がなければ、サーブレット側で処理ですかね?
792 :
755 :2011/06/17(金) 07:42:56.36 ID:???
>>759 ,783
たしかに、[.]が入るのだけ注意すればevalいらんね。
作ったのが大分前だから1行でかけることに惹かれたんだと思うw
attrは[['id', 'tst_1'], ['style.color', 'black'], ["onclick", function(){alert(this);}]]こんなかんじ。
793 :
786 :2011/06/17(金) 07:46:28.82 ID:???
>>789 src入れないとだめですよね
ほんとすみません変なコード書いちゃって
そしてコードどうもありがとうございます
詳しい説明助かります
早速試してみますね
>>792 evalなしでも一行で書けるよ
正規化に拘るのならどっちにしろ attr[i][0] 検査しないと
elem[attr[i][0]] = attr[i][1];
evalでevalなよ・・・
【審議中】 ∧,,∧ ∧,,∧ ∧ (´・ω・) (・ω・`) ∧∧ ( ´・ω) U) ( つと ノ(ω・` ) | U ( ´・) (・` ) と ノ u-u (l ) ( ノu-u `u-u'. `u-u'
いや、eval使いこなしてる奴はevaってもいいかもしれん
なんか最近ここで質問に答えた時とその反応が気持ちよくて 教師になっちゃおうかなって思ったりする
ウイルス作成罪ワロタw >改正案は、ウイルス(不正指令電磁的記録)を、「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、 >又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録」と規定。 グーグルクロームの情報送信も教えなかったらウイルスじゃねーかよw 電子レンジで猫を温めてはいけないレベル
801 :
Name_Not_Found :2011/06/17(金) 16:12:21.07 ID:XhwdOWJ/
>>800 多くの初心者にとって、OSそのものがウィルスになっちゃうなw
イカタコウイルスも avi.exeって注意書きしてるから意図には反してなくね? もう「これはウイルスです!実行したらHD全消去されます!」とかやっても逮捕されるレベル
ぶっちゃけここで語らなければならない話題でもない
>>800 不具合を放置した放置した場合も適用されたはずだぞ。
805 :
Name_Not_Found :2011/06/17(金) 19:09:07.73 ID:OUSHO4Kr
JavaScriptでヌルバイト攻撃に対処するにはどう書けばいいですか?
デバッグのためCocProxyでhttpsなサイトにアクセスすると表示できないんですが、どうしたらいいでしょうか…
809 :
Name_Not_Found :2011/06/17(金) 23:54:18.85 ID:JwluWHKe
タイマーIDを変数で受け取らなかった setInterval を解除したいんだけど、 どうしたらいいんだろう? windowの中に入ってるような気がするんだけど無理なのかな?
var a=setInterval(function(){},0); clearInterval(a-1); とすると俺の環境では上手くいくww
全部解除したいならそのaから0までwhileあたりで回せばいいんだろうけど 任意の物となるとどうなんだろ
IEは返ってくる数値がやたらでっかいな
jwordが犯罪認定されると聞いてとんできました
>>809 変数に代入してないからwindowからも触れない。
タイマーidを管理してくれるクラスを作って、キャンセルできるインターフェースを追加したらいいんじゃないかな
script function tdclick() { var td = document.getElementById('tbl').getElementsByTagName('td'); for (var i = 0; i < td.length; i++) { td[i].addEventListener('click', function(){ alert(td[i].textContent); }, false); } } window.addEventListener('load', tdclick, false); html <table border="1" id="tbl"> <tr><th>AA</th><th>BB</th><th>CC</th></tr> <tr><td>A1</td><td>B1</td><td>C1</td></tr> <tr><td>A2</td><td>B2</td><td>C2</td></tr> </table> td[i]が定義されてないというエラーが出てイベントが登録できません forで回さずに td[0].addEventListener('click', function(){ alert(td[0].textContent); }, false); td[1].addEventListener('click', function(){ alert(td[1].textContent); }, false); このようにすれば登録できるみたいなんですけどどうやって登録するのが正しいのでしょうか?
>>815 function tdclick() {
var nodes = document.getElementById('tbl').getElementsByTagName('td');
for (var i = 0; i < nodes.length; i++) {
nodes[i].addEventListener('click', strAlert(nodes[i].textContent), false);
}
function strAlert(str) {
return function(){ alert(str); };
}
}
window.addEventListener('load', tdclick, false);
iがループで変化してる。どのセルをクリックしても td[6](=存在しない)を参照しようとする。
クロージャ作って必要な値をしっかり切り離して固定しないとダメ。
デバッガ使って、バグった時点のiの値を見れば原因の見当がついたはず。デバッガ覚えること推奨。
817 :
815 :2011/06/18(土) 08:47:58.60 ID:???
>>816 どうもありがとうございます
firefoxのエラーメッセージ見てましたが使い方がよくわからなくて
頑張ってデバッガの使い方を勉強します
クロージャもよくわからないのでそちらも調べてみます
>>815 function tdclick() {
var td = document.getElementById('tbl').getElementsByTagName('td');
for (var i = 0; i < td.length; i++)(function(targetTd){
targetTd.addEventListener('click', function(){ alert(targetTd.textContent); }, false);
}(td[i]);
}
window.addEventListener('load', tdclick, false);
多分解決してると思うけど、こういう書き方もある。
これ何でテンプレにないのかね 初心者がはまる黄金パターンだろ
お茶飲んでたらふと思った。 本当にやりたいことってたぶんこういうことだよなw function tdclick() { var nodes = document.getElementById('tbl').getElementsByTagName('td'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function(){ alert(this.textContent); }, false); } }
>>807 ありがとうございます。
アレはサーバサイドが対処するものなのですか?
XSSはクライアントサイドで対処するもので、
その質問の中で出てきたのでこれもクライアントサイドかと・・・。
ユーザの入力値を、サーバ側のファイル系関数とかに
ノーチェックで入れたりしなければ大丈夫ですよね?
何もできない、が正しいな。 ユーザーの入力データをJavaScriptが受け取る前に、 ブラウザがそれをJavaScriptに渡すように処理するが、 その処理に穴があるとマズいって話。
>>815-819 それは
>>2 のQ7/A7をさして同じ問題だと言えばよい。
それで真面目に考えない方はお帰り頂きたいと思っている。
答えるほうもいちいちこねくり回さずにそうひとこと言えばいいのに。
>>822 ありがとうございます。
ブラウザの作り次第、ということでしょうか?
this問題とはまた別なんじゃないの
解決方法という意味では、どちらもクロージャ使えってことで同じ。 問題の内容としては、ループ内で変化する値を固定したいという話と、 実行時のthisが違うという話は全く別のことだな。
>>818 は動かないでしょforの外にあるし
for()(function(){
はコード的にもちょっと気持ち悪い・・・
for () {
(function(hoge){
hoge.addEventListener();
})(td[i]);
}
ループ回さなくてもすむならループ回さない方向で <html> <body> <table border="1" id="tbl"> <tr><th>AA</th><th>BB</th><th>CC</th></tr> <tr><td>A1</td><td>B1</td><td>C1</td></tr> <tr><td>A2</td><td>B2</td><td>C2</td></tr> </table> <script> (function(){ document.getElementById("tbl").addEventListener("click",function(event){ if(event.target.nodeName.toLowerCase()==="td"){ alert(event.target.textContent); } },false); })(); </script> </body> </html>
>>828 ・クロージャかどうかという点では、厳密な意味で言えばクロージャ。
入れ子関数が1つでも生きてる限り、親関数のCallオブジェクトは破棄されない。
・クロージャにする意味があるかどうかという点では、この場合は意味はない。
関数に名前つけて外に出してしまえば、無駄にメモリ確保を続けることがなくなる。
もちろん、普通はそうするべき。
・
>>820 が
>>815 の解決方法として適切かどうかについては、
>>815 自身が動作を理解して考えるしかないな。
動作の意味が違っているわけだから。
結果が一緒なら動作の意味なんて考えなくてもいい というスタンスだったがこのままじゃヤバイか キミらの話難しくてついていけないぜ
>>827 記述ミスがあるから動かないけど、ちゃんと記述されてれば動くよ。
forの後の(function(targetTd){から})(td[i]);までが
1つのブロックとして解釈される。
>>831 処理が最も単純なのは>829。これで解決するならこれでいい。
ただ、tableにいろいろ追加・変更したり、腐ったブラウザ(IE8以前とか)に対応させようとすると、
書き換えなきゃいけない部分がいろいろ出てくる。
発想として最も単純なのは>820。変更があるとしても、書き換える部分はそんなに多くないし、
その場合、>829の「イベントは発生するが処理から除外する」という発想よりは
「イベントハンドラをつけない」という発想の方が、たぶん分かりやすい。
問題の本質が「対象のtextContentを特定する」ことではなくて、「 i を固定すること」だった場合、
>829も>820も参考にならない。たとえばtdの数と同じだけの要素数を持った配列が別にあって、
それを各イベントハンドラに対応させようとするなら、>816とかを参考にしてクロージャ作るしかない。
どれが>815にとって本当にちょうどいい回答なのかは、>815の質問だけでは判断し切れない部分があるわけ。
動作の意味がどうこうってはそういうこと。
まとめ乙
>>829 のはクリック毎に毎回判定する感じなのかな?
効率は悪そうに見えるけどどうなんだろう?
>>835 この程度なら無視できるレベルじゃないのかな
メモリ効率はこっちの方が良さそう
それぞれどういう関係なんですか 数をたくさん登録してメモリを使うか 広い範囲を指定してバブリング毎に調べてCPUを使うか?
>>829 は対象のtd要素ノードが replaceChild されても動きますが、他は動きません。
>>839 上下関係はJavaScript関係ない。CSSのz-index
すっごい初歩的な質問なんですが function a(){} function b(){} とあるとき、function bを実行したときfunction bの中でfunction aを実行するにはどうしたらよいのでしょうか?
>>841 function b(){ a(); }
>>841 「原理原則」や「机上の空論」を正論と思って賞賛してよいのは中学二年生まで
846 :
839 :2011/06/18(土) 19:11:29.07 ID:???
>>840 すいません、仰るとおりでした。ありがとうございました。
使い終わった変数にnullを代入するのはどういう場合にするんですか?常にしたほうがいいんですか?
循環参照を切るときかな
>>847 理由は2つ。
1つは「あとでその変数を調べることがあって、
その時にnullが入ってることを期待したい」場合。
たとえば処理済みの印代わりとしての意味。
もう1つは「その変数に何らかの参照が入っていて、
別の何かを代入することで参照を切りたい」場合。
もはや使わないオブジェクトの参照を切って、メモリの解放を期待する意味。
このどちらでもないなら不要。
>>848-849 どうもありがとうございます
不要な場合のほうが多いんですね
あんまりよくわかっていないのでそのままにしておきます
phpと組み合わせて onclieck="func(a,b〜n)" と中の引数が1〜複数に変わるイベントハンドラを作ったんですが function func(???){ for(i=1; i<=引数の数) array[1] = } とやる場合どーすればいいんでしょ?
853 :
852 :2011/06/18(土) 21:18:12.99 ID:???
ごめんなさい、書いてる途中にかきこみしてしまいました phpと組み合わせて onclieck="func(a,b〜n)" と中の引数が1〜複数に変わるイベントハンドラを作ったんですが function func(a1,b1〜n1){ for(i=1; i<=引数の数; i++) array[i] =第 i 引数(a1); } とやる場合どーすればいいんでしょ?
function hello(){ alert(arguments) // [1,2,3,4,5,6] } hello(1,2,3,4,5,6);
PHP関係あるんかいな オンクリークじゃ動かんで
php関係あるというか phpでファイル読み込んで、そのファイルの数だけ引数作るという感じです ファイル数が3個なら func(a,b,c) 7個なら func(a,b,c,d,e,f,g) という具合に
絶対設計を見直すことをおすすめします
>>852 array[1] = a1;
array[2] = b1;
array[3] = c1;
…
array[n] = n1;
ってこと?
function func() {
var x = array[0];
array = [];
Array.prototype.push.apply(array, arguments);
array.unshift(x);
}
>>857 それは心の底から思うが、言われて直せるなら最初からこんな設計してないw
おっと、微妙に無駄なことしてたな。 function func() { array = [array[0]]; Array.prototype.push.apply(array, arguments); }
今ひらめいた a,b,c,d,e〜をさいっその事 a/b/c/d/e〜って一つにしちゃって それを/でスプリットすればいいんじゃね? そーすりゃarray.lengthで数取り出してarray[1]で値も取り出せる
>>862 普通、PHPでJavaScriptのコード吐くなら、最初からJavaScriptで読めるデータ作る。
つまり
var arr = [ a1, b1 c1, ... n1 ];
↑この一行をPHPで吐くようにしてる。
わざわざ引数することも1つの文字列にすることもない。てかそんな発想普通出てこないw
>>861 Array.prototype.slice.call(arguments);
C++等にあるような、インスタンスを作らずに「クラス名.変数名」のような感じでアクセスできる クラスstatic変数を作りたいのですが、prototype内に変数を作って「クラス名.prototype.変数名」とする以外の手が今のところ見つかりません これ以外に効果的な方法ってありますでしょうか?
C++はClassベースのオブジェクト指向言語で、JavaScriptはPrototypeベース。 全く別物
>>865 関数名.prototype.変数名がイヤなら、関数名.変数名でかまわんぞ。
関数はオブジェクトだ。
>>864 第一要素をunshiftするなら結局2行じゃん
869 :
Name_Not_Found :2011/06/18(土) 22:43:21.00 ID:jAhRCGR2
>>868 Array.prototype.slice.call(arguments,1);
>>869 だから何が言いたいんだよ。
>>852-853 では、どこかで定義されてる配列 array の
第一要素 array[0] を上書きしてないぞ。
そこにデータが入ってた場合に、お前さんのコードでどうなるか
分かってレスしてるんだよな?
どうせphpで渡すんなら()じゃなくって([])にすりゃ問題解決
<script> var x = 0; function testEvent(e){ console.log(e); x++; e.target.style.left += (x + "px"); setTimeout("testEvent('" + e + "')",100); } window.onload = function(){ var hoge = document.getElementById("hogehoge"); hoge.style.position = "absolute"; hoge.addEventListener("click", testEvent, false); } </script> <div id="hogehoge">hogehoge</div> hogehogeという文字をクリックすると、それが画面右にものすごい勢いで移動していくスクリプトを作りたかったのですが、うまくいきませんでした。 調べてみたところ、setTimeoutでtestEventを呼び出したときに、イベントオブジェクト(e)を渡すのに失敗していました。 e.target.style.left += (x + "px");の部分でe.targetがundefinedだと怒られました。 console.logの結果を見てみると、clickイベントで呼び出されたtestEventの引数にはちゃんとMouseEventが渡されていて targetなどのプロパティを持っていることを確認できましたが setTimeoutで呼び出された場合は [object MouseEvent] とだけ出力されており、その中身は何もないという状態です。 clickイベントによって渡されるイベントオブジェクトを使いまわすことはできないのでしょうか?
setTimeout(function(){ testEvent(e); },100); にしたらどうかな ちなみにsetTimeoutには文字列を渡さないようにしよう eval的な理由で
"testEvent('" + e + "')" これに何が入るかちょっと考えたらわかるよね
875 :
872 :2011/06/19(日) 02:10:27.40 ID:???
setTimeout("testEvent('" + e + "')",100); の部分はsettimeoutの内部でeval的な事をしているのですね 色々と理解できました。ありがとうございます。
スタイルをまとめて追加するのに、style要素を作ってそこにテキストを入れる方法ではだめなんですか? スタイルを操作するインターフェイスが用意されているのには理由があるんですか? insertRuleとかaddRuleとか難しくてよくわかりません
まあやってみろ IE6がオヌヌメ
IEでおかしなことになるんですね どうもありがとうございます
ユーザの入力値に変な値(制御文字)が紛れ込むのを防ぐために、 str = str.replace( /[\x00-\x1F]/g, "" ); とするのは有効でしょうか? 改行コードも含めて制御コードを丸ごと消したいです。
何に対して有効なのかが分からないとねえ クライアントサイドで完結してるなら意味はあるけど サーバーサイドで処理するためなら全くの無意味
>>880 ありがとうございました。
サーバサイドでも実施すれば大丈夫ですか?
PHPでできるかはまだ不明ですが。
想定しているのはユーザが変なデータを送ってくるパターンです。
>>881 サーバに送ってくるのが前提ならサーバサイドでやらないと無意味。
JavaScriptを介さずサーバに送信することができるから。
>>882 そんなことができるのですか!?
では、入力値のチェックは、クライアント側では完全に無意味なのですね。
サーバ側のチェック関数を強化するようにします。m(_ _)m
var node = document.getElementById("hoge"); var clone = node.cloneNode(true); //cloneへの処理 node.parentNode.replaceChild(node, clone); 何箇所も書き換える場合はクローンノードを作ってそっちで書き換えてから 出来上がったものを一回で差し替えたほうがいいらしいのでやってみたのですが 処理自体が多いので結局差し替えるまでの間待たされてその間操作ができません 「//cloneへの処理」を見直す以外に何かいい方法とかありますか? 定番のやり方とかあれば教えてください
何やってんだ 使うのはDocumentFragmentだろ
しかしweb制作板って民度わりと高いんだな
このスレは良い人ばかりだよ 冗談も通じるし2chの良心
888 :
884 :2011/06/19(日) 18:49:59.03 ID:???
>>885 ページ上にもともとあるノード(実際にはその子孫ノード)に対して何箇所も書き加えるので
ベースとなる元のやつを複製したほうが楽だなと思ったのですがフラグメント内に自前で構築するのですか?
それともクローンノードをいったんフラグメントに入れておくんですか?
cloneNodeで複製されたものは元のドキュメントから切り離されるらしいのでフラグメントと同じようなものだと思ってました
889 :
884 :2011/06/19(日) 18:58:13.11 ID:???
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>...</li> </ul> たとえばこういうのの各li要素を加工したいので ul要素ごとcloneNode(true)してから各li要素を加工して 最後にul要素を差し替えれば楽だと思ったのですが documentFragmentをどう使うんでしょうか 複数の要素をまとめて挿入するときの入れ物としてしか使ったことがないです
Rangeを使えるなら range.selectNodeContents(ul); var df = range.extractContents(); dfの子になっているliを加工した後 ul.appendChild(df); この場合cloneNodeは使うな ulのイベントリスナーが消える
>>888 DocumentFlagmentはただのコンテナで合ってる。ドキュメントのノードを丸ごとcloneNodeして
DocumentFlagmentに入れて操作して、最後に入れ替える、でおk。
処理があまりに遅くて、ブラウザの反応が悪くなりすぎるのであれば
処理の途中でブラウザが処理するタイミングを作るという手がある。
小手先のごまかしだから、処理そのものの改善は前提だし、
ブラウザの処理中に別のイベントが発生した場合の対処とか、一気に複雑になるけど。
// 元処理
function func() {
/* 処理1 */
/* 処理2 */
/* 処理3 */
}
// 途中でブラウザに処理を渡すパターン
function func() {
setTimeout(f1, 0);
function f1(){ /* 処理1 */ setTimeout(f2, 0); }
function f2(){ /* 処理2 */ setTimeout(f3, 0); }
function f3(){ /* 処理3 */ }
}
>>890-891 レスどうもありがとうございます
なんか急に難しい感じに・・・
レス内容はまだ理解できていないのでよく熟読します
>>891 setTimeoutを使うと並行処理みたいなことが出来る的なことが
検索したら書いてありました
やってる意味がちょっと理解できました
どうでもいいがsetTimeoutの最低値は4な
>>893 その理解でいいんだけど非同期処理は処理が衝突する可能性があるから衝突してはいけない処理は独自にロックする機構が必要だよ
>>886 このスレはともかく、板全体で見たらヒドいてw
>>894 え、そこって普通わざわざ最低値に合わせて書くもんなの?
0のがメジャーじゃね?
0は絶対にメジャーじゃない IE6かなんかで変なことになったから
setTimeoutに衝突の心配なんてあったっけ? 順番通り実行されるロジックがあれば大丈夫だろ
>>899 >>884 を例にとると、#hode を操作する処理がもう一つあると衝突する
一方が処理中であることを表すフラグをどこかにたてておけば回避できる
テンプレ議論しないの?
>>901 したいならすりゃいいと思うよ
ハイドウゾって言われるまで出来ないなら知らん。
Firefoxで、リンクurlの#を無効にできますか? ../index.html#colum02 などのリンクを踏んだとき、#colum02へハッシュ移動するのを停めたいのですが Firefoxだとどうしても移動してしまいます これはFirefoxの仕様ということで無理なのでしょうか?
window.onload = function() { var a = document.querySelectorAll('a[href]'); for (var i = 0; i < a.length; i++) { a[i].href = a.item(i).toString().replace(/#.*/, '#'); } };
<html> <head>
<html> <head> <script text="javascript"> var a = [ {"a":"aaaaaaaaa"}, {"b":"bbbbbbbbb"} ]; </script> </head> <body> </body> </html> javascriptで{"b":"bbbbbbbbb"}の部分を{"b":"CCC"}に変更する方法をご教示お願いします
a[1]["b"]="CCC"; // or a[1].b="CCC"; alert(a[1]["b"]);
それはテキストエディタで書き換えてるだけですよね
もうちょっとちゃんとやりたい事を書くべきだ。 そして作成依頼ならスレチ。
AjaxでURLのパラメータに+を含む文字列を渡したいのですが escape()だと+が変換されませんでした。 そこでencodeURIComponent()を使おうと思うのですが 対応としてはこれであっていますでしょうか?
911 :
Name_Not_Found :2011/06/20(月) 13:55:22.51 ID:FHg6ffuw
>>908 エスパー回答求めても応えられる奴いねぇと思うぞ。
↓あえて別回答してみたけど、たぶんコレじゃねぇしなw試してねぇから動くかは保証しない。
var elem = document.getElementsByTagName('script')[0];
elem.innerText = elem.innerText.replace('{"b":"bbbbbbbbb"}','{"b":"CCC"}');
変更するって書いてあれば普通DOMを操作するしかないと思うんだがね
やり方は
>>911 の方法を試せば出来る
<body style="background-color:silver;"> <canvas id="canvas" width="500" height="500"></canvas> <script> var ctx = document.getElementById("canvas").getContext("2d"); ctx.fillStyle = "aqua"; ctx.fillRect(0, 0, 500, 500); ctx.shadowColor = "blue"; ctx.shadowBlur = 100; ctx.fillStyle = "lime"; ctx.fillRect(50, 50, 200, 200); ctx.fillStyle = "red"; ctx.arc(250, 250, 150, 0, Math.PI * 2, true); ctx.fill(); ctx.clearRect(150, 150, 200, 200); </script> </body> canvasなんですが、赤い円の中を四角で切り抜いて 切り抜いた赤い円の内側(円の中心方向)にも影を付けるにはどうすればいいですか? あと下の緑の四角と水色の四角も切り抜いた赤い円の内側から見えるようにしたいです
>>914 誘導ありがとうございますm(_ _)m
いやこっちのスレでいいんじゃないの あっち稼働してないでしょ
専用の話題はここじゃなくていいよ
もう900超えだったんだ。テンプレ論議の簡単なものは今どぞ。
jQueryがいいように JavaScript の話題ならここでもいいんじゃない?
>>914 情報が欲しくて立てた上で放置してるスレでしょ
>>917 じゃあ、Ajax,HTML5,jQuery,canvas,ECMAScriptはスレ違いになるな
canvas関連の話題も食いついてくる連中多いのに スレ分けちゃうと管理がめんどくさい あっちはなんか面白いもの貼っていこうぜ的な雰囲気になってるような?
ほとんど残らないww
というかあっちは雑談スレだし質問スレじゃないからね。
Ajaxの質問でもいいでしょうか? Ajaxでテキストファイル読み込むとどーしても文字化けしてしまうとです 読み込むスクリプトがあるHTMLの文字コードはUTF-8なんですが対処法とかないでしょうか?
>>925 テキストファイルがUTF-8ではないのでは?
>>926 Shift-JISのページで更新&使うので、そうなんです
UTF-8のページでどうにか文字化けせずに呼び出せないでしょうか?
overrideMimeType
細分化するのは投稿数が多い時だけだよ 今のcanvasの投稿は1ヶ月に数回あるかないかで分ける必要はない canvasスレ立てた人は少ない投稿を集約したかっただけ 立てた人はアウトプットする気はないし、アウトプットする人が多いわけでもないから当然廃れる HTML5スレでさえ廃れてるのにcanvasだけでで賑わうわけがない
>>927 htaccess 辺りで Content-Type を設定してみては?
ここでいいんじゃないかな
誰もcanvasの質問に答えてくれてない薄情さ
>>921 HTML5はたしかにスレ違いになるよな
934 :
続きます :2011/06/20(月) 23:04:01.78 ID:???
ttp://lagoscript.org/jquery/autopager を使用して以下のコードを書きました。
<a id="next" rel="next" href="?page=1">次へ<a>
をクリックすると、次のページの内容をloadするとともに、?page=1を+1します。
$('a[rel=next]').click(function() {
var url_param;
$.autopager({
autoLoad: false,
content : 'content'
});
$.autopager('load');
url_param = $(this).attr('href').replace(/page=(\d+)/, function (whole,s1) {
return 'page='+ (Number(s1)+1);
});
$(this).attr('href', url_param);
return false;
});
>>891 こういうテクニックほかにもあったら教えてください
>>933 innerHTML や new Image がスレ違いになるとは思わないけどね
939 :
934 :2011/06/21(火) 00:40:22.79 ID:???
このコード、最初は $.autopager({ autoLoad: false, content : 'content' }); を先頭に記述していて、うまく動いていませんでした。 pageは+1されるのですが、クリックしても+1される前の 値がgetされます。うまくいかない原因は何なのでしょうか?
JavaScript API の話はここでいい
pageA <a href="pageB.html#footer">link</a> pageAにおいて上記リンクをクリックしてpageBが表示される際に、 #footerへhushするのを強制的に停めたい(ページの最上部を表示したい)です。 pageBのself.location.herfを走査しても間に合わないみたいですが どうすればよいでしょうか(特にie,firefox)
var hash = location.hash; if (hash) location.replace(location.href.replace(hash, '')); locationを置き換えてやればいいんじゃないか。
2ちゃんのdatファイルを取得したいのですがうまくいきません
>>944 そうですか(終了)。 そもそもJavaScriptと関係があるの?
ajaxで取得してるんですけどどこで聞いたらいいですか?
うまくいきません とか言いつつたぶん何も試してない
自分のサイトから取得できませんとかいう話ではないんだよね
function hoge(obj){obj.background="img/hoge.png";} IEだと変更できるんですが、他のブラウザだと変更できません 何が悪いんでしょうか?
objに何を渡しているの?DOMのエレメントノード?
onmouseover="hoge(this)" です
いやいや、そこじゃないだろ
デスクトップに置いてあるhtmlとjavascriptからdatファイルを取得したいんですけどエラーも何も出ないんです
>>951 obj.style.backgroundImage = 'url("img/hoge.png")';
backgroundはbodyしか持ってないし、style使え。
IEだとなんでもアリなのか。
>>954 なるほど、IEに甘えるなってことですね
ありがとうございます
HTMLの普通の知識があれば bodyでさえbackgroundが非推奨なのは分かりそうなものだが HTML5のHTMLBodyElementでも、必ずしもサポートの必要がないものに分類されてる
canvasってjavascriptなの?
canvas要素はhtmlだけどcanvas APIはDOM APIと同じような位置づけじゃないの
CanvasAPIを実装してるのがJavaScriptでブラウザもそれをサポートしているというおはなし
C#から使えるcanvasとはまた違うの?
canvasクラス?C++にもJAVAにもある あれって描画する機能を持たせたクラスにcanvasって名前付けてるだけって程度の意味合いでは? windowって付いてるとMicrosoft Windowsと何か関係あるのかなって思ってしまう人もいるとかいないとか
プラグインでサポートさせれば、他の言語でもやろうと思えばできるはず。 あえてする必要がないからやらないだけ。
必要がないっつーか、プラグインまわりが腐ってるから 全部ネイティブにしようぜってなったんだろ
進むの速いね。新スレは975超えたら。テンプレは今と同じで。
良い所な証拠だね このスレ見てるとマトモ&優しくて涙が出るほど感動する どんな初心者でも決して見下したりしないし、質問する側もちゃんとしてるし
945 返信:Name_Not_Found[sage] 投稿日:2011/06/21(火) 11:36:05.24 ID:???
>>944 そうですか(終了)。 そもそもJavaScriptと関係があるの?
ちゃんとしているはずの「質問する側」のレスも引用しないと片手落ち
まあどんな初心者でもというのはウソですねw
意味の分からない質問をするのもあれだけどそれを煽る人間も要らないね
何もわからない初心者がアバウトすぎる質問をしたとき 他だったらもっと細かく書けってことをここの住人はドコとドコを書いてくれって言ってくれる
それ一部の回答者だけだよw
煽る人も一部だよ
なんだかんだ「そんな良い人いねーよw」とか言いながらいい人ばかりだと思ってるわ
きみはいちいち突っかかって余計にスレを荒らしちゃうタイプの人だな
つ鏡
ツンデレなんだよ、ここの住民は
>>975 そんな感じだね
2chでは珍しくないけどここでは自重してほしい
人多ければだれでもいいよ 口数多い人でも大歓迎
>>975 が指摘してるタイプの人は百害あって一利なしだと思ってる
傷口に塩を塗るようなことをする神経がわからない
煽りじゃん、それくらいわかれよ
いや煽りは理解してるだろ
必死に煽ってる奴がいるようだが、まあただの鬱憤ばらしだろうな 精神的に成長出来てない子供と思えばどうということはない
NGワード「タイプ」を登録してあぼ〜ん入れとけ
はきだめに何を期待してんだか
自分からはきだめにすることもないだろうに
まったくだ
むごいと感じたら 自分が代わりに親切に答えてあげればおk 煽らんでよし
教えたがり君は教えて君を招く
げーんまたスレ立てられない…誰かお願い致したく。
あえて放置したのに自称親切が火事を起こすとか
995 :
Name_Not_Found :2011/06/22(水) 00:11:37.13 ID:GRm3SJfv
梅
>>993 はテンプレが改変されてるから立て直した方が良さげ
FAQ無くすとかダメだろ。
>>997 FAQ がないから意図的だと思うんだけど
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。