のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,855人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    951 : Name_Not - 2011/07/18(月) 22:24:53.57 ID:??? (-16,-30,-293)
    >>945
    「text2の数までカウントアップ」を意図してるのなら、動作すると思います。
    http://jsfiddle.net/S5keM/

    ただ、カウントアップは止まってもhageの繰り返しは止まりません。
    hage内で setTimeout で繰り返しなわけですが、
    hage内で clearTimeout では間に合わずに繰り返されてしまいます。
    (945のままでは clearTimeout まで到達しないので else if (条件) {...} を else {...}にしていますが、
    到達しても止まるわけではありません)

    setTimeout での繰り返しの場合、繰り返されるコード自身に止めさせたいなら
    「条件次第で clearTimeout する」のではなく、「条件次第で setTimeout しない」処理が必要です。
    どう書けばよいかは難しくないと思うので、ご自身で考えてみてください。

    setInterval の場合と同じように止められない理由は長くなるので、次のレスに分けます。
    952 : 951 - 2011/07/18(月) 22:31:34.34 ID:??? (-27,-30,+0)
    * リファレンスに書いてあるようなこと

    setTimeout / setInterval は、
    引数として与えられたコードと、実行までの間隔と、
    set~ がキャンセル用に生成するIDとを、
    実行キュー(実行順番待ちの列)に設定します。そしてIDを返します。
    このIDは、setTimeout / setIntervalするたびに新しいもの(連番)が生成されます。

    clear~は、指定したIDのコードを実行キューから外します。
    実行キューに収めたコードの実行が始まってからそのIDでclear~しても
    その回の実行が中断されるわけではないことに注意してください。

    * 繰り返しを止めるには

    setInterval で指定間隔での繰り返し実行が出来ますが
    実際のところ実行キューに入るのは次の1回分のみです。
    繰り返しになるのは、コードを実行するとともに
    同じコード・間隔・IDで自動的に再設定されるものだからです。

    つまり一度設定すれば同じID再利用で繰り返しなので、
    実行されるコードの中からであっても clearInterval にそのIDを与えてやれば
    次回分は実行キューから外され、繰り返しは止まります。

    実行されるコードの中に setTimeout を書いて繰り返しさせる場合には、
    実行されるコードの中で clearTimeout しても繰り返しは止まりません。
    IDは使い捨てだし、clear~するタイミングが遅すぎます。
    「繰り返しを止めたいところでは次回分の setTimeout しない」ように書く必要があります。
    953 : Name_Not - 2011/07/18(月) 22:50:34.20 ID:??? (-22,+29,-12)
    プログラムの良し悪しなんて全部価値観なのにな。
    もちろん、動作しないのは論外だけど。
    954 : Name_Not - 2011/07/18(月) 23:48:06.97 ID:??? (+43,+30,-211)
    >>953
    方法の良し悪しは目的の達成度で測れるから、価値観が入り込む余地はない
    「コードを破壊されない」が目的なら、より「破壊されない」方法が「正しい」に決まっている

    目的を批判するのは価値観にもとづく
    「コードを破壊されるのは仕方ない」から「破壊されない方法を求めるのは無駄」と主張することはできる

    だが「var、prototype には注意」し、「undefined はどうなっても良い」のなら、一貫性に欠ける
    目的ではなく価値観で方法を採用するから、こういうチグハグなことになり、バグを生む
    955 : 954 - 2011/07/18(月) 23:50:38.27 ID:??? (+33,+30,-166)
    例えば「打鍵コストを下げる」という目的で「undefined には目を瞑る」と言うなら、まだ一貫性がある
    「保守する」という目的で「自分に理解できないものは使わない」と言うなら、正直で好感が持てる
    だが価値観の話を延々とされた所で、そいつの目的が分からなければ、方法の是非など議論できるはずがない

    まして、そいつの目的が単に「相手の論破」であるなら、そいつの価値観の話なんぞ付き合うだけ無駄だ
    方法の是非だけを問えば良い、どうせそいつには答えられない
    956 : Name_Not - 2011/07/18(月) 23:54:37.92 ID:??? (+27,+29,-19)
    ここは質問用スレなんだから
    チラ裏日記なら他所でやれよ
    957 : Name_Not - 2011/07/19(火) 00:35:23.28 ID:??? (-24,-30,+0)
    http://blogs.wankuma.com/kacchan6/archive/2008/01/28/119508.aspx
    にあるクロージャの動作、というか関数定義のタイミングがよく分かりません

    window.onload = function(){
    for(var i = 1; i <= 3; i++){
    var button = document.getElementById("button" + i);
    button.onclick = function(){
    alert(i);
    };
    }
    };
    これはbutton.onclick=以降の関数定義時のスコープに、ループカウンタの変数iが入っているので
    それに対する参照を持ってしまうのは分かりますが、

    window.onload = function(){
    for(var i = 1; i <= 3; i++){
    var button = document.getElementById("button" + i);
    //もう一つ関数で囲む
    (function(n){
    button.onclick = function(){
    alert(n);
    };
    //iを渡す
    })(i);
    }
    };

    これが前のものとどう違うのかがよく分かりません。
    iを引数として渡しているので、それを参照してもよさそうな気がするのですが・・・
    button.onclick=…を匿名関数でくるんだときにスコープが変わるのでしょうか?教えてください
    958 : Name_Not - 2011/07/19(火) 00:41:39.21 ID:??? (+20,+20,-37)
    >>957
    上のはiを直接参照してるからループが終わった後の値を参照する事になる
    下のだと個無名関数でスコープを作ってるからiと切り離せて参照できるためループが関係なくなる
    959 : Name_Not - 2011/07/19(火) 02:09:23.07 ID:??? (+33,+29,-44)
    >>958
    下のは無名関数にわたされてる引数の i がループカウンタの i を隠してるって感じですか?
    関数定義のタイミングと変数定義のタイミングが違うから・・・とか変なこと考えてましたが、これは全然関係ないっぽいですね・・・
    960 : Name_Not - 2011/07/19(火) 06:21:29.86 ID:??? (-26,-30,+0)
    >>959
    下でやってるのはこれとだいたい同じ

    window.onload = function()
    {
    for (var i = 1; i <= 3; i++) {
    var button = document.getElementById("button" + i);
    setButtonClick(button, i);
    }
    };

    function setButtonClick(button, n) {
    button.onclick = function() {
    alert(n);
    };
    }

    for内で呼ばれたsetButtonClickは、ループごとに n がそれぞれ別の値になっている。
    alertは、onclickが実行された時点で引数を探しにいって、nをみつけて表示している。
    よって、alertはそれぞれ別の値になっているnをみつけて表示できる。
    >>957の前者では、alertが実行されてiを探しにいった時点で、iはループを終了して3になっているから、
    どれを実行しようとも3が表示されてしまう。
    962 : 945 - 2011/07/19(火) 08:39:27.74 ID:??? (-7,+5,+1)
    >>951
    ありがとうございました
    963 : Name_Not - 2011/07/19(火) 11:18:11.59 ID:??? (+20,+29,-13)
    書き忘れてる所があったらアラートで教えてくれるようなの作ったんですが
    アラートってもしかして嫌われたりしてますか?
    964 : Name_Not - 2011/07/19(火) 11:26:57.99 ID:??? (+27,+29,-25)
    なにを書き忘れてて、どういうタイミングかにもよる。
    多分フォームのこと言ってるんだろうけど説明足りなすぎ
    965 : 951 - 2011/07/19(火) 12:20:29.06 ID:??? (-25,-30,-165)
    >>962
    肝心なところを見落としてました。

    例えばidが text1 の要素を 0 、text2 の要素を 10 とかにしてあると、
    text1 のほうは 2 までしかカウントアップしません。
    innerHTMLでpoo には文字列 "0" 、boon には文字列 "10" が入り、
    if (poo < boon) が、数値としての大小ではなく
    文字コード順を比較するものになってしまっています。

    text2の数値までカウントアップなら、 poo boon ともに parseInt などで
    数値に変換しておいてから比較しないとダメでしたね。ごめんなさい。
    966 : Name_Not - 2011/07/19(火) 13:14:35.70 ID:??? (+0,+1,-14)
    うわ速いね。次スレ975超えたら。テンプレ案はhttp://codepad.org/CdUhJKNu
    これで? IDは持ち越し?
    967 : Name_Not - 2011/07/19(火) 13:48:12.33 ID:??? (+32,+29,-16)
    >>882,885-886
    テンプレ議論はここらへんが残ってるな
    IDに関しては完全に持ち越しだな
    あほみたいな議論を長々とするから・・・
    968 : Name_Not - 2011/07/19(火) 14:59:28.54 ID:??? (-28,-29,-23)
    >>963
    個人的にだけど、submitのタイミングならむしろ分かりやすいと思う
    blurとかfocusで発動したら発狂する
    969 : 945 - 2011/07/19(火) 15:10:30.57 ID:??? (+24,+29,-1)
    >>965
    わざわざありがとうございます。もう少しがんばってみます
    971 : Name_Not - 2011/07/19(火) 17:10:45.09 ID:??? (-20,-18,-19)
    HTML5でname属性って必須じゃなくなったんだっけ?
    977 : Name_Not - 2011/07/19(火) 21:47:37.08 ID:??? (+19,+26,-17)
    そのためのライブラリだろ
    978 : Name_Not - 2011/07/19(火) 21:51:14.82 ID:??? (+20,+22,-13)
    ここまでのテンプレまとめ
    http://codepad.org/12WcThLA
    980 : Name_Not - 2011/07/19(火) 21:55:05.01 ID:??? (-21,-15,-5)
    >>974
    ありがとうございます
    つぎはjavascriptでの配列操作などを勉強してみます
    981 : Name_Not - 2011/07/19(火) 22:42:53.20 ID:IvPy3ovO (+21,+26,-16)
    http://ifav.jp/item/B004GJ337I

    このサイトのPVを探すとこみたいに
    YouTubeの埋め込みシステムを作りたいのですが

    どうすればいいでしょうか?
    982 : Name_Not - 2011/07/19(火) 23:48:41.80 ID:??? (+35,+29,-22)
    スレ立て人ですが、やっぱLv不足で立てられません。どなたかよろ。
    テンプレは >>978 であってると思われ。
    983 : 忍法帖【Lv= - 2011/07/20(水) 00:11:26.09 ID:??? (+32,+29,-21)
    >>982
    すまんレベルは足りてるはずなんだがホストのせいで立てられなかったわ
    984 : 忍法帖【Lv= - 2011/07/20(水) 02:30:15.75 ID:??? (+27,+29,-3)
    どれどれおいちゃんがスレ立てにチャレンジしてみようかな
    986 : Name_Not - 2011/07/20(水) 08:16:03.09 ID:??? (+9,+21,+0)
    ありがとー
    987 : Name_Not - 2011/07/20(水) 12:23:24.15 ID:??? (+17,+29,-26)
    >>985 多謝!

    ぶじ平常に復帰してめでたい。テンプレテロのアンタ、残念だったねー(笑)。
    2ちゃんらしい煽りでした。
    989 : Name_Not - 2011/07/20(水) 20:38:20.72 ID:??? (+27,+29,-6)
    旧スレの余り、もったいない。リンクがついてないから誰もいないし。
    990 : Name_Not - 2011/07/20(水) 20:57:11.14 ID:??? (+22,+29,-5)
    居たりはするが
    埋めでいいだろ
    992 : Name_Not - 2011/07/20(水) 22:11:37.51 ID:??? (-6,+5,-1)
    梅子
    999 : Name_Not - 2011/07/21(木) 00:51:01.17 ID:??? (+22,+29,-1)
    おいちゃん1000とっちゃうぞー
    1000 : Name_Not - 2011/07/21(木) 00:51:34.72 ID:??? (+4,+11,+0)
    1000とったら
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について