+ JavaScript の質問用スレッド vol.82 + 952 :
Name_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"; } -------------------------------------------------- 分かる方がいたらお願いします。
alert(q)してみなよ
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); }
955 :
Name_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";
}
--------------------------------------------------
これでいけました。
それじゃまあ、もう956だから今回は無理で、大幅改訂するのなら 次スレで早めに具体案を出してほしい。ということで、次スレは 本スレとおなじままで975超えたら。
合意ができた気がしないんですけど、
>>912 からの流れだと「何をどう
直す」という合意ができたと思いますか?それを出してください。それに
反対がなければ変更したらいいんじゃないだろうか。具体的にFAQの何番を
どのように変更すると?
そもそも900からテンプレ議論開始して 950で打ち切りで次スレ持ち越しとか 質問スレ内で間にレスをはさむのに50レスでどうにかしようってのが間違い こんなことばかり毎回続けてるから変わりようがないんだよ
それは同感なんだけど、いつもじゃあ次スレになったらさっさと やろうねと言って、実際に次スレになったらいまいちテンプレ 論議が盛り上がらない、ということを繰り返してるから。 次は800でテンプレ論議してみるとかどうでしょうか?
いや今度こそ最初にやればいいだろ。 950あたりでその辺りにレスアンカー張ってもらえればみんな思い出すし。
962 :
1(ホントに1です) :2011/01/17(月) 04:19:34 ID:5DKJvtc5
963 :
922 :2011/01/17(月) 05:22:29 ID:???
964 :
Name_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について考えながら、調べたり書いたりするといいかも
965 :
Name_Not_Found :2011/01/17(月) 06:34:14 ID:5DKJvtc5
主流は言い過ぎでした 俺はよくやる、とでも置き換えてくださいまし すまんこ
966 :
Name_Not_Found :2011/01/17(月) 06:34:52 ID:5DKJvtc5
あああ。 body.onloadもwindow.onloadですな
968 :
922 :2011/01/17(月) 08:01:50 ID:Cu9XeuHV
tab.view()の引数見てると変な数値が渡されていました・・・ しかもすべてのタブが同じ引数を渡しているみたいです・・・ しかし、なぜこの数値が渡されているのか理解できません init関数のfor文の変数iの現在の値が渡されています
969 :
922 :2011/01/17(月) 08:08:01 ID:???
すいません
>>926 さんのを参考にして新たに関数作りそれに引数を渡して
tab.view()に引数毎渡したらできました
何故関数を挟むとできるようになるんですか?
それを理解したいです・・・
>>969 FAQのQ14/A14を読んでないだろ。それとおなじ現象(現時点のiが
取れてしまうという点で)。FAQはまず熟読すべきだと思わんかね。
971 :
Name_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);
書き方はともかく、スコープつくってその中に封じ込める感じで
ほんとすんません…
972 :
922 :2011/01/17(月) 08:52:19 ID:Cu9XeuHV
>>970 すいません、熟読すべきでした。
これからは気をつけます
973 :
1 :2011/01/17(月) 18:36:50 ID:uRyN2JFp
テンプレ議論スレ、別途たてますかね? さして迷惑にもならんと思うんですが
質問です。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();">
と書くと、ロード時には動きますが、スクロール時に動きません。
色々検索してみましたが、サッパリです。解決方法がありましたら教えて下さい。
975 :
Name_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は表示されますが中に何も書いてありません
正しくテキストデータが取得出来ていないようです。
どこが間違っているか教えてください。
>>941 できた。
ただ・・・
ググれば解るだろとタカを括っていたけど、ほとんど掛からなかった。
日本人でこれを理解できてる人は、きっと28人ぐらいしかいない特殊な手法
なんだろう、と勝手解釈することにした。
977 :
Name_Not_Found :2011/01/17(月) 19:26:39 ID:uRyN2JFp
>>974 スクロールするのってbodyでいいんだっけか?windowな気が
>>975 非同期なんよ。
だからsendメソッド叩いても、返答があるまで待ったりしない。
xhrにreadystateってプロパティがあって、通信状況によって値が変わる。
で、変わるたびにreadystatechangeイベントが発生するから
それを使ってレスポンスを受け取ります。
つか、そんなふうに本に書いてあった?
978 :
Name_Not_Found :2011/01/17(月) 19:35:15 ID:x25E+EsE
>>977 できたぜ!
仕組み理解したw
ありがとうございます
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以外が返ってきたときのことも考えておけ
980 :
Name_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) //やりたい事
}
みたいな周りくどいことしてます、自分は。
981 :
Name_Not_Found :2011/01/17(月) 20:48:58 ID:uRyN2JFp
980過ぎちゃった とりあえずテンプレはママで次スレたててきます テンプレ議論スレ建てるかどうか決めましょう
982 :
Name_Not_Found :2011/01/17(月) 20:58:00 ID:uRyN2JFp
>>981-982 おつかれ様でした、ありがとうございます(今日は全然アクセス
できませんでした)
985 :
974 :2011/01/18(火) 01:24:31 ID:???
>>977 chrome、Firefoxはbodyでonscrollイベントが発生します。
IE用にbody.onscrollで書くと、「document.getElementById(...)はNULLまたはオブジェクトではありません。」と言われます。
それでものすごく困っています…。どうにかIE上でbodyから呼び出す方法はありませんか?
onscrollは発生しているってことかな? 他に原因ありそうだから、もう少しコードが見たい
>>985 ロード時にスクロールバーが発生する時点でスクロールしてるかも
DOMContentLoadedまでまつべきかも
990 :
Name_Not_Found :2011/01/19(水) 00:32:43 ID:HfWvC9SN
"ppppp"というようにpを5個作る 一番簡単な方法を教えてください。
992 :
990 :2011/01/19(水) 01:07:01 ID:???
>>991 深夜にすみませんでした。forよりはいいですね。
ありがとうございます。
>>991 横からですまんがこれってどんな原理?
面白いので誰か解説お願いします
Array.joinは配列の要素を文字列により連結する [1,2,3].join('-'); // "1-2-3"
>>994 ありがとう、根本的な勘違いをしていたよ・・・
しかしよくこんな方法思いつくね
連続する長い文字列の生成には便利だな
使う機会は少なそうだけど
997 :
Name_Not_Found :2011/01/19(水) 16:47:24 ID:6/sbTjZN
埋めますわよ
>>991 効率は良くないような気はするが、短く書けるな。
999
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。