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

このエントリーをはてなブックマークに追加
952Name_Not_Found:2011/01/16(日) 20:00:30 ID:0Aw6tvjD
例A
--------------------------------------------------
function test1() {
var e = document.getElementById('id');
e.style.marginTop = setInterval(test2, 100);
}
function test2() {
var q = q + 1;
return q + "px";
}
--------------------------------------------------
例B
--------------------------------------------------
function test1() {
var e = document.getElementById('id');
setInterval(function() {
e.style.marginTop = test2();
});
}
function test2() {
var q = q + 1;
return q + "px";
}
--------------------------------------------------
分かる方がいたらお願いします。
953Name_Not_Found:2011/01/16(日) 20:05:00 ID:???
alert(q)してみなよ
954Name_Not_Found:2011/01/16(日) 20:08:36 ID:???
HTML5策定でAPIがかなり充実するからFAQ大幅書き換えしないと駄目だろうな
ajaxなファイルアップロードなんかも簡単に実装できるようになるし。
function fileUpload () {
 var files = document.getElementById("file").files; // Blobの配列
 var req = new XMLHttpRequest();
 var data = new FormData();

 for (var i = 0; i < files.length; i++) {
  data.append("file[]", list[i]);
 }

 req.open("POST", "index.php", false);
 req.send(data);
}
955Name_Not_Found:2011/01/16(日) 20:17:27 ID:0Aw6tvjD
>>953
あ、すいません(><)初歩的なミスでした。
--------------------------------------------------
function test1() {
var e = document.getElementById('id');
var q = 0;
setInterval(function() {
e.style.marginTop = test2(q);
});
}
function test2(q) {
var q = q + 1;
return q + "px";
}
--------------------------------------------------
これでいけました。
956Name_Not_Found:2011/01/16(日) 21:16:32 ID:???
それじゃまあ、もう956だから今回は無理で、大幅改訂するのなら
次スレで早めに具体案を出してほしい。ということで、次スレは
本スレとおなじままで975超えたら。
957Name_Not_Found:2011/01/16(日) 21:19:10 ID:???
>>912からの流れは無視なの?
958Name_Not_Found:2011/01/16(日) 21:24:32 ID:???
合意ができた気がしないんですけど、>>912 からの流れだと「何をどう
直す」という合意ができたと思いますか?それを出してください。それに
反対がなければ変更したらいいんじゃないだろうか。具体的にFAQの何番を
どのように変更すると?
959Name_Not_Found:2011/01/16(日) 21:29:11 ID:???
そもそも900からテンプレ議論開始して
950で打ち切りで次スレ持ち越しとか
質問スレ内で間にレスをはさむのに50レスでどうにかしようってのが間違い
こんなことばかり毎回続けてるから変わりようがないんだよ
960Name_Not_Found:2011/01/16(日) 21:44:49 ID:???
それは同感なんだけど、いつもじゃあ次スレになったらさっさと
やろうねと言って、実際に次スレになったらいまいちテンプレ
論議が盛り上がらない、ということを繰り返してるから。
次は800でテンプレ論議してみるとかどうでしょうか?
961Name_Not_Found:2011/01/16(日) 22:56:20 ID:???
いや今度こそ最初にやればいいだろ。
950あたりでその辺りにレスアンカー張ってもらえればみんな思い出すし。
9621(ホントに1です):2011/01/17(月) 04:19:34 ID:5DKJvtc5
と思って書いたのが>>8ですしおすし。
963922:2011/01/17(月) 05:22:29 ID:???
>>926
やりたいことはそれなんですが、ちまちま弄っているんですが、全然できません
htmlファイルにjavascriptをまとめてしまうとうまく行くのですが、分離するとうまくいきません
upするのでどこがおかしいかヒントもらえないでしょうか?

http://www1.axfc.net/uploader/Sc/so/195127
pass:q(半角小文字のQ)
御手数おかけしますが、よろしくお願いします
964Name_Not_Found:2011/01/17(月) 06:32:44 ID:5DKJvtc5
>>963
>htmlファイルにjavascriptをまとめてしまうとうまく行くのですが、分離するとうまくいきません

ファイル見てないけど、getElementById( ID )っていうのは
「DOMツリーからid属性値がIDの要素を取ってこい」っていうメソッド

つまり、少なくとも目的とする要素がDOMツリーにぶら下がるまでは、実行しても意味がない
なので、分離したときに適切なタイミングで実行できてないのが原因だと思う

んで、一般的に「DOMツリー完成したよイベント」に、実行したい関数をアタッチするのが
主流なんだけれども、旧IEとかで書き方が違うから、あえてレガシーな書き方をすると

body.onload = function(){
    for(var i=0 ; i<10 ; i++){
        document.getElementById("menu" + i).onclick = function(){ hoge(i); };
    }
}

って外部ファイルに書いて<script>要素で読みこめばいいんじゃないかな
HTMLとDOMとJSについて考えながら、調べたり書いたりするといいかも
965Name_Not_Found:2011/01/17(月) 06:34:14 ID:5DKJvtc5
主流は言い過ぎでした
俺はよくやる、とでも置き換えてくださいまし
すまんこ
966Name_Not_Found:2011/01/17(月) 06:34:52 ID:5DKJvtc5
あああ。
body.onloadもwindow.onloadですな
967Name_Not_Found:2011/01/17(月) 06:56:50 ID:???
>>964
最初の質問と同じミスしてるよ
968922:2011/01/17(月) 08:01:50 ID:Cu9XeuHV
tab.view()の引数見てると変な数値が渡されていました・・・
しかもすべてのタブが同じ引数を渡しているみたいです・・・
しかし、なぜこの数値が渡されているのか理解できません
init関数のfor文の変数iの現在の値が渡されています

969922:2011/01/17(月) 08:08:01 ID:???
すいません
>>926さんのを参考にして新たに関数作りそれに引数を渡して
tab.view()に引数毎渡したらできました
何故関数を挟むとできるようになるんですか?
それを理解したいです・・・
970Name_Not_Found:2011/01/17(月) 08:28:14 ID:???
>>969
FAQのQ14/A14を読んでないだろ。それとおなじ現象(現時点のiが
取れてしまうという点で)。FAQはまず熟読すべきだと思わんかね。
971Name_Not_Found:2011/01/17(月) 08:31:58 ID:oKVu1L+F
>>967
ああああああああ!!

for(var i=0 ; i<10 ; i++)(function(n){
    document.getElementById(n).onclick = function(){ hoge(n); };
})(i);

書き方はともかく、スコープつくってその中に封じ込める感じで
ほんとすんません…
972922:2011/01/17(月) 08:52:19 ID:Cu9XeuHV
>>970
すいません、熟読すべきでした。
これからは気をつけます
9731:2011/01/17(月) 18:36:50 ID:uRyN2JFp
テンプレ議論スレ、別途たてますかね?
さして迷惑にもならんと思うんですが
974Name_Not_Found:2011/01/17(月) 18:48:57 ID:???
質問です。Win7のIE8において、

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

と宣言して、

<body id="MA_body" onload="EventA();" onScroll="EventA();">

と書くと、ロード時には動きますが、スクロール時に動きません。
色々検索してみましたが、サッパリです。解決方法がありましたら教えて下さい。
975Name_Not_Found:2011/01/17(月) 18:53:25 ID:x25E+EsE
本に書いてあることをほとんどそのまま実行しているんですが出来ません。

function getText(){
cacheTime=(new Date()).getTime();

httpObj=new XMLHttpRequest();
httpObj.open("get", "http://***/getNewText.php?time="+cacheTime, true);
httpObj.send(null);
newText=httpObj.responseText;
alert(newText);
}

alertを使って確認してみたら関数はちゃんと呼び出されていました。
リクエスト先のURLにブラウザでアクセスしたらちゃんと文字データが帰ってきました

しかし、上のスクリプトではalertは表示されますが中に何も書いてありません

正しくテキストデータが取得出来ていないようです。
どこが間違っているか教えてください。
976Name_Not_Found:2011/01/17(月) 19:18:28 ID:???
>>941
できた。

ただ・・・
ググれば解るだろとタカを括っていたけど、ほとんど掛からなかった。
日本人でこれを理解できてる人は、きっと28人ぐらいしかいない特殊な手法
なんだろう、と勝手解釈することにした。
977Name_Not_Found:2011/01/17(月) 19:26:39 ID:uRyN2JFp
>>974
スクロールするのってbodyでいいんだっけか?windowな気が

>>975
非同期なんよ。
だからsendメソッド叩いても、返答があるまで待ったりしない。

xhrにreadystateってプロパティがあって、通信状況によって値が変わる。
で、変わるたびにreadystatechangeイベントが発生するから
それを使ってレスポンスを受け取ります。

つか、そんなふうに本に書いてあった?
978Name_Not_Found:2011/01/17(月) 19:35:15 ID:x25E+EsE
>>977

できたぜ!

仕組み理解したw

ありがとうございます
979Name_Not_Found:2011/01/17(月) 19:35:22 ID:???
function getText(){
 cacheTime=(new Date()).getTime();

 httpObj=new XMLHttpRequest();
 httpObj.open("get", "http://www.yahoo.co.jp/", true);
 httpObj.send(null);
 httpObj.onreadystatechange = func;

 function func(){
  if( (httpObj.readyState == 4) && (httpObj.status == 200) ){
   newText=httpObj.responseText;
   alert(newText);
  }
 }
}

>>977がおっしゃったようにこんなかんじ
200以外が返ってきたときのことも考えておけ
980Name_Not_Found:2011/01/17(月) 20:46:47 ID:uRyN2JFp
>>979
補足なんだけど、ロードする対象をキャッシュしてしまうと
糞ブラウザでreadystateが4のまま変化しないことがある
ので

if(xhr.readyState == 4 && !!xhr.responseText) //やりたい事;
else onreadystatechange = function(){
    if(xhr.readyState == 4 && !!xhr.responseText) //やりたい事
}

みたいな周りくどいことしてます、自分は。
981Name_Not_Found:2011/01/17(月) 20:48:58 ID:uRyN2JFp
980過ぎちゃった
とりあえずテンプレはママで次スレたててきます
テンプレ議論スレ建てるかどうか決めましょう
982Name_Not_Found:2011/01/17(月) 20:58:00 ID:uRyN2JFp
983Name_Not_Found:2011/01/17(月) 23:05:48 ID:???
>>981-982 おつかれ様でした、ありがとうございます(今日は全然アクセス
できませんでした)
984Name_Not_Found:2011/01/17(月) 23:23:07 ID:???
>>975
考え方
985974:2011/01/18(火) 01:24:31 ID:???
>>977
chrome、Firefoxはbodyでonscrollイベントが発生します。

IE用にbody.onscrollで書くと、「document.getElementById(...)はNULLまたはオブジェクトではありません。」と言われます。

それでものすごく困っています…。どうにかIE上でbodyから呼び出す方法はありませんか?
986Name_Not_Found:2011/01/18(火) 02:53:12 ID:???
onscrollは発生しているってことかな?
他に原因ありそうだから、もう少しコードが見たい
987Name_Not_Found:2011/01/18(火) 09:06:34 ID:???
988Name_Not_Found:2011/01/18(火) 10:56:50 ID:???
>>985
間違っている部分を修正する事です。
989Name_Not_Found:2011/01/18(火) 15:56:42 ID:???
>>985
ロード時にスクロールバーが発生する時点でスクロールしてるかも
DOMContentLoadedまでまつべきかも
990Name_Not_Found:2011/01/19(水) 00:32:43 ID:HfWvC9SN
"ppppp"というようにpを5個作る
一番簡単な方法を教えてください。
991Name_Not_Found:2011/01/19(水) 00:37:52 ID:???
>>990
Array(5+1).join("p"); // ppppp
http://phpjs.org/functions/str_repeat:526
992990:2011/01/19(水) 01:07:01 ID:???
>>991
深夜にすみませんでした。forよりはいいですね。
ありがとうございます。
993Name_Not_Found:2011/01/19(水) 01:58:37 ID:???
>>991
横からですまんがこれってどんな原理?
面白いので誰か解説お願いします
994Name_Not_Found:2011/01/19(水) 02:22:29 ID:???
Array.joinは配列の要素を文字列により連結する
[1,2,3].join('-'); // "1-2-3"
995Name_Not_Found:2011/01/19(水) 02:27:40 ID:???
>>994
ありがとう、根本的な勘違いをしていたよ・・・

しかしよくこんな方法思いつくね
連続する長い文字列の生成には便利だな
使う機会は少なそうだけど
996Name_Not_Found:2011/01/19(水) 08:55:14 ID:???
997Name_Not_Found:2011/01/19(水) 16:47:24 ID:6/sbTjZN
埋めますわよ
998Name_Not_Found:2011/01/19(水) 20:09:21 ID:???
>>991
効率は良くないような気はするが、短く書けるな。
999Name_Not_Found:2011/01/19(水) 20:29:26 ID:???
999
1000Name_Not_Found:2011/01/19(水) 20:30:37 ID:???
次スレ
+ JavaScript の質問用スレッド vol.83 +
http://hibari.2ch.net/test/read.cgi/hp/1295265321/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。