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

このエントリーをはてなブックマークに追加
952Name_Not_Found:2006/09/16(土) 20:28:38 ID:???
>>950
仮にFAQが無かったとしてFAQのQ1-10まで1スレで出ると思うのか?
質問自体は過去ログみれば何回もでてきてるやん。
現実的に知らない人が多いって話。

>>951
こういうことでなく?
var from = (new Date()).getTime();
for (var i = 10000; i--;) { func(); }
var to = (new Date()).getTime();
alert(to - from);

でもJSの処理自体は結構遅い部類だよね。
953951:2006/09/16(土) 20:42:40 ID:???
>>952
ありがとうございます。objを指定しなさい、と叱られました。
func()のあたりだと思いますが、ご再考を。すいません。
954Name_Not_Found:2006/09/16(土) 20:47:09 ID:???
>>953
func() は自分で作るんだよ
955Name_Not_Found:2006/09/16(土) 20:52:54 ID:???
わろっしゅww
956Name_Not_Found:2006/09/16(土) 20:57:04 ID:RGY9Uj/e
URLの?より後ろの部分、いわゆるQUERY_STRINGをJavaScriptで取得できませんか?
957Name_Not_Found:2006/09/16(土) 20:58:56 ID:???
location.search
958Name_Not_Found:2006/09/16(土) 22:51:27 ID:???
新スレは975超えたら。FAQの追加/変更は議論が間に合わなさそうなんで、
今回は保留ね。
959Name_Not_Found:2006/09/16(土) 23:10:50 ID:???
975までに誰かが素晴らしいFAQ11-20を作ってくれたらそれでもいいけどね
960Name_Not_Found:2006/09/16(土) 23:14:11 ID:???
AJAXで2つのファイルを同じページの別々の場所に読み込みたいのですがうまくいきません

function printPage() {
file= "file";
space="space";
getPage();
file= "file2";
space="space2";
getPage();
}
function getPage() {
xmlhttp = createXMLHttp();
if (xmlhttp) {
xmlhttp.onreadystatechange = setPageData;
xmlhttp.open("GET", file, true);
xmlhttp.send(null);
}
}
function setPageData(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
document.getElementById(space).innerHTML = xmlhttp.responseText;
}
}
function createXMLHttp() {
省略
}

といった感じでやっているのですが、どうもうまくいきません
file= "file2";から下に3行を消せばちゃんと動くのですが...
どうにかうまく表示させる方法はないものでしょうか?
961Name_Not_Found:2006/09/16(土) 23:29:11 ID:???
>>960
自作の関数にパラメタをつける方法をまず勉強したまへ。そして
xmlhttp.onreadystatechange = function() { setPageData(f); };
とする。もちろんfはgetPageのパラメタとして外からファイル名を渡す。
今は1個目のgetPage()を読んで終わったらすぐfileとspaceを
書き換えてしまっているので、読み込み終わってsetPageData()が
呼ばれた時には古い値は書き換えられて失われてしまってるだろ。
グローバル変数で受渡しって何十年前の発想だよそれって感じ。
962Name_Not_Found:2006/09/17(日) 01:53:18 ID:???
独断と偏見により作ってみました。20もないですが。
【FAQその1】
Q1. 開いた別窓/フレームの内容にアクセスできないのですが…
A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。
Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
A3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが…
A3. セミコロンで複数の文を区切られます。onclick="foo();bar();"としましょう。
Q4. document.write(...)でページ内容を追加したいのですが…
A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。
 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、
 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。
 innerHTMLは非標準ですがIE、Opera、Gecko(N6/N7/Firefox等)で対応済。
Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが…
A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか
 <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。
Q6. DOMでtable要素にtr要素を追加しても表示されないのですが…
A6. IEではtbody要素にtr要素を追加する必要があります。
 tbody要素はtbodyタグを書いていなくても自動的に作成されます。
 またはtable.insertRow()/tbody.insertRow()を使いましょう。
Q7. Aタグのonclickで動作指定してるのですが時々動きません…
A7. 「onclick="...;return false"」としないとページ移動しちゃうから。
Q8. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが…
A8. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
Q9. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A9. 「document.forms.myform.elements[変数名].value」でどぞ。
 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
 例:「obj.p0=obj.p1=...=obj.p8=0;」⇔「for(i=0;i<9;i++) obj['p'+i]=0;」。
963Name_Not_Found:2006/09/17(日) 01:54:23 ID:???
【FAQその2】
Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A10. IEではe.currentStyle、Geckoではwindow.getComputedStyle()を使います。
Q11. 100*1.15の結果が114.999…998となってしまうのですが…
A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。
Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが…
A12. Geckoのnew XMLHttpRequest()、IEのnew ActiveXObject("Microsoft.XMLHTTP")
 を使えばできる。古いブラウザだと隠しフレームに読むなどのワザが必要。
Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどうぞ。
 なお、onclickなどのイベントハンドラに指定するのは関数名のみです。
 後ろに()をつけるとイベント時ではなくその場で関数が実行されてしまいます。
 setAttribute("onclick","foo();bar();")などとしたいときは
 obj.onclick=function(){foo();bar();}という風に関数式を使いましょう。
Q14. 以下のコードが思ったとおりに動かないのですが…
 function MyClass(element){
  element.onclick=function(){this.method();};
 }
 MyClass.prototype.method=function(){...};
 var myObj=new MyClass(...);
A14. thisが指す値は状況により変化します。以下のようにしましょう。
 element.onclick=function(x){return function(){x.method();};}(this);
Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが…
A15. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。
 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。
 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、
 offsetがマッチした位置、sが置き換え前の文字列全体になります。
964Name_Not_Found:2006/09/17(日) 02:29:42 ID:???
>>963
> QA-14
それだったら
  ...onclick = this.method;
でいいじゃん。バカか?
965Name_Not_Found:2006/09/17(日) 02:35:41 ID:???
>>963
> QA-13

1996年から1997年、HTMLのイベント属性。
1997年から199年、イベントプロパティに匿名関数。
1999年から現在、attachEventやaddEventListener。

どうして、歴史的に見ても、暫定的な方法だった、onclick = function を薦めるんだ?
今はもう2006年で、お前らが相手にしているブラウザ全てで
addEventListenerかattachEventを使えるだろう。

その暫定的な方法で、thisを使う癖がついているから、
いつまでたっても、イベントオブジェクトへの問い合わせが苦手なんだろ。
いいかげん、頭を切り替えろ。
966Name_Not_Found:2006/09/17(日) 02:57:55 ID:???
やってることわかればいいんじゃねーの? とは思うが、
まあ普通 setAttribute("onclick" 〜はやらんわな。

とりあえず >>962-963 乙。
文句いうやつはそこを書き直すくらいしようぜ。

> A13
 IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどうぞ。
 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();};
 という風に無名関数を作りましょう。中に書かれたコードが実行されます。

> Q14
Q14 以下で "hoge" を出すにはどうしたら?
 function MyClass(element){
  this.title = 'hoge';
  element.title = 'fuga';
  element.onclick=function(){ alert(this.title); };
 }
 var myObj=new MyClass(...);

とか?
967Name_Not_Found:2006/09/17(日) 03:02:40 ID:???
addEventListenerはremoveEventListenerしないとまずいのかしら?とか思い込んでるのであまり使っていない。

element.onclick = eventHandler;
element.onclick = eventHandler;
と重ねても一度しか実行されない。

element.addEventListener("click", eventHandler, true);
element.addEventListener("click", eventHandler, true);
これも多分問題ない。

element.addEventListener("click", function(e){ eventHandler(e); }, true);
element.addEventListener("click", function(e){ eventHandler(e); }, true);
こういうのは二度実行されるからまずいよね?
968Name_Not_Found:2006/09/17(日) 03:20:23 ID:???
> これも多分問題ない。
うそん。
それ、二回実行されないほうがまずくね?
969Name_Not_Found:2006/09/17(日) 03:22:25 ID:???
setAttribute("onclick"〜はそれなりに出てるような気もするが
ttp://user.ftth100.com/mirrorhenkan/javascript/search.php?word=setAttribute%28%22on&submit=++%8C%9F%8D%F5%82%B7%82%E9++

Q14は別にaddEventListener使ってもいいと思うんだけどね。
Q14. 以下で "hoge" を出すにはどうしたら?
 function MyClass(element){
  this.title = 'hoge';
  element.title = 'fuga';
  element.addEventListener("click", function(){ alert(this.title); }, false);
 }
 var myObj=new MyClass(...);

ただ例示のコードにattachEventまで入れるとなるとちょっと行数とりすぎのような気もするけど。
970Name_Not_Found:2006/09/17(日) 03:33:26 ID:???
>>968
同一のリスナが同じターゲット上で同じ引数で登録されても切り捨てられる。
http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget-addEventListener

>>967の最後の例だと異なるfunctionオブジェクトが生成されるので二度実行される。
IEのattachEventを使った場合もaddEventListenerとは違い二度実行される。
971Name_Not_Found:2006/09/17(日) 03:34:58 ID:???
>>969
> setAttribute("onclick"
あー、ごめん、気分的問題っていうか。
HTML的に標準な属性には setAttribute 使うけど、およそJSのためだけの属性とかには使いたくないっていうか。
個人的な意見でしたゴメソ。

いわゆる現在の 「初心者」 的には onclick じゃないかなー、と思った次第。
まあ addEventListener 系はもう一個 Q&A 増やすのでもありかとw
「Q いつでもイベントを追加したり削除したりするにはどうしたら?」 とかで。
972Name_Not_Found:2006/09/17(日) 03:38:53 ID:???
>>970
その仕様知らんかたw
addEventListener は後方互換用にラッパー作ってやってんだけど、ちょっと作り直さなきゃだなー。
973Name_Not_Found:2006/09/17(日) 04:02:54 ID:???
残念ながら980までにまとまりそうに無いな

諦めよう
974Name_Not_Found:2006/09/17(日) 09:59:07 ID:???
This new static class extends long native double package label in short
native super interface,
Private transient false protected synchronized function while volatile
throws public final float with return.

予約語だけで文章作ってみた。予約語全部を含めるのはむずかしいなあ。
975Name_Not_Found:2006/09/17(日) 10:41:46 ID:???
ttp://advertising.msn.co.jp/spec/mof.htm

このMSNの広告のように、マウスオーバーでflashの画面サイズを変更したいです。
マウスオーバーでHTML側でflash自体のサイズを変えてるので、
lashの問題ではなく、たぶんjavascriptだと思うのですが・・・

ヒントだけでも宜しくお願いします。
976Name_Not_Found:2006/09/17(日) 12:29:40 ID:???
>>975
そのページに載っている状態だと全部Flashで作ってあるけどね。
本番はどうやってるのか知らないけどレイヤー作ってその大きさ
を変化させればどうにでもなると思うが。
977Name_Not_Found:2006/09/17(日) 12:38:01 ID:???
スレ立て人ですがスレ立て規制されていて立てられません。誰か1だけ
でも入れてくれますか。

スレタイ: + JavaScript の質問用スレッド vol.51 +
名前: まず >>2-3 読め! 続いて過去スレ全集を検索!

━━━━━JavaScript質問スレ道場訓━━━━━
 一、礼節を重んじ常に努力精進すること
 一、ブラクラに打ち勝つ精神力を持つこと
 一、心身の優れたJavaScriptを学ぶこと
 一、雑草の如く生涯JavaScriptを貫くこと
 一、感謝と反省を忘れないこと
 以上
━━━━━━━━━━━━━━━━━━━━━━

このスレに書き込むことが許されるものは以下のとおり
・テンプレ/FAQ/過去ログ/関連資料を読める者。とくに>>2-10は必須!!!
・JavaScriptとJavaの違いを理解する者
・スクリプトを組むための最低限のHTML・CSSを理解する者
・ユーザーに迷惑となるスクリプトを書かない者
・「初心者です」を振りかざさず、質問を分かる日本語で説明できる者
・対象環境や使用技術は質問者の裁量であることを理解する者
 (質問/回答時はなるべく環境明記。WinIE5.5/N6未満と希少ブラウザは必須!)

[必読]過去スレ全集 http://user.ftth100.com/mirrorhenkan/javascript/
前スレ http://pc8.2ch.net/test/read.cgi/hp/1156128409/l50
まとめサイト http://web2ch.s31.xrea.com/?JS
FAQ・注意・過去ログ・関連資料・関連スレ>>1-10またはまとめサイト
978Name_Not_Found:2006/09/17(日) 13:45:35 ID:???
>>977
じゃ俺が
979978:2006/09/17(日) 13:50:57 ID:???
無理でした。DIONは無理です。別のプロバイダの方お願いします
980Name_Not_Found:2006/09/17(日) 13:55:00 ID:???
立てました。後はよろしく。
+ JavaScript の質問用スレッド vol.51 +
http://pc8.2ch.net/test/read.cgi/hp/1158468856/
981Name_Not_Found:2006/09/17(日) 14:25:25 ID:???
>>980
お湯
982Name_Not_Found:2006/09/17(日) 14:26:58 ID:???
>>980
間違った…
983Name_Not_Found:2006/09/17(日) 14:34:24 ID:???
>>981
素で吹いた
>>980
乙 残り入れました。
新スレ
http://pc8.2ch.net/test/read.cgi/hp/1158468856/
985Name_Not_Found:2006/09/17(日) 16:05:21 ID:???
>>974
SUGEEEEEEEE
986Name_Not_Found:2006/09/17(日) 16:11:09 ID:???
>>981
・・・み・・・水・・・!?
987Name_Not_Found:2006/09/17(日) 16:15:50 ID:???
よーし。こんどはパパが1000ゲットしてらるからな、優。よく見てるんだぞ。
988Name_Not_Found:2006/09/17(日) 16:30:18 ID:???
しかし、それがパパの声を聞いた最後になろうとは、優は夢にも思わなかったのでした・・・。
989Name_Not_Found:2006/09/17(日) 16:32:23 ID:???
990Name_Not_Found:2006/09/17(日) 16:57:57 ID:???
991Name_Not_Found:2006/09/17(日) 17:48:16 ID:???
selection.createRange().text って
テーブルの中の文字は取得できない?
992Name_Not_Found:2006/09/17(日) 18:29:37 ID:???
もう少しだ、優。自転車レースのフィニッシュの要領だ、わかるだろ?
さっきはパパ、らりっちゃったな。あせってはダメだ。
993Name_Not_Found:2006/09/17(日) 20:13:57 ID:???
うめ(´・ω・`)うめ
994Name_Not_Found:2006/09/17(日) 20:17:57 ID:???
うま


間違った…
埋め
995Name_Not_Found:2006/09/17(日) 20:46:45 ID:???
カウントダウン行くよー!!

10!
996992:2006/09/17(日) 20:56:42 ID:???
9!
もう連投負けはしないぞ
997Name_Not_Found:2006/09/17(日) 20:58:00 ID:???
10!
998Name_Not_Found:2006/09/17(日) 21:04:47 ID:???
9!
999Name_Not_Found:2006/09/17(日) 21:06:50 ID:???
100
1000Name_Not_Found:2006/09/17(日) 21:07:27 ID:???
           _   _                        ._  _
          / /\/_\                    ./_\\ \
        / /  / /_/ /\                  / /_/ /\\ \
       / /  / \_ /\/                  \_/\/  \ \
     / /  /    \\./                     .\\/    \ \
     / /\/      . ̄                         ̄      /  /\
    / / /               ________               /  /  /
    / / /              /  ____  _/\             ./  /  /
   / / /             ./ /\____./ /\.\/            /  /  /
   / / /             ./ /  /   / / ./ ̄            /  /  /
  / / /             / /  /   / / ./              /  /  /
  / / /             / /  /  ./ / ./              /  /  /
 / .\/            / / /___/ /__./             /  /  /
 \  \           / _ ̄ ̄____  /\           /  /\/
   \  \         /__/\ ̄ ̄   /__/ ./          /  /  /
    \/''\       \\/ ̄ ̄ ̄ ̄\.\/          \/  /
      \_/          ̄         ̄             \/
                   ポカーン
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。