私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.88 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>945
「text2の数までカウントアップ」を意図してるのなら、動作すると思います。
http://jsfiddle.net/S5keM/
ただ、カウントアップは止まってもhageの繰り返しは止まりません。
hage内で setTimeout で繰り返しなわけですが、
hage内で clearTimeout では間に合わずに繰り返されてしまいます。
(945のままでは clearTimeout まで到達しないので else if (条件) {...} を else {...}にしていますが、
到達しても止まるわけではありません)
setTimeout での繰り返しの場合、繰り返されるコード自身に止めさせたいなら
「条件次第で clearTimeout する」のではなく、「条件次第で setTimeout しない」処理が必要です。
どう書けばよいかは難しくないと思うので、ご自身で考えてみてください。
setInterval の場合と同じように止められない理由は長くなるので、次のレスに分けます。
「text2の数までカウントアップ」を意図してるのなら、動作すると思います。
http://jsfiddle.net/S5keM/
ただ、カウントアップは止まってもhageの繰り返しは止まりません。
hage内で setTimeout で繰り返しなわけですが、
hage内で clearTimeout では間に合わずに繰り返されてしまいます。
(945のままでは clearTimeout まで到達しないので else if (条件) {...} を else {...}にしていますが、
到達しても止まるわけではありません)
setTimeout での繰り返しの場合、繰り返されるコード自身に止めさせたいなら
「条件次第で clearTimeout する」のではなく、「条件次第で setTimeout しない」処理が必要です。
どう書けばよいかは難しくないと思うので、ご自身で考えてみてください。
setInterval の場合と同じように止められない理由は長くなるので、次のレスに分けます。
* リファレンスに書いてあるようなこと
setTimeout / setInterval は、
引数として与えられたコードと、実行までの間隔と、
set~ がキャンセル用に生成するIDとを、
実行キュー(実行順番待ちの列)に設定します。そしてIDを返します。
このIDは、setTimeout / setIntervalするたびに新しいもの(連番)が生成されます。
clear~は、指定したIDのコードを実行キューから外します。
実行キューに収めたコードの実行が始まってからそのIDでclear~しても
その回の実行が中断されるわけではないことに注意してください。
* 繰り返しを止めるには
setInterval で指定間隔での繰り返し実行が出来ますが
実際のところ実行キューに入るのは次の1回分のみです。
繰り返しになるのは、コードを実行するとともに
同じコード・間隔・IDで自動的に再設定されるものだからです。
つまり一度設定すれば同じID再利用で繰り返しなので、
実行されるコードの中からであっても clearInterval にそのIDを与えてやれば
次回分は実行キューから外され、繰り返しは止まります。
実行されるコードの中に setTimeout を書いて繰り返しさせる場合には、
実行されるコードの中で clearTimeout しても繰り返しは止まりません。
IDは使い捨てだし、clear~するタイミングが遅すぎます。
「繰り返しを止めたいところでは次回分の setTimeout しない」ように書く必要があります。
setTimeout / setInterval は、
引数として与えられたコードと、実行までの間隔と、
set~ がキャンセル用に生成するIDとを、
実行キュー(実行順番待ちの列)に設定します。そしてIDを返します。
このIDは、setTimeout / setIntervalするたびに新しいもの(連番)が生成されます。
clear~は、指定したIDのコードを実行キューから外します。
実行キューに収めたコードの実行が始まってからそのIDでclear~しても
その回の実行が中断されるわけではないことに注意してください。
* 繰り返しを止めるには
setInterval で指定間隔での繰り返し実行が出来ますが
実際のところ実行キューに入るのは次の1回分のみです。
繰り返しになるのは、コードを実行するとともに
同じコード・間隔・IDで自動的に再設定されるものだからです。
つまり一度設定すれば同じID再利用で繰り返しなので、
実行されるコードの中からであっても clearInterval にそのIDを与えてやれば
次回分は実行キューから外され、繰り返しは止まります。
実行されるコードの中に setTimeout を書いて繰り返しさせる場合には、
実行されるコードの中で clearTimeout しても繰り返しは止まりません。
IDは使い捨てだし、clear~するタイミングが遅すぎます。
「繰り返しを止めたいところでは次回分の setTimeout しない」ように書く必要があります。
プログラムの良し悪しなんて全部価値観なのにな。
もちろん、動作しないのは論外だけど。
もちろん、動作しないのは論外だけど。
>>953
方法の良し悪しは目的の達成度で測れるから、価値観が入り込む余地はない
「コードを破壊されない」が目的なら、より「破壊されない」方法が「正しい」に決まっている
目的を批判するのは価値観にもとづく
「コードを破壊されるのは仕方ない」から「破壊されない方法を求めるのは無駄」と主張することはできる
だが「var、prototype には注意」し、「undefined はどうなっても良い」のなら、一貫性に欠ける
目的ではなく価値観で方法を採用するから、こういうチグハグなことになり、バグを生む
方法の良し悪しは目的の達成度で測れるから、価値観が入り込む余地はない
「コードを破壊されない」が目的なら、より「破壊されない」方法が「正しい」に決まっている
目的を批判するのは価値観にもとづく
「コードを破壊されるのは仕方ない」から「破壊されない方法を求めるのは無駄」と主張することはできる
だが「var、prototype には注意」し、「undefined はどうなっても良い」のなら、一貫性に欠ける
目的ではなく価値観で方法を採用するから、こういうチグハグなことになり、バグを生む
例えば「打鍵コストを下げる」という目的で「undefined には目を瞑る」と言うなら、まだ一貫性がある
「保守する」という目的で「自分に理解できないものは使わない」と言うなら、正直で好感が持てる
だが価値観の話を延々とされた所で、そいつの目的が分からなければ、方法の是非など議論できるはずがない
まして、そいつの目的が単に「相手の論破」であるなら、そいつの価値観の話なんぞ付き合うだけ無駄だ
方法の是非だけを問えば良い、どうせそいつには答えられない
「保守する」という目的で「自分に理解できないものは使わない」と言うなら、正直で好感が持てる
だが価値観の話を延々とされた所で、そいつの目的が分からなければ、方法の是非など議論できるはずがない
まして、そいつの目的が単に「相手の論破」であるなら、そいつの価値観の話なんぞ付き合うだけ無駄だ
方法の是非だけを問えば良い、どうせそいつには答えられない
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=…を匿名関数でくるんだときにスコープが変わるのでしょうか?教えてください
にあるクロージャの動作、というか関数定義のタイミングがよく分かりません
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
下のは無名関数にわたされてる引数の i がループカウンタの i を隠してるって感じですか?
関数定義のタイミングと変数定義のタイミングが違うから・・・とか変なこと考えてましたが、これは全然関係ないっぽいですね・・・
下のは無名関数にわたされてる引数の i がループカウンタの i を隠してるって感じですか?
関数定義のタイミングと変数定義のタイミングが違うから・・・とか変なこと考えてましたが、これは全然関係ないっぽいですね・・・
>>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が表示されてしまう。
下でやってるのはこれとだいたい同じ
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
肝心なところを見落としてました。
例えばidが text1 の要素を 0 、text2 の要素を 10 とかにしてあると、
text1 のほうは 2 までしかカウントアップしません。
innerHTMLでpoo には文字列 "0" 、boon には文字列 "10" が入り、
if (poo < boon) が、数値としての大小ではなく
文字コード順を比較するものになってしまっています。
text2の数値までカウントアップなら、 poo boon ともに parseInt などで
数値に変換しておいてから比較しないとダメでしたね。ごめんなさい。
肝心なところを見落としてました。
例えばidが text1 の要素を 0 、text2 の要素を 10 とかにしてあると、
text1 のほうは 2 までしかカウントアップしません。
innerHTMLでpoo には文字列 "0" 、boon には文字列 "10" が入り、
if (poo < boon) が、数値としての大小ではなく
文字コード順を比較するものになってしまっています。
text2の数値までカウントアップなら、 poo boon ともに parseInt などで
数値に変換しておいてから比較しないとダメでしたね。ごめんなさい。
うわ速いね。次スレ975超えたら。テンプレ案はhttp://codepad.org/CdUhJKNu
これで? IDは持ち越し?
これで? IDは持ち越し?
ここまでのテンプレまとめ
http://codepad.org/12WcThLA
http://codepad.org/12WcThLA
スレ立て人ですが、やっぱLv不足で立てられません。どなたかよろ。
テンプレは >>978 であってると思われ。
テンプレは >>978 であってると思われ。
>>982
すまんレベルは足りてるはずなんだがホストのせいで立てられなかったわ
すまんレベルは足りてるはずなんだがホストのせいで立てられなかったわ
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.81 + (1001) - [97%] - 2010/12/10 20:01
- + JavaScript の質問用スレッド vol.86 + (1001) - [97%] - 2011/5/27 21:50
- + JavaScript の質問用スレッド vol.98 + (1001) - [97%] - 2012/4/9 14:46
- + JavaScript の質問用スレッド vol.89 + (1001) - [97%] - 2011/9/4 4:17
- + JavaScript の質問用スレッド vol.78 + (1001) - [97%] - 2010/6/25 3:53
- + JavaScript の質問用スレッド vol.80 + (1001) - [97%] - 2010/11/9 2:17
- + JavaScript の質問用スレッド vol.87 + (1001) - [97%] - 2011/6/21 6:33
- + JavaScript の質問用スレッド vol.82 + (1001) - [97%] - 2011/1/19 7:54
- + JavaScript の質問用スレッド vol.83 + (1001) - [97%] - 2011/2/24 8:02
- + JavaScript の質問用スレッド vol.84 + (1001) - [97%] - 2011/3/30 7:32
- + JavaScript の質問用スレッド vol.85 + (1001) - [97%] - 2011/4/25 21:32
- + JavaScript の質問用スレッド vol.128 + (1001) - [95%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.108 + (1001) - [95%] - 2013/9/21 15:16
- + JavaScript の質問用スレッド vol.118 + (1002) - [95%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.138 + (1004) - [95%] - 2019/4/20 23:45
- + JavaScript の質問用スレッド vol.96 + (1001) - [95%] - 2012/1/28 23:01
- + JavaScript の質問用スレッド vol.94 + (1001) - [95%] - 2012/1/8 15:46
トップメニューへ / →のくす牧場書庫について