+ JavaScript の質問用スレッド vol.71 +
1 :
sage :
2009/05/20(水) 10:19:07 ID:???
2 :
sage :2009/05/20(水) 10:20:13 ID:???
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8) 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
3 :
sage :2009/05/20(水) 10:21:20 ID:???
【FAQその1】 Q1. 開いた別窓/フレームの内容にアクセスできないのですが… A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。 Q2. JavaScriptでローカルファイルを読み/書きたいのですが… A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに… Q3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが… A3. セミコロンで複数の文を区切れます。onclick="foo();bar();"としましょう。 Q4. document.write(...)でページ内容を追加したいのですが… A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。 innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。 Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが… A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。 Q6. DOMでtable要素にtr要素を追加しても表示されないのですが… A6. DOMでは(XHTML 1.x除く)tbody要素にtr要素を追加する必要があります。 tbody要素はtbodyタグを書いていなくても自動的に作成されます。 またはtable.insertRow()/tbody.insertRow()を使いましょう。 Q7. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが… A7. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。 Q8. フォーム部品名を変数にした「...myform.変数名.value」が動きません… A8. 「document.forms.myform.elements[変数名].value」でどぞ。 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。 Q9. Aタグのonclickで動作指定してるのですが時々動きません… A9. 「onclick="...;return false"」としないとページ移動しちゃうから。
4 :
sage :2009/05/20(水) 10:23:03 ID:???
【FAQその2】 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。 IEでは要素オブジェクトのプロパティcurrentStyleを使う。 Q11. 100*1.15の結果が114.999…998となってしまうのですが… A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。 Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが… A12. IE7/Gecko/Opera/Safariのnew XMLHttpRequest()、IEの new ActiveXObject("Msxml2.XMLHTTP.6.0") (または"Msxml2.XMLHTTP.3.0") を使えばできます。古いブラウザだと隠しフレームに読むなどのワザが必要。 Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません… A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。 Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが 「"...this..."」とか「function(){...this...}」ではうまく行きません。 A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。 「function(x){return function(){...x...};}(this)」のようにthisを別の変数に 束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中) Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが… A15. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、 offsetがマッチした位置、sが置き換え前の文字列全体になります。 Q16. input type="file"の値を設定(参照)できないのですが… A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。 Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが… A17. コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。
5 :
sage :2009/05/20(水) 10:26:17 ID:???
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
6 :
sage :2009/05/20(水) 10:27:45 ID:???
>>10 gmもコンソールにエラーメッセージ出さなかったっけ?
firstChildにnodeValueがないところで処理止まってる
12 :
10 :2009/05/21(木) 07:32:13 ID:???
>>11 ありがとうございます。
ちなみに、何を使って調べていただいたのか教えてもらえませんか?
firebugを入れたんですが、まだ使い方もよく分からないので。
あたまをつかいました
>>12 firebugならコンソールにスクリプト貼りつけるだけでエラーわかるよ。
for文で回した時にfirstChildにnodeValueがない場合があってエラーになる。
<font>タグ抜き出してるからそういうこともあるだろうけど、そもそも何がやりたいスクリプトかわからんな
<font>で囲まれた「徳島」って1,2個しかないように見えるし。
やっとテンプレからアフィ厨ks野郎のサイトがなくなって清々したぜ
質問です。 <script type="text/javascript"> function calc(b){ var r = 253.5; return {str:r.toString(b).toUpperCase(),val:r}; } window.onload = function(){ var que = [2,8,16]; for(var i in que){ var t = calc(que[i]); document.getElementsByTagName("body")[0].innerHTML += t.val + "を" + que[i] +"進数にすると" + t.str + "<br />"; } } </script> 253.5を2,8,16進数に変換するスクリプトですがOperaで動作しません。Firefox,IE,Safariではきちんと動作します。 Firefox,IE,Safariではこのように表示される 253.5を2進数にすると11111101.1 253.5を8進数にすると375.4 253.5を16進数にするとFD.8 Operaでは 253.5を2進数にすると253.5 253.5を8進数にすると253.5 253.5を16進数にすると253.5 と表示されます。 253.5は例えであり実際はランダムな数になり、コードは最小限になるように短くしています。 何が駄目なのでしょうか
18 :
Name_Not_Found :2009/05/21(木) 20:04:42 ID:+MtR0bgo
var idname = 1; for(i = selectnum; i <= 7 + selectnum; i++){ var idname_mod = i; if(i > 7){ idname_mod = i - 7; } document.getElementById(idname).innerHTML = htmls[idname_mod]; idname = idname++; } 上記の場合、なぜかdocument.getElementById(idname)の部分でidnameが NULLでエラーになります。最上部のidnameのvarをとりグローバルにして も同様のエラーが出ます。 Perlの場合、my変数を使い同様の処理を行った場合はこのようなエラーは 出ないと思われるのですが、ご教示いただけますと幸いです。 宜しくお願いいたします。
>>17 ありがとう。小数点が駄目なのね・・
自分で実装するしかないな。
配列をfor-inで回すのってまた流行り出したのか
>>18 はHTML仕様を三回朗読しろ
動作テスト用に早く書けるから使ってるだけです。実際はlength使ってます
きれい
>>18 document.getElementById(idname)の返値がnullだというエラー文だと思われ
ID番号って言うからねぇ♪
文法違反だが実際には数字だけでも取れるけどな 単にそのIDを持つよーそがないんだろ
Prototype.js(できれば1.6.*系を使いたい)とVSValidate(
http://www.jsvalidate.com/ )を
使用してサイトを作成したいのですが、jsvalidate_beta 04.zipをダウンロードして
HTMLをかいてみたところうまく動作しません。
以下HTML
----
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " xml:lang="en" lang="en">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<script src="./prototype.js" type="text/javascript" charset="shift_jis"></script>
<script src="./effects.js" type="text/javascript" charset="shift_jis"></script>
<script src="./jsvalitdate.js" type="text/javascript" charset="shift_jis"></script>
</head>
<body>
<form id="foo" action="/" method="post">
<input class="jsrequired" id="bar" name="bar" type="text" value="" />
<input type="submit">
</form>
</body>
</html>
----
Prototype.jsは1.5.*系と1.6.*系両方試して見ましたがダメでした。
ブラウザはIE7でためしています。
27 :
Name_Not_Found :2009/05/21(木) 23:53:57 ID:HOZFvioo
配列に格納した文字列を5秒ごとにランダムに表示していくJavaScriptを組みたいのですが、 どのように組めばよいのでしょうか? Math.randomをうまく使えば組めそうなのですが、わかりません。
Math.floor(Math.random()*5)で0以上5未満の整数が生成される あとは分るよな
29 :
18 :2009/05/22(金) 00:06:47 ID:???
>>23 ご返答有難うございます。
document.getElementById(idname)のidname部分を例えば3にすると
エラーが出ずに動作します。
selectnumなどを試しにセットしても動作します。
idnameに値が入っていないのが原因だと思われるのですが、
なぜこの構文でidnameに何も入っていないのかがわから
なかったため、質問させていただきました。
変数のスコープの扱いの違いも把握はしているつもりで
すので、何度も確認しております。
教えていただけますと助かります。。
31 :
Name_Not_Found :2009/05/22(金) 00:18:30 ID:3b1/94FH
>>27 var av = new Array(5) ;
av[0] = "蒼井そら" ;
av[1] = "麻美由真" ;
av[2] = "吉沢明歩" ;
av[3] = "RIO" ;
av[4] = "初音みのり" ;
function fuckYourself()
{
var randou = Math.floor(Math.random()*5)
document.porn.bigtits.value = av[randou];
setTimeout("fuckYourself()", 2500);
}
//-->
</script>
<BODY onLoad="fuckYourself()">
<FORM name="porn">
<INPUT size="10" type="text" name="bigtits">
</FORM>
</BODY>
>>29 この部分だけじゃidname自体がnullになるようには見えない。
ここ以外のコードを疑うことを薦める。
わかるのはせいぜい
>>20 ,25と
idname=idname++という無駄な表記があることぐらいだ。
あとはFirebugでも使っておけ。原因不明のnullならステップで見ていくとだいたいわかる。
34 :
26 :2009/05/22(金) 00:45:41 ID:???
自己レスです。 <form id="foo" name="foo" action="/" method="post"> としたところ、Prototype.js1.5.0では動作することができました。 しかし1.6.*系では動作せず… 1.6.*系は無理なんでしょうか…
35 :
10 :2009/05/22(金) 01:17:20 ID:???
>>18 質問の答になってないけど、気になった点をいくつか。
> var idname_mod = i;
エラーにならないけど、for ループの中で変数宣言はしない方がいいと思う。
> if(i > 7){ idname_mod = i - 7; }
もしも 7 で割った余りが欲しいなら、
idname_mod = i % 7;
でないと、仮に i が 14以上の値をとるときに意図した値にならない。
(本当に 7 を引くだけでいいなら、これは無視)
> idname = idname++;
これは変数 idname の値を変えない。
インクリメントするなら、
idname++(または ++idname);
変数宣言は同じスコープならどこに書いても同じ結果になる falseをtrueにしてみると・・・ (function (){ a = 1; if(false) var a = 2; alert(a); })(); alert(window.a); まあキモイから後追いで宣言なんてしないほうがいいけど 初回がforの中でもそこで宣言して構わないかと
変数宣言の位置はやっぱ好み次第だったかな。
あと、7 で割った余りでなく、1 から 7 までの値が欲しい場合は、
(i % 7)? idname_mod = i % 7 : idname_mod = 7;
だったり。
でも、i % 7 を使うと、変数 idname_mod の値がループの最初と最後で同じ値をとるから、
やっぱこれは質問者の意図とは違うのかもと思ったり。
という訳で、
>>36 は取り消し、取り消し。
i % 7 + 1 でいいだろうに
>>39 idname = 1 のときに idname_mod = 2 になるけどなw
41 :
Name_Not_Found :2009/05/22(金) 10:04:54 ID:zC+md9GS
クラスのインスタンスメソッドをイベントハンドラとしてonloadなどに渡すってどうですか? window.onload = hoge.piyo; thisがhogeでなくwindowsになってしまっていつも対応に苦労してるんですが。 window.onload = function(obj) { function() { obj.piyo }}(hoge);
idnameの数字だけ増やしていくうまい方法ありますよね。
>>41 うん?その例なら
window.onload = function(){ hoge.piyo(); };
で済む話だろう?
どうって何が?
44 :
18 :2009/05/22(金) 11:47:45 ID:???
皆さまご意見いただきありがとうございます。 恥ずかしながらまだ解決には至っておりませんが、色々試してみたいと思います。 現在のソースをのせておきます。 if(cid == ""){ cid = 1; } var selectnum = cid % 7; if(selectnum == 0){ selectnum = 7; } if(selectnum != 1){ var htmls = new Array(); with ({i:0}) { for(var i = 1; i <= 7; i++){ htmls[i] = document.getElementById(i).innerHTML; } } var idname = 1; with ({i:0}) { for(var i = selectnum; i <= 7 + selectnum; i++){ var idname_mod = i; if(i > 7){ idname_mod = i - 7; } document.getElementById(idname).innerHTML = htmls[idname_mod]; idname++; } } } やはり現在も、 var idname = 1; をたとえばfor内に入れるとエラーなしで 動作します。
というか
>>18 も
>>44 もエラーが再現できないんだよ
再現するコードを書けないならソース丸ごとうpしてほしい
ついでにエラー文のコピペも
id="7"が存在してないとかいうオチな気がしてきた
>with ({i:0})
本題とは関係ないだろうけど、こんなもん金輪際使うな
失礼、id="7"でささるならそれ以前にささるのか
>>41 Prototype.jsならbind/bindAsEventListenerという素敵な拡張がある
もしくはapplyでぐぐって関数作っておくと幸せになれるかも
数値の一番上の位の数字を文字として取得するのに 一番メモリ消費が少ない方法、および一番高速な方法って どんなのが有名ですか?
文字列になおしてチャラット
正規表現
たったそれだけの処理をするのに 有名な方法なんてあるのかね
バッカス・ギルナー法
ホッタイモ・ジルーナ法
54 :
Name_Not_Found :2009/05/23(土) 01:30:54 ID:zhcgrcoO
ゆっくりスクロールしてジャンプするスクリプトを書いてくれ 10行ぐらいで出来そうだがJavaScriptは苦手なもんで頼みます
55 :
Name_Not_Found :2009/05/23(土) 01:48:59 ID:v55uSy5X
IE6を使用しています。 Ctrl + マウスホイールの制御を行いたいです。 どなたか教えてください。
<script> a="hello world!"; b=a.strike(); document.write(b); </script> こういうの見ると、ああ、OOPなんだな、って思うね。
>>57 このコードをeclipseで書くとき、
strike()の部分を、コード補完できないんだが、
みんなもそうか?
それとも自分だけ?
>>58 そのメソッドはECMA-262にない、つまりIE専でしょ。だから
補完できないんでは。
ちょっと勘違いしていたようだ。 すでに、コードの上の方の行で、 入力があれば、それを参考にして出るようだ。 初出だと、手で打たないとダメみたい。
JS1.0時代の非標準メソッドで非推奨のSTRIKEを生成する無知を何とかしろ、って思うね。
とりあえずIE専じゃねーから
Date オブジェクトの日付の範囲って西暦99年以前はダメなのでしょうか?
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Predefined_Core_Objects/Date_Object ここ↑には「Date オブジェクトの範囲は1970年1月1日(UTC)を基準に -100,000,000日から100,000,000日です。」とあるので、
単純計算で前後約273972年(=100,000,000÷365)を測定できる事になります。
しかし日付チェック関数(
http://www.hoge256.net/2007/08/64.html )だと100/1/1以降はOKですが99年以前はプラス1900されているようでダメでした。
function checkDate(year, month, day) {
var d = new Date(year, month - 1, day);
if( d == null ||
d.getFullYear() != year ||
d.getMonth() + 1 != month ||
d.getDate() != day ) {
return false;
};
return true;
};
結果:
1970/1/1 => OK 木
1969/12/31 => OK 水
1000/1/1 => OK 水
999/12/31 => OK 火
100/1/1 => OK 金
99/12/31 => NG (1999/12/31になる)
↓だとgetFullYear は 「1000年から9999年までの日付に対して1995のような4桁の数字を返します。」とありますが、
999年でもtrueでOKでした。
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Date/getFullYear 99年以前もOKなメソッドってあるのでしょうか? getUTCFullYear?
setFullYear
66 :
64 :2009/05/23(土) 23:17:55 ID:???
>>65 ありがとうございます。
99年以前も問題なく動作するようになりました。
function checkDate(year, month, day)
{
var d = new Date(year, month - 1, day);
if(d.getFullYear() != year) d.setFullYear(year);
if( d == null || d.getFullYear() != year || d.getMonth() +1 != month || d.getDate() != day) {
return false;
};
return true;
};
<script> a="hello"; b=a.del(); document.write(b); </script> これだと動かないんだのう。
なんじゃそのメソッドは
a = function(){ a.del = function(){ return "hello"; } } a(); b=a.del; document.write(b);
>>69 function () { return "hello"; }
って出るだけだぞ
ようは、javascriptで打ち消し線を出したいだけなんだけど。 strikeは非推奨なんだよね? じゃあなにを使うんだって言う。
そういやテンプレから「最低限のHTMLとCSSを理解する者」云々が消えてんだな
複数の変数 var subete = [test,hoge]; をstr.replaceを用いて置換したいです どうすればいいですか?
forれば
>>72 言われてみれば。それは入っていた方がいいよね。
>>1 に入れるということでいいかな。
CSSをjavascriptで動的に変更させたいと思い作成したのですが
IE6では動作するのですがFirefoxでは動きません
IEで動くのでおそらくスクリプトには問題がないと思うのですが…
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
<title>ジャヴァスクリプト</title>
<link href="basic.css" rel="stylesheet" type="text/css" media="all" />
<script src="flams.js" type="text/javascript"></script>
</head>
>>77 どうやってCSSにアクセスしてるのかわからんけど
IEとFxではCSSのアクセス方法がまるで違うとだけ
>>78-79 すいません
今までは全く問題なかったのですが今回だけなぜか…
window.onload = init;
function init() {
for (var i = 1; i < 4; i++) {
document.getElementById("ram" + i).onclick = function() {
change(this.getAttribute("id"));
}
}
}
function change(id){
var r = parseInt(id.substring(3));
if (r == 1) {
ram1.style.background = "#a9a9a9";
ram2.style.background = "#ff69b4";
ram3.style.background = "#ff69b4";
} else if (r == 2) {
ram1.style.background = "#ff69b4";
ram2.style.background = "#a9a9a9";
ram3.style.background = "#ff69b4";
} else if (r == 3) {
ram1.style.background = "#ff69b4";
ram2.style.background = "#ff69b4";
ram3.style.background = "#a9a9a9";
}
}
CSSです /*CSS*/ #ram1{ background: #a9a9a9; width: 174px; border-left: 1px solid #a9a9a9; } #ram2, #ram3, #ram4{ background: #ff69b4; width: 174px; border-left: 1px solid #a9a9a9; }
ああ、cssファイルを切り替えるとかの話じゃないのか >ram1.style.background = "#a9a9a9"; Fxではwindow[id]は定義されない ちゃんとgetElementByIdしとけ というかエラーメッセージ見ろ
83 :
73 :2009/05/24(日) 18:34:42 ID:???
ありがとうございます! こんな感じに単語帳を作ってます。 forを使ってみたのですがエラーがでます。添削お願いします var subete = [test,hoge]; var test = { "YES": "はい" }; var hoge = { "お茶": "tea" }; function convertStr(txt){ str=txt; for(i=0;i<subete.length;i++){ str=str.replace(subete[i],subete[i]) } return str; }
>>83 いろいろ酷いなw
>var subete = [test,hoge];
>var test = { "YES": "はい" };
順序が逆。代入が済んでない変数を呼んでいるから、結果的にこれと同じ。
var subete = [ undefined, undefined ];
>var test = { "YES": "はい" };
testはObjectオブジェクト(ややこしい)であってStringオブジェクトではないから
そのままでは文字列としては扱えない。
for ( var k in test ) { alert(k);, alert(test[k]); }
こんな感じでやれば中身のStringオブジェクトにアクセスできる。
とはいえ、そもそもそこで連想配列的なObjectオブジェクトにする必要があるのかを
まず考え直した方がいい。
携帯で画像をランダム表示したいのですが どのようなスクリプトが使えるのでしょうか?
>>85 普通の携帯はスレチ、JSうごかねーもん。
フルブラウザ限定でいいなら動くけど
ライブラリにするまでもないから自作するしかないだろうなぁ。
>>86 レスありがとうございます
どこのスレ行けばよいでしょう?
CSSスレあたりですか?
サーバーサイドならご自由に。 要は画像差し替えたHTMLをその都度作れってことだから。 PHPあたりが妥当とは思うけど、レンタル鯖使ってるならなにが使えるかをまず調べて。
>>82 ありがとうございます
無事動きました
しかしエラーコンソール?を使っても全然エラーはでなかったんです…
firebugを見てもよくわかりませんでした
90 :
Name_Not_Found :2009/05/24(日) 22:16:03 ID:gL6yyyeI
<html><head><title></title></head><body><form> <script type="text/javascript"> var count = 0; window.attachEvent("onload", function(){ setInterval(setText, 1000); }); function setText() { document.getElementById("text1").value = count++; } </script> <div> <br /> <input name="text1" type="text" id="text1" style="width:100px;" /> <br /> </div> </form></body></html> 一定期間である処理をさせたいのでsetIntervalを使用してみたのですが、 ブラウザ上で右クリックメニューを出したり画面上部のメニュー部から何らかのポップアップ画面を出すと setInterval の処理が止まるようです。 ブラウザ上でどんな操作をされようと、一定期間で必ず処理を実行させるように する方法って無いでしょうか? 使用ブラウザ:IE7
>>90 そこまで制限した物を動かしたいのならバイナリ作るなりするべきじゃないか?
カウントするだけ(実際は違うんだろうが)なら、
処理が止まろうが時間という絶対値が取得できるんだからそれを利用するべきだろ
92 :
73 :2009/05/25(月) 00:36:04 ID:???
>>84 返事ありがとうございます
今回は連想配列は不要と解釈してよろしいのでしょうか?
必然性がないってことでしょ。
eclipseで、JavaScriptを編集しているとき、 strikeは補完はされないの?
そこまでstrikeを愛してるなら自分で拡張しろ
<strike>strike</strike>
ムリしてStringのメソッドでタグ付けしなきゃならない理由が無いよ
大半の人がよく使うモノなら、ソフトが標準で用意するのが当たり前。 あるべき機能がないソフトは「時代遅れ」と呼ばれる。 一部の人だけがよく使うモノなら、その人が自分で用意するのが当たり前。 プラグインだのライブラリだの、そんなものはゴロゴロしてる。 言語だろうが開発環境だろうが、この基本は変わらん。
jsってJScriptのことですよね。
じゃあjkは何だ
JKousei
JK flip-flop
103 :
Name_Not_Found :2009/05/25(月) 23:04:28 ID:WB2FkpcL
ちょっとお聞きしたいのですが、javascriptをドリームウィーバーで使って 写真を違う写真に移る時のフェードイン、フェードアウトをモザイクを使いたいのですが ネットで調べたら以下の様なscriptがあって使ってみたのですが、 画像を挿入しても写らないのですが、何が間違っているのでしょうか? 誰か教えて下さい。
104 :
Name_Not_Found :2009/05/25(月) 23:07:28 ID:WB2FkpcL
<body>
<!--■以下のタグをbody内に入れてください-->
<a href="javascript:kawaru()">
<img src="oferia1.jpg" name="kirikae" width="300" height="300" border=0 style="filter:progid:DXImageTransform.Microsoft.Pixelate(MaxSquare=25,Duration=3)"></a>
<!--■↑上記 img src="oferia1.jpg" に最初の画像名を入れてね-->
<!--■↑上記 width="300" height="300" に画像の幅と高さを入れてね-->
<!--■↑MaxSquare=25 の数値を変えることでモザイクの大きさが変わる 適宜変えてみてね-->
<!--■↑Duration=3 この3を1や2や4や5にすると切り替わり方が変わる 適宜変えてみてね-->
<!--■以下スクリプトをbody内の上記タグの下に入れてください-->
<script language="JavaScript">
<!--
/*
http://myako.net/ ako's cyberpage*/
var hayasa=4000;//■切り替えの早さ 現在4秒設定 お好きに変えてね
var Ga=new Array("oferia1.jpg","uminonakaa1.jpg","yousei811a.jpg","uma1b.jpg","himawari1.jpg")
//■上記のようにいくつでも画像名を並べてください
var tobisaki=new Array("
http://myako.net/java/javanewn2.cgi ","
http://myako.net/ufu/jsguest.cgi ","
http://myako.net/java/javanewn.cgi ","
http://myako.net/java/jsfaq.cgi ","
http://myako.net/ ")
//■画像をクリックした時に飛ばしたい先のURLを画像の順番に合わせて順番に入れてください
105 :
103 :2009/05/25(月) 23:09:04 ID:WB2FkpcL
続きです
var GaH=new Array(); var IE=window.createPopup;
for (kazu=0;kazu<Ga.length;kazu++){
GaH[kazu]=new Image()
GaH[kazu].src=Ga[kazu] }
function kawaru(){
window.location=tobisaki[add] }
var add=0; var akoGa=0;
var okure=(IE)? document.images.kirikae.filters[0].duration*1000 : 0
function sl(){
if (!document.images) return
if (IE) document.images.kirikae.filters[0].apply()
document.images.kirikae.src=GaH[akoGa].src
if (IE) document.images.kirikae.filters[0].play()
add=akoGa; akoGa=(akoGa<Ga.length-1)? akoGa+1 : 0;
setTimeout("sl()",hayasa+okure) }
sl()
//-->
</script>
<!--■ここまでbody内に入れること-->
<br><br>画像は入っていません ソースを開いて御自分の画像名をお入れください<br>
■から書かれているコメントに従って書き換えて下さい<br><br>
スクリプトご使用の際は以下リンクタグをお入れください<br>
<a href="
http://myako.net/ " target="_top">Script by ako's cyberpage</a>
filter 論外
107 :
Name_Not_Found :2009/05/26(火) 02:09:39 ID:RxqbxoRv
JavaScript切だと紹介記事すら読めないってのは何かの嫌がらせなのかなあ NoScriptオンにしたけど変わった様子もなかったし
そういや、JS終わった君最近見ないね
ASと共に爆死したそうだ
変数宣言時はvarつける習慣があるのですが、つけない方が良いときもあるみたいな記事を見ました。
http://codezine.jp/article/detail/3855 > 関数の宣言時にローカル変数の頭にvarキーワードを付けると、関数の範囲外でも値が維持されます。こうすると、何がまずかったのか判断しにくくなります。
関数の範囲内にスコープを限定するためにvarつけると思っていたのですが、
その理解が間違っているのでしょうか?
×付けると ○付け忘れると なんだろうか?よくわからん
明らかに記述ミスだろう。悩むところじゃない。
つまりvarつける習慣をやめろと
でも、スコープ内はつけるようにと先生が… 何を信じたらいいの
信じるな、考えて判断しろ つーかその程度のウソもウソと見分けられないならこんなところ来るなよw
必要なところに必要なものを書けばいいだけじゃないのか、 一律全部付けるとか付けないとかそういう問題じゃないはずだが
つける習慣をやめるようなものがなんであるの?
後方互換
変数宣言するときに必ずつけるもんだ、と思い込んでるならその考えを改め直すべき
最手前のレイヤーで半透明で大きな雪の結晶を大量に降らせるエフェクトをかけつつ リンクのクリックには全く支障が無いページを作りたいのですが、可能でしょうか?
>>123 NN2.0で使えるもので後方互換って何を想定してんだw
>>124 誤解を招く表現だぞ?
「変数を宣言する時に、その変数のスコープを把握できてないのが問題。
その変数の意味を理解してプログラム組んでいるなら、
付けるか付けないかなんて考えるまでもない」と、こうだろ。
>>125 描画する範囲を計算しといて、降らせる雪1つ1つをCSSかなんかで
個別に位置指定してやればいいんじゃね?
>>127 リンク等にかぶらないように雪を降らせるという事ですね。
マウスが雪のオブジェクトと重なったらhiddenするような方法もありますね。
実は、1年以上前に同じような質問をしたことがあるのですが、
その時はイベントの発生位置から下のオブジェクトを見つけてイベントを受け渡すという
複雑な方法を教えていただいたのですが、IEでは上手く動かなくて断念しました。
やはり、ページ全体にエフェクトをかけるようなダイナミックな表現をするなら
全部Flashで作れという事でしょうか。
ありがとうございました。
だから どうして雪降りをわざわざ動作が遅く・重いJavascriptなんですか Flashでしょ 適材適所って知ってます?
>>126 NNで使えたからstrikeとかvar(笑)とか残ってるってことだろ
>>128 どうでもいいけど組込分野の人?
>>130 ページ全体を半透明オブジェクトで覆って紺色(夜)やオレンジ(夕方)のような表現をしてみたり
24bitPNGをタイル状に指定したオブジェクトをゆっくり動かして霧や雲や陰を表現したり
既存のHTML上にエフェクトがかけられたら面白いと思っただけですね・・・w
>>131 初期仕様から今後の方針まで全部見渡して、
varをあえてはずす理由なんてどこにもないと言いたかったのだが。
varに前方も後方もねーよ。
>>133 ネタにマジレス
わざわざ(笑)付けたのに・・・
varがますます分からなくなってしまいました(泣
>>135 自分で実際に試すのが一番手っ取り早いことを覚えよう。
「varキーワードを付けると、関数の範囲外でも値が維持されます。」
こんなわけのわからん文章で混乱してる時間があるなら、
さっさと適当なサンプル作って確かめて、
「なんだやっぱりIEでもFirefoxでもSafariでもOperaでも(略)
範囲外では保存されないじゃん。
この記事担当者、校正もしてないのかよ。バカだなー」
で終わらせればおk。
varをキーワードとかいってる時点で気づこうな
後方痴漢
>>124 揚げ足取りだが、varは変数宣言するときは必ず付けるもの
宣言しないで代入するとグローバル変数になる
それともletとかconstとかのことを言ってるならごめん
結論出ました、
>>113 は今までどおり変数宣言時にvarつける習慣のままでOK
143 :
113 :2009/05/26(火) 22:03:06 ID:???
こんなにレスがつくなんて! やっばり記事が間違っているようですね。安心しました。
やっばり
携帯っぽい打ち間違いだな。
あってはならない間違いとはこのことだろ
かな打ちだとよく間違えるよ
今からカナ打ちにしようと思ってもできないな、カナ打ちできる人は尊敬するわ そのままだと英語全く打てないから両方できるってことだろうしね
JavaScriptって名前付き引数を使えないの?
>>149 使えないが、オブジェクトを渡すという手はあるな。
function f(o) { ... o.x ... o.a ... }
f({x:10, a:[1,2,3]})
152 :
149 :2009/05/27(水) 23:49:03 ID:???
153 :
Name_Not_Found :2009/05/28(木) 19:51:27 ID:0BJAZQDO
質問いたします。 画面解像度によって違うページに飛ぶ機能を作ってみたのですがどうもうまくいきません(具体的には、解像度の横幅が1024以上ならページA、未満ならページBへと飛びます)。 以下にコードを示します。 <script type="text/javascript"> //<![CDATA[ var w = screen.width;if (w >= 2024) {var x= 1;}else {var x = 2;}//ここで解像度を取得、xに代入 //]]> </script> <script type="text/javascript">//xの値で行き先が変化 //<![CDATA[ if (x = 1) { document.write("OK"); }else { document.write("NG"); } //]]> </script> ・ ・ ・ つまり、最初に解像度が1024以上でxに1を代入、 後のコードでxが1ならページA、それ以外ならページBという風にしようとしたのですが… 本来ページBに飛ばされる環境なのにページAに行ってしまうという状況に陥っております。 皆様のお知恵を拝借したく存じます。宜しくお願い致します。
if (x = 1)
1024なの2024なのどっちさ。コードでは2024と比較してるが。 あとふつう、var x;を外側においてifの中ではxに入れるだけ にするんでは。この場合はこれでも大丈夫なんだろうけど気持ち悪い。 そして最後にif(x = 1)では「常にxに1を代入して、1は真偽値と しては真だからOKの枝を選ぶ」になるけど。比較なら「==」を使う。 まとめると「もっと修練積み直して来い!」だな。
まともなコードを書こうと思うならBrian W.Kernighan , Rob Pike 著のプログラミング作法を読むことをお勧めする
>>153 (screen.width >= 2024) ? document.write("OK"): document.write("NG");
158 :
153 :2009/05/28(木) 20:16:41 ID:0BJAZQDO
>>154-156 「=」を「==」に直したら、意図通りに動きました!本当にありがとうございます!!
取り敢えずはこれで動かしますが、もっと修行します。
>1024なの2024なのどっちさ。
1024です、失礼しました。
未熟は言い訳になりませんね…申し訳ないです。
もっとがんばります。
159 :
153 :2009/05/28(木) 20:52:14 ID:???
>>157 せっかく書いていただいたのにすいません。それではだめなのです…
「xの値で変化」のコードが何十個も続きますので
(xの値次第で何十個ものリンクが一度に変わる、ようなものを想像してください)
ところでこれ、IE6では無理なんでしょうか。解像度を満たしていてもNGのまま…
JavaScriptはONにしてるのに…
>>159 > 「xの値で変化」のコードが何十個も続きますので
そしたら
>>153 の↓部分も何十個も続かない?
var w = screen.width;if (w >= 2024) {var x= 1;}else {var x = 2;}
161 :
153 :2009/05/28(木) 21:49:31 ID:???
>>160 その部分は一個でOKですね。
(というかその部分は外部ファイル化しました)
それにしてもレスポンス速いですね。一日ぐらい待つことを覚悟してたのですが。
つまり、分岐はあくまで「1024以上」「1024未満」の2つだけだけど、 それによって変わる部分はたくさんあるってこと? 変更する部分をまとめて配列に突っ込んどいて インデックス変えれば済むプログラムなんだろうという予想はできるがw まあ、それを言うのはヤボなんだろうなあ。
>>153 何のサイトなのか知らないけど、ユーザーに
buttonクリック等の明示的な選択肢を与えるべきじゃないの?
ページ飛ばされる理由がわからないと
ユーザー混乱するよ。
だいたい解像度別にページ作ったら大変じゃねーの? 1つのページでCSS切り替えるようにした方がよくない?
>>159 あぁ、ページにある<a href="1024未満用のリンク"></a>が<a href="1024以上用のリンク"></a>に置き換わるってこと?
それならそのリンク変えたい<a>タグにrefとかclassでも付けて、
onloadの時点で「それが付いてるやつはリンク変える」とかにしたら良いのでは?
IE4ってもうUA分岐で切ってもOKですか?
率先して IE6 を見限って行こうぜ。
168 :
Name_Not_Found :2009/05/29(金) 15:48:09 ID:s2G+LjiY
jQueryで、loadで読み込んだphpの中にあるpタグに.css('padding','10px')とかしたいんですが。 要は動的に読み込んだものにjQueryでホゲホゲしたいんだすが、どうしたらよいか分かる猛者はいますか。
IE6を見限ることによってIE6使ってる人に対してプレッシャーを与えていこうぜ
>>168 ちょっと言ってる意味がわかんないです
動的とか関係あるの?JavaScriptが実行される時にはHTMLは固定されてるでしょ?
>>168 要するにAjaxで読んだコンテンツ内のpに対してCSSはめたいって事かな
jQueryよく知らないけど、loadのコールバック関数内で
$("#id p").css( なんちゃら )
とかすれば良いのでないかしら?
172 :
Name_Not_Found :2009/05/29(金) 17:41:12 ID:s2G+LjiY
できました!! ありがとーです!
173 :
Name_Not_Found :2009/05/29(金) 21:37:24 ID:mKwqMK/s
var item = document.form1.length とすれば、フォーム(form1)内にあるinput要素を取得できますが、 「form1」という名前を固定ではなく、任意の名前にする場合 どのようにすればいいのでしょうか?
document.forms[form_name].length
部長「今度上層部が刺殺に来るぞ」 ぼく「えっ」 部長「といっても、良くあることだからな」 ぼく「よく人が死ぬんですか」 部長「えっ」 ぼく「えっ」 部長「ああ、普通にしてたらクビは斬られないから安心しろ」 ぼく「えっ」 部長「えっ」 ぼく「クビ以外を斬られることはあるんですか」 部長「減俸とかは時々あるな」 ぼく「そうなんだこわい」 部長「まあ、失敗をしなければ刺殺団はそのまま帰るさ」 ぼく「失敗したらどうなるんですか」 部長「事によるが、まあ悪くても定食くらいだろう」 ぼく「なにそれおいしそう」 部長「えっ」 ぼく「えっ」 部長「コツは死後に気を付けることだな」 ぼく「死後はどうなるんですか」 部長「刺殺室に呼ばれて、色々と悪い点を刺されるかもな」 ぼく「なんだやっぱり死ぬのか」 部長「えっ」 ぼく「えっ」
クリッカブルマップで、 マウスオーバーで色が赤くなるのって どうやるの?
何の上にマウスが乗ったとき?そして何の色が赤くなるんだ?
アンタが赤くなるのならペンキでもかぶれば。
>>1 一、質問を分かる日本語できちんと説明できる者
ペンキわろた
読解力の無いヤツめ。 要するに マウスオーバー→赤面しちゃうような写真が登場 ってことだろ
(//)
イベントデリゲーションでやるんだよ
画像バラしてhoverでおk。 JS関係ないからスレ違い。
グーグルのajaxって IMEで入力中の単語すらも 取得してるんだけど、これって どうやるの? 確定してないのに、取得するのは、どうやるのかってこと。 かくてい ↑この状態なのに、グーグルのサーバーに 送信できるっておかしくない?
なんか昔はケンカばかりだったおまえらが オモロな事を競う合うスレまで昇華したか 氏ねw
全然ぐぐるも利用しないしソースも見てないけどなw キー入力じゃねーの? と 通りすがる
ka って入力されたら、 「か」じゃないかなー? って推測してるだけ?
前スレにキー入力のサンプルあっただろ
>>184-187 setIntervalとかで定期的に入力欄のvalueを取得すれば、
未確定の文字列も取り出せるから。
keyup だろ
>>190 Win IEは取れるんだけど、Linux FFxでonkeyupでは取れない。
setIntervalだと取れる。以下テストページ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
var elt;
function chk() { document.getElementById('d1').innerHTML = elt.value; }
function init() {
elt = document.getElementById('d0').firstChild;
//elt.onkeyup = chk;
setInterval(chk, 100);
}
</script>
</head><body onload="init()">
<div id="d0"><input name="i0" type="text"></div>
<div id="d1"></div>
</body></html>
未確定の文字を取れるってやばくない? サーバーに送信してるんだよ?
>>191 すげええええ
今実験してみた。
未確定でも取得できとる
ホントにサーバに送信してるのかな。
某ブラウザでクリップボードの内容まで取れてた事に比べればどうという事はない
>>194 サーバーに送信しなかったら
データーを取ってこれないだろ。
たとえば 「せっくす」 とかって入れて、確定してない状態でも、 「ああ、こんなはずかしいキーワード送信しないでおこう」 とかって思っても、グーグル様は許してくれません。 もうとっくに送信されちゃってますから!
>>197 じゃあ、確定した直後に「送信しないでおこう」と思って削除する場合は?
確定後なら送信されちゃっていても納得するの?
グーグル様はこの世のすべてのデータを蓄積しなくちゃいけないという勝手な使命感に駆られてるからな
Ajax使ったインクリメンタルサーチとかそんなもんだろ むやみやたらにやられたらキモイけど技術的におかしいとは思わない
googleのキーワード入力欄を最後に使ったのが いつだったかなんて思い出せないが、ここ見て久しぶりに使ってみた。 いつのまにか変な機能つけてたのな。 ……つかまだ存在してたんだこれ。 ここ数年、URL入力欄以外に検索キーワードを 入力する必要を感じたことなんてないし、 どこかのWebサイト見てて単語を検索する時は 選択して右クリックメニューだし。
複合キーワードのヒントにはなるかも。 どんなに恥ずかしいキーワードを入れても、 データを見るGoogle様はプログラムで人間じゃないから安心! かもしれない。
ナレ : やがて現れた肉は 牛タン 何やら、手に持った次の瞬間 _,,..,,,,_ ビダァァァン!! / ;' 3 ヽヾヽ ビダァァァン!!! 〃 i ,l ビダァァァン!!! ‘ ,_,,..((,,_ 〃ゝ U j! _ )))_ ∴ ,“ ビダァァァン!!! ,J∵/ ;' 3 `ヽーっ ) ソノ'" ヽ从/; ’ ) : l ⊃ ⌒_つ,..ェ‐'´ ⊂ j! ゞ・,‥¨ .¨ ・`'ー---‐'''''"  ̄゛'''''‐---ー '¨・:‘ . ナレ : なんと、牛タンを 床に 力一杯叩きつけ出した いったい何の為なのか 店員 : あっこれ 叩くのは、 伸びるし 商品化のために 少し肉が 柔らかくなるし 皮むくために、叩きますね ナレ : 確かに叩く前のと比べると2倍近くに伸びている _,,..,,,,_ ./ ,' 3 `ヽーっ l ⊃ ⌒_つ `'ー---‐'''''" _,,..,,,,______ ./ ,' 3 `ヽーっ l ⊃ ⌒_つ `'ー---‐---------'''''" ナレ : 確かに叩きつけることで 皮も剥がしやすく 肉も柔らかくなるということだ
>>191 Linux でアウトなのは知らなかったけど、じゃあどうするかと聞かれたら
俺なら keyup → setTimeout(hoge, 0) にするな
クロスドメインに対応したファイルアップロードできるライブラリないですか?
action属性の値を変えろ
>>204 だからそもそもkeyupイベントが発生しないという問題では。
まあいいや、
>>191 を直したのを作ってみてよ。試してみるから。
input methodが何かにもよるだろ Linuxなら尚更
>>208 おおせの通り。洩れのとこはkinput2だな。
onforcusが発生したら定期的に内容が変わらないかチェックしてみたら動くかも
<問題> 0〜12間の間の任意の駅で向上した場合の普通乗車運賃を計算するスクリプトを作成しなさい。 入力: 乗車駅(選択),降車駅(選択),乗車人数[おとな,こども] 出力: 駅間営業キロ数,普通運賃,こども運賃,運賃合計 ※JRの運賃は,乗車駅区間の営業キロ(距離)に応じた料金体系となっている。 「こども」の乗車券は,「おとな」の半額(5円の端数は切り捨て) <html> <head> <script> function calc_fare(){ //変数の初期化 var total=0; var basic_fare=0; var add_fare=0; var night_fare=0; var dist_discount=0; var km=0; var i=0; // 配列 var k = new Array(0,1.3,2.2,1.8,1.5,2.2,1.6,2.2,3.6,1.4,2.0,2.3,3.4); // 計算処理 if(document.form1.jyousya.value<document.form1.kousya.value){ for(i=document.form1.jyousya.value,d=document.form1.kousya.value;i<d;d--){ km+=k[d]*1000; } } if(document.form1.jyousya.value>document.form1.kousya.value){ for(i=document.form1.jyousya.value,d=document.form1.kousya.value;i>d;i--){ km+=k[i]*1000; } }
km=km/1000; if(km>1&&km<=3) basic_fare=160; if(km>3&&km<=6) basic_fare=200; if(km>6&&km<=10) basic_fare=210; if(km>10&&km<=15) basic_fare=260; if(km>15&&km<=20) basic_fare=350; if(km>20&&km<=25) basic_fare=440; if(km>25&&km<=30) basic_fare=530; add_fare=document.form1.distance.value; night_fare = basic_fare/2; if(night_fare%10==5) night_fare=night_fare-5; dist_discount=document.form1.time.value; total=(basic_fare*add_fare)+(night_fare*dist_discount); // 計算結果を出力 document.form1.km.value = km; document.form1.total.value = total; document.form1.basic_fare.value = basic_fare; document.form1.add_fare.value = add_fare; document.form1.night_fare.value = night_fare; document.form1.dist_discount.value = dist_discount; } </script> </head> <body>
<form name="form1"> 乗車駅: <SELECT NAME="jyousya"> <OPTION value="0" selected>0</OPTION> <OPTION value="1">1</OPTION> <OPTION value="2">2</OPTION> <OPTION value="3">3</OPTION> <OPTION value="4">4</OPTION> <OPTION value="5">5</OPTION> <OPTION value="6">6</OPTION> <OPTION value="7">7</OPTION> <OPTION value="8">8</OPTION> <OPTION value="9">9</OPTION> <OPTION value="10">10</OPTION> <OPTION value="11">11</OPTION> <OPTION value="12">12</OPTION> </SELECT> →降車駅: <SELECT NAME="kousya"> <OPTION value="0" selected>0</OPTION> <OPTION value="1">1</OPTION> <OPTION value="2">2</OPTION> <OPTION value="3">3</OPTION> <OPTION value="4">4</OPTION> <OPTION value="5">5</OPTION> <OPTION value="6">6</OPTION> <OPTION value="7">7</OPTION> <OPTION value="8">8</OPTION> <OPTION value="9">9</OPTION> <OPTION value="10">10</OPTION> <OPTION value="11">11</OPTION> <OPTION value="12">12</OPTION>
</SELECT> <br/> おとな<input type="text" name="distance" size="5" value="">人 こども<input type="text" name="time" size="5" value="">人 <input type="button" name="calc" value="計算" onclick="calc_fare();"><br /> <br /><br /> 営業キロ<input type="text" name="km" size="7" value="">キロ<br /> 運賃合計:<input type="text" name="total" size="7" value="">円 内訳( 大人<input type="text" name="basic_fare" size="7" value="">円 ×<input type="text" name="add_fare" size="7" value="">人 +こども<input type="text" name="night_fare" size="7" value="">円 ×<input type="text" name="dist_discount" size="7" value="">人) </form> </body> </html> こうすると、例えば 0で乗って1で降りるという風にすると1.3と正しい計算結果がでるのですが 12で乗って9で降りると9.1と出したいのですがが1.4と出てしまいます。 何かおかしいところはあるでしょうか?
学校の宿題か?1行ずつ値をチェックしていったら分かるだろう。 考えるのがメドいので細かい質問があれば問題発生箇所を絞り込んでからするように。 絞り込んだらコードは1/4以下にはなるだろ
最初は絞ることも考えたんですけど 何が間違ってるのかわからないので全部見てもらうほうがわかるかなと思いまして・・・ 最初のif文の中のfor文が辺りが怪しいとにらんでるんですが・・・ 一応絞ってみます・・・
var k = new Array(0,1.3,2.2,1.8,1.5,2.2,1.6,2.2,3.6,1.4,2.0,2.3,3.4); if(document.form1.jyousya.value<document.form1.kousya.value){ for(i=document.form1.jyousya.value,d=document.form1.kousya.value;i<d;d--){ km+=k[d]*1000; } } if(document.form1.jyousya.value>document.form1.kousya.value){ for(i=document.form1.jyousya.value,d=document.form1.kousya.value;i>d;i--){ km+=k[i]*1000; } } <form name="form1"> <SELECT NAME="jyousya"> <OPTION value="0" selected>0</OPTION> <OPTION value="1">1</OPTION> <OPTION value="2">2</OPTION> <OPTION value="3">3</OPTION> <OPTION value="4">4</OPTION> <OPTION value="5">5</OPTION> <OPTION value="6">6</OPTION> <OPTION value="7">7</OPTION> <OPTION value="8">8</OPTION> <OPTION value="9">9</OPTION> <OPTION value="10">10</OPTION> <OPTION value="11">11</OPTION> <OPTION value="12">12</OPTION> </SELECT> <SELECT NAME="kousya"> 上と同じ </SELECT> 営業キロ<input type="text" name="km" size="7" value="">キロ<br />
手取り足取りスレって無かったっけ?
あるんですか?
HTMLレベルから手取り足取り教える気はないな
>>2 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。
そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!)
長い(1レスに入らない)場合はアップロードしてURIを貼る。
<html> <head> <script type="text/javascript"> var list_station = { '乗車' : null, '降車' : null }; var list_usertype = { 'おとな' : null, 'こども' : null }; var list_view = { '合計km' : null, '合計運賃' : null, 'おとな運賃' : null, 'おとな人数' : null, 'こども運賃' : null, 'こども人数' : null }; function main() { var div = window.document.getElementById('draw_area'); div.appendChild(createFormArea()); div.appendChild(createViewArea()); }; window.attachEvent('onload', main);
function createFormArea() { var form = window.document.createElement('form'); if (1) { var separator = false; for (var key in list_station) { form.appendChild(window.document.createTextNode(key)); form.appendChild(window.document.createTextNode('駅:')); var sel = form.appendChild(window.document.createElement('select')); for (var i = 0; i <= 12; i++) { var opt = sel.appendChild(window.document.createElement('option')); opt.innerText = i; } sel.firstChild.selected = true; sel.onchange = calcCharge; list_station[key] = sel; if (separator){ continue; } separator = true; form.appendChild(window.document.createTextNode('→')); } } form.appendChild(window.document.createElement('br'));
if (1) { for (var key in list_usertype) { form.appendChild(window.document.createTextNode(key)); var input = form.appendChild(window.document.createElement('input')); input.size = 5; input.value = 0; input.onchange = calcCharge; list_usertype[key] = input; } } return form; } function createViewArea() { var para = window.document.createElement('p'); if (1) { para.appendChild(window.document.createTextNode('営業キロ:')); list_view['合計km'] = para.appendChild(window.document.createElement('span')); para.appendChild(window.document.createTextNode('キロ')); para.appendChild(window.document.createElement('br')); } if (1) { para.appendChild(window.document.createTextNode('運賃合計:')); list_view['合計運賃'] = para.appendChild(window.document.createElement('span')); para.appendChild(window.document.createTextNode('円')); para.appendChild(window.document.createElement('br')); }
if (1) { para.appendChild(window.document.createTextNode('内訳(')); var separator = false; for (var key in list_usertype) { para.appendChild(window.document.createTextNode(key)); list_view[key + '運賃'] = para.appendChild(window.document.createElement('span')); para.appendChild(window.document.createTextNode('円×')); list_view[key + '人数'] = para.appendChild(window.document.createElement('span')); para.appendChild(window.document.createTextNode('人')); if (separator){ continue; } separator = true; para.appendChild(window.document.createTextNode('+')); } para.appendChild(window.document.createTextNode(')')); } for (var key in list_view) { list_view[key].innerText = 0; } return para; }
気が向いたのでKY気味に採点してやんよ ・変数dがvar宣言されてない(グローバルスコープになっている) ・kmを×1000して足して÷1000するのはおそらく丸め誤差対策だろうが、 コードを読む人(他人や将来の自分)にその意味が伝わらないので好ましくない。 コメントを付けるか、関数を分けてわかるような名前をつける。 ・kmをbasic_fareに変換するところはif〜else if〜elseを使う方が保守性が上がる ・input要素に付けられた名前がイミフすぎる。 たぶん他の問題からコピペして直してないのだろうが、 直さないとプログラムが読みにくくてしょうがない。 ・add_fare、night_fare、dist_discountの各変数名も同様。 変数の名前と中身が一致してないからプログラムが読みにくい。 ・ところで、"12"と12の違いって知ってる?(大ヒント)
function calcCharge() { // 駅間距離? var arr_k = [0, 1.3, 2.2, 1.8, 1.5, 2.2, 1.6, 2.2, 3.6, 1.4, 2.0, 2.3, 3.4]; // 営業距離料金表 var list_charge = { 3 : 160, 6 : 200, 10 : 210, 15 : 260, 20 : 350, 25 : 440, 30 : 530 }; // 合計キロ, おとな・こども運賃 var sum_km = 0; var adult_charge = 0; var child_charge = 0; // 入力を取得 var station_in = list_station['乗車'].selectedIndex; var station_out = list_station['降車'].selectedIndex; var adult_num = parseInt(list_usertype['おとな'].value); var child_num = parseInt(list_usertype['こども'].value); if (station_in == station_out) { sum_km = 0; adult_num = 0; child_num = 0; } else {
// 営業距離 if (station_in < station_out) { var i = station_in; while (i < station_out) { i++; sum_km += arr_k[i]; } } else if (station_in > station_out) { var i = station_in; while (i > station_out) { sum_km += arr_k[i]; i--; } } // 距離 → 基本料金 var adult_charge = 0; for (var dis in list_charge) { if (sum_km > dis){ continue; } adult_charge = list_charge[dis]; break; } // こども料金 child_charge = Math.floor((adult_charge / 2) / 10) * 10; }
// 表示 list_view['合計km'].innerText = sum_km; list_view['合計運賃'].innerText = adult_charge * adult_num + child_charge * child_num; list_view['おとな運賃'].innerText = adult_charge; list_view['おとな人数'].innerText = adult_num; list_view['こども運賃'].innerText = child_charge; list_view['こども人数'].innerText = child_num; } </script> </head> <body> <div id="draw_area"></div> </body> </html>
丸写し防止版 いろんな意味で
>>226 お前どこが間違ってるか分かってないだろ。
何で
>>231 がいきなり怒ってんのかと思ってコピペしてFxで見てみたら白紙だった
attachEventかよ。
>>230 の通りだな
あのさあ、スレ無駄遣いだから複数レスのソース貼るの やめてくんない?2つならまだしも4分割とかもう阿呆かと。
7だな。4じゃない
おまけにXHTMLでforms[name]だしな。JS以前。
238 :
222 :2009/06/02(火) 10:08:22 ID:???
>231 ライブラリ使って書いて、使わないように適当に置き換えたらこうなった。 ライブラリ使って片っ端から置き換えること前提で見てもらうしか。 >235 ここって数日で1スレ使い切るような 活気のあるスレだっけ? >237 眼科紹介しようか?
テンプレに異論があるのならテンプレ論議のときに言え。 以後スルーで。
if(1) 無闇に連想配列を使いたがる マジックナンバーがメンテしづらくなるぐらいに散らばってる もうこれどうしたらいいの?
なんだなんだ。 過疎スレで喧嘩するのはやめろ
コードは捨ててまず機能を抽出し、その機能を実現するように 新たにコードを設計し制作し直す。終了。
kmの足し算の所だけ抽出してみたよ 乗り降りは距離だけしか見ないならfor文2つ必要ないんじゃね? って言うのと、宿題だったらevalとか使って先生の反応が見てみたいというのと。 var k = [0, 1.3, 2.2, 1.8, 1.5, 2.2, 1.6, 2.2, 3.6, 1.4, 2.0, 2.3, 3.4]; var kTmp = (function(){ // 丸め誤差防止用 var array = []; for (var i=0,l=k.length; i<l; ++i) { array.push(k[i] * 1000); } return array; })() var add = function(a, b){ var a = parseInt(a); var b = parseInt(b); var distance = (a < b) ? kTmp.slice(a, b+1) : kTmp.slice(b, a+1); return eval(distance.join('+'))/1000; // (kTmp[0] + kTmp[1] + ... + kTmp[n])/1000 } var km = add(document.form1.jyousya.value, document.form1.kousya.value);
そこでreduceですよ。IEでは動かないけどw
244の補足 さすがにここでevalはバッドプラクティスとしか言いようがない。 先生のツッコミ能力を見る意味では面白いけど。
246 :
Name_Not_Found :2009/06/02(火) 15:15:47 ID:HlujiDAB
>>246 IETesterでwindow.open()の返値がnullになるってやつ?
248 :
246 :2009/06/02(火) 15:36:29 ID:???
>>247 Testerではなく通常のIE8を使用しています。
バージョンは8.0.6001でした。
親からのwindow.open(違うURL, 同じウィンドウ名)でうまく動作しました。
今度は他のブラウザが心配・・・
javascriptでファイル選択のダイアログ表示→リクエスト発行の一連の処理をしたいんだけどうまくいかない。
↓のコードでやるとファイル選択ダイアログは表示されるけど、そのあとsubmitしてくれません。(webサーバにアクセスログなし)
手動でクリックした場合はうまくいきます。
javascriptでsubmitするにはどうしたらいいのでしょうか?
ブラウザ:IE8
<script src="jquery.js" type="text/javascript"></script>
<script type= "text/javascript">
$(document).ready(function(){
$("#click1").click(function(){
$("#file1").click();
$("#form1").submit();
})
});
</script>
<form id="form1" action="
http://localhost/upload.cgi " method="post"
encType="multipart/form-data">
<input id="file1" name="file1" type="file">
</form>
<br>
<div id="click1">ファイル選択/送信</div>
>>249 セキュリティの問題上、type=fileなinput要素のvalueにはアクセスできないが、
そういうことではないのか?
ローカルのディレクトリ名がJavaScriptで取得できちゃまずいでしょ。
251 :
249 :2009/06/02(火) 16:06:26 ID:???
確かにsubmitの行をコメントにして、javascriptでファイル選択後に手でクエリ送信をクリックしたら、inputの中が空になりました。 用はinputもボタンも見えないようにして、ファイル選択後すぐにリクエスト発行するようなものを作りたいのですがヒントください。
すまん関係なかった。 JQueryでの書き方は覚えてないんで適宜翻訳してほしいんだが、 ダイアログでのファイル選択は手動でやるということならこれでいいな。 ファイル選択まで自動でしようとするのは無理だ。 <script> function clicked(){ document.getElementById('file1').click(); } function filechanged(){ document.getElementById('form1').submit(); } </script> <form action="#" id="form1"> <input type="file" value="" id="file1" onchange="filechanged();" /> </form> <div> <input type="button" onclick="clicked()" value="select file" /> </div>
253 :
252 :2009/06/02(火) 16:17:48 ID:???
俺のアホォ 252でも動いてなかった。無視して。
>>251 : inputもボタンも見えないようにして、ファイル選択後すぐにリクエスト発行
それができたらユーザの任意のファイルを鯖側に吸い上げて盗むことが
できてしまうよね。それができるブラウザは存在しない(存在したら
大問題で即回収)と思うが。
input="button"でfile属性って古典的な問題だよね。居間皿。
257 :
249 :2009/06/02(火) 18:28:28 ID:???
>>257 なんだ。じゃあCSSでdisplay:noneするだけじゃないのか?
259 :
249 :2009/06/02(火) 19:01:43 ID:???
そうすると「参照」ボタンも見えなくなってファイル選択すらできなくなると思うのですが。
画像の上にinputをstyle=opacity:1でかぶせたら?
>>257 =259
つーかiframe+Ajaxとか高度なことができるだけの力があるなら、そこのソースも読めよな。
と思いつつ興味あったので自分でソース読んできた。
ただのボタンをHTMLとして配置しといて、
初期化時にfile属性inputをdisplay:none, opacity:0, z-index:2147483583でボタンの真上に作成
ってしていた。面白いな。
262 :
249 :2009/06/02(火) 19:29:34 ID:???
なるほど、スタイルシートで透明にしてたのか〜。 とりあえず解決しそうです。 ありがとうございました。
丸め誤差だとかグローバルスコープだとか聴いたことない単語や見たことない関数だらけで苦労しましたがなんとか作成することができました。 ありがとうございました。 ところで続けて質問ですがevalはなぜバットプラクティス?なのでしょうか それとif〜else if〜elseというのはこういうことですか? if(km>1&&km<=3) basic_fare=160; else if(km>3&&km<=6) basic_fare=200; if(km>6&&km<=10) basic_fare=210; else if(km>10&&km<=15) basic_fare=260; if(km>15&&km<=20) basic_fare=350; else if(km>20&&km<=25) basic_fare=440; if(km>25&&km<=30) basic_fare=530;
eval is evil
eval を使わないで書けることがほとんどだし 中身の安全性を誰かが保証しなければならない else の場合に if が解釈されるんだから && とかいらない if(km <= 1){ // エラー処理 }else if(km <= 3){ basic_fare=160; }else if(km <= 6){ basic_fare=200; : }else{ // エラー処理 }
'use strict'
>263, >265 それ、3まで160、6まで200、10まで260...と 法則あるんだから、ループで処理すりゃいいだろ。 変更ごとに分岐増やすつもり?
どんな法則?w
>>268 var f = { 3 : 160, 6 : 200, 10 : 210, 15 : 260, 20 : 350, 25 : 440, 30 : 530, -1 : 0 };
var basic_fase = -1;
for (var a in f) {
if (km <= a){ basic_fase = f[a]; break; }
}
if (basic_faee == -1){ /* エラー処理 */ }
こんな法則。
>263の連続if見て思いつかない方が不思議だが。
あ、最後の -1 : 0 いらなくなってたっけ。 無視でよろしく。
>>269 の問題点と改善点を3個以上挙げよ(10点)
・売りモノシステム作ってるわけじゃないから 変数名だのの保守性はこの際問題にならない。 ・prototypeをいじられてる可能性を指摘するなら prototypeをいじるようなプログラム組んでる時点で、 そいつが自分の責任で対処するべきこと。 ・この程度の書き換えで「ifベタ書きよりも分かりにくい」とか いうなら、そいつがプログラムに鳴れてないだけ。 あと何があるかな。
1. 数字はキーにできない 2. for inでの列挙順は保証されないから、本来より高い金額が出る可能性がある。 3. 変数名ミスりまくりw むりやり改善すると、 var basic_fare = -1; var f = [[3,160],[6,200],[10,210],[15,260],[20,350],[25,440],[30,530]]; for (var i = 0; i < f.length; i++){ if (km <= f[i][0]) {basic_fare = f[i][1]; break;} } if (basic_fare == -1){ /* エラー処理 */ } かな。でもこんな2次元配列はキモくてできるだけ使いたくないから else ifを書きまくるんでいいと思う派。
あー、Object.prototype.xxx対策だ。3つめ。
改善点だのウダウダ言うより書き換えてみた方が早い var f = { 3 : 160, 6 : 200, 10 : 210, 15 : 260, 20 : 350, 25 : 440, 30 : 530 }; var basic_fase = -1; var f_keys = []; for (var a in f) { var x = parseInt(a, 10); if (x){ f_keys.push(x);} } var nsort = function(a, b){ return a - b; }; f_keys.sort(nsort); for (var i = 0; i < f_keys.length; i++) { if (km <= i){ basic_fase = f[i]; break; } } if (basic_faee == -1){ /* エラー処理 */ }
あーミスってる if (km <= f_keys[i]){ basic_fase = f[f_keys[i]]; break; }
if (km <= f_keys[i]){ basic_fase = f[f_keys[i].toString()]; break; } じゃないのか
普通にelse ifのが読みやすいだろw
ところで、作ったJSの動作確認依頼スレとかないのかな。 個人開発だとなかなか準備できない環境もあるしさ。
依頼スレなら有料だろな。ロクでもないソース突っ込まれての売春みたいなもんだ。
2個とか3個で表とループにする奴はいないし、30も40もあるのに else ifを書き続ける奴もいない。両方知らないと駄目なのは当然。 「いくつから」戦略を切り替えるかは好みも入るんでいいと思うよ。
6個でバイナリサーチはやめた方がいいんじゃないの。 線形探索の平均探索数が3、バイナリサーチの探索数が3弱、 変わらないじゃん。ロジックは複雑になるから損かも。 さらにバグが出やすくなるだけ大損。
ループにする一番の利点は保守性。 配列なら別ファイルにするのも簡単。 設定ファイルの仕様をデッチ上げて、プログラム全く知らない 素人担当者に「変更はこのテンプレ通りで」と言ってしまうこともできる。 if else は、変更があるたびにプログラムのメイン部分を書き換えることになる。 勉強や個人の私的なものならかまわんが、 少人数でも複数の人が関わる程度のプロジェクトになると コストが一気に跳ね上がる。 もひとつ加えると、普通の会社じゃ、プログラムのメイン処理書き換えたら、 そのたびに処理の全項目再テストだかんね。
宿題ごときでこんなにレベルアップできるだなんて質問者がうらやましいな。 色々考えなくても一旦配列に入れたらいいと思うのだけど。 ただの配列なら要素数増えてもそんなに処理重くならないでしょ。 var f = { 3 : 160, 6 : 200, 10 : 210, 15 : 260, 20 : 350, 25 : 440, 30 : 530 }; var fMap =[]; // [undefined, undefined, undefined, 160, undefined, ... , 530] for (var key in f) { fMap[key] = f[key]; } for (var i=0,l=fMap.length; i<l; ++i) { if (typeof fMap[i] == 'undefined') continue; if (km <= fMap[i]) { fMap[i]; break; } }
せめて正常系のテストぐらい通してから貼るんだ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " xml:lang="ja" lang="ja">
<head>
<title>テスト</title>
<script type="text/javascript">
function calc_fare(km){
//ここに書け
return 0;
}
var result = true;
result = result && calc_fare(0.1) == 160;
result = result && calc_fare(3) == 160;
result = result && calc_fare(3.1) == 200;
result = result && calc_fare(6) == 200;
result = result && calc_fare(6.1) == 210;
result = result && calc_fare(10) == 210;
result = result && calc_fare(10.1) == 260;
result = result && calc_fare(15) == 260;
result = result && calc_fare(15.1) == 350;
result = result && calc_fare(20) == 350;
result = result && calc_fare(20.1) == 440;
result = result && calc_fare(25) == 440;
result = result && calc_fare(25.1) == 530;
result = result && calc_fare(30) == 530;
alert(result);
</script>
</head>
<body>
</body>
</html>
289 :
286 :2009/06/03(水) 16:47:32 ID:???
レスするために変数名変えた時にミスったw if (km <= fMap[i]) { ↓ if (km <= i) { これで正常系は通りました! あ。テスト用にifの中は下のように変えた。 return fMap[i];
result &=
>>290 それは意味が違う
JavaScriptにはなんで&&=がないんだろ?
>>291 そうだった
^= をよく使うからノリで書いちゃった
293 :
Name_Not_Found :2009/06/04(木) 10:29:44 ID:fZ/H8/MV
複数のhtmlファイルの共通したidの<span></span>の中身の文字列を 外部.jsファイルなどから一括参照、入力することは可能ですか? いくつものhtmlの日付を一つ一つ直すのはとても骨が折れるので… ソフトではなく、javascriptでの参照、入力が簡単にできる方法があれば お教え願えないでしょうか?
295 :
Name_Not_Found :2009/06/04(木) 10:56:49 ID:fZ/H8/MV
>>294 分かりにくい文章ですみません・・
複数のhtmlファイルの、共通したid要素の中身の文字列を
外部.jsファイルから一括入力することは可能ですか?
察するにこんなかんじ? <script type="text/javascript" src="setdate.js"></script> (中略) <span id="date">日付</span> ってHTML側に書いておいて、 setdate.jsで、 window.onload = function(){ document.getElementById('date').firstChild.nodeValue = "2009/06/04"; } とかするのかな。そうすればsetdate.jsさえ書き換えれば、 setdate.jsを読み込んでいるHTMLは全部書き換わって表示される。
297 :
293 :2009/06/04(木) 12:10:53 ID:???
>>296 完璧です。一生あなたに頭向けて寝ます。
ありがとうございます!
>>297 >296がブラジルにでも行ったらどうする気だw
299 :
293 :2009/06/04(木) 13:26:05 ID:???
もちろん逆立ちしながら寝ます
ブラジル行ったとどうしてわかるw
テキストエディタか何かでgrepしたら良いだけだろ…
js使えない環境は無視、と。ひどいな。
俺は個人サイト作って2年くらい。ボチボチ更新続けてるが、 いま、ざっと数えてもページ数300以上ある。 俺が>293と同じ問題抱えてたとしたら、テキストエディタでgrepするよりは、 1か所書き換えて済ませたいと思うだろうな。 置き換え忘れや置き換えミスが防げる。 個人サイトなら、最終更新日が出ない程度のことで ひどい呼ばわりされる筋合いはないだろうな。 個人サイトはあくまで趣味の範囲。 ある意味ブラウザ切りと同じで、サイト作成者の裁量を尊重すべきこと。 企業の広告としてのサイトなら、最低でも拡張見込んで、 最初からPHPあたり使って作ってるだろうから、そもそもこんな問題は起きないな。 俺が言いたいのは、だ。 >301,302 >293の質問内容が10年前レベルなのは確かだが、自分でサイト作ってみようと思えば 誰しも通る道なのも間違いない。 各個人の知識なんてバラバラなんだから、今現在>293の段階にいる人だって、 そりゃ居て当たり前だろうが。 そんな試行錯誤して方法探してる段階の人間に、何かアドバイスでもするでなし、 ただ批判だけとか、お前らハタ目にはただの根性悪でしかないぞ。
>>293 のやり方が更新日時の表示なら
その対象ページを全部更新したことになるけど
そんなことあんの?
実行環境の違いに気付かない奴は一生気付かん 段階どうこうではない
>>305 プ(w
お前の頭の中では、小学生と大学生の学力は同じなんだなw
知識が増えれば自然と考える幅も広がるのが当たり前。
まだ知識が足りてないだけかもしれないものを、
それが学習能力が足りないからだと言い切れるお前の頭は大したもんだよ。
ほう、これが“知識が足りてる”ということか
「知識が足りない」で許されるのは中学校までだよねー
実行環境は、考えてうんぬんというより知識の部類かと。
そして、知識がアッサリ増えなく奴とかいるんだよね。悲しいことに。
その意味で
>>296 の回答は少し不親切かなぁ
JavaScriptオフに対応できるどうかは知識の問題だが、
オフの環境もある、と気付くだけなら知識は関係ないと思う。
気付けば他の方法を探すだろうから、
>>301-302 は優しい奴らだと思ったがな。
しかし何度言っても気付かない奴も多いのは事実。
311 :
Name_Not_Found :2009/06/04(木) 22:01:41 ID:8HVMklyL
質問です <header></header>内部のjavascriptを、ajaxによって変更することは可能でしょうか? 今とりあえず<span id=**>で書き換えることはできるのですが、そのjavascriptが動かず、 「'functionName' is not defined」ってエラーがでてしまいます。 そのページをfireFoxのFireBugでみてみると、きちんと定義がされているのですが・・・ <span></span>で囲まれたjavascriptは起動しないのか?と思うと、動くfunctionもあります。 一体なにが原因なのでしょうか? ご存知の方がいらっしゃったらお教え願います。
functionの定義とどう使ってるか見せてー。 あと<header>ってのはXMLとかで自分で作ったの?
313 :
Name_Not_Found :2009/06/04(木) 22:22:05 ID:8HVMklyL
ありがとうございます。 とりあえずheaderはXMLではなく、<header><body>の<header>です。 ちなみにfunction定義は、 <html lang="ja"> <head> <title>材料概要-検索</title> <span id="headerJS"> <script type="text/javascript" src="/ajaxJava/prototype/prototype.js"></script> <script language="JavaScript"><!-- function Chart_pageChange(id,url){ document.zaiGaiChart.pageNum.value = id; document.zaiGaiChart.ajaxType.value = "pageChange"; var pars = Form.serialize("zaiGaiChart"); var myAjax = new Ajax.Request(url,{ method:"post", parameters:pars, onSuccess:showResponse }); } って感じです。いかがでしょうか?
>>313 基本的な話、文法上headの中にspanタグを書くことは認められていないよ。
今のブラウザで動くかどうかは別にして
それだと、自分自身を書き換えることになるのでどんな暴走をするか分からない。
そもそも、何でjavascriptを書き換えなければいけないかもさっぱり分からん。
他にもっとマシなアプローチの仕方もあると思う。
315 :
Name_Not_Found :2009/06/04(木) 23:04:40 ID:8HVMklyL
>>314 そうなんですか。文法上無理なんですね。
お教えいただきありがとうございました。
ちなみに何で、こういうことをしようと思っているかと言いますと、
極力Ajaxにて、何ページにもわたる、pageを更新できるようにしたいと思っているのですが、
そのためには、最初のページの読み込み時に、かなりの数のjavascriptのfunctionを
定義しなければならないため、上記の様なことができるのであれば、
「今このページに必要なfunctionのみを読み込む」ことができると思ってなのです。
上記みたいなやり方ではなく、もっとスマートなやり方をご存知でしたら、お教えいただきたいのですが・・・
よろしくお願いいたします。
>今このページに必要なfunctionのみを読み込む dcument.write('<script src=〜 を書いたら簡単に出来ると思うけど
317 :
Name_Not_Found :2009/06/04(木) 23:27:57 ID:8HVMklyL
それが、functionはPHPにて動的に作成しているため、srcで読み込むのはちょっと・・・ srcファイルの指定以外でないでしょうか? 情報を小出しにしてしまい、大変申し訳ありません。
> PHPにて動的に作成しているため、srcで読み込むのはちょっと・・・ 前半と後半でつながりがないな src で php で生成したのを読み込めるわけで でも 動的にうんたらするよりは 固定の外部 js 作った方がいろんな意味でまともだと思う
319 :
Name_Not_Found :2009/06/05(金) 00:51:07 ID:a1W/XvL7
>>318 でもPHPで作成したFileを読み込む場合、同一FIle名だと、他の人が読み込んじゃう危険性もあるし。
作ったものを直接、その人が見ているPageに書き込むのが、最上かと。
また自分のページは、一つのページに、その状況に応じて複数の表(現在最大8つですが、今後拡張予定)を表示して、
それぞれの表に、ページャーをつけているので、固定の外部ファイルよりも、
表の名称のみを書き換えるようにした、一つの固定ファイルを書いておいて、
表の名称に従って、書き換えるようにした方が良いように思っているため、そういったことをしています。
なので、固定の外部jsは、できれば使いたくないのですが・・・
> 他の人が読み込んじゃう危険性 そんなセキュアな話だったの!? でもなんかもやもやするのは php が使えるんだったら 自分なら データは鯖側で保持してその都度 html に埋め込み|から呼び出し js は見られても良いライブラリとして外部にするな 感覚の違いかな…
提示して貰ってるのに試そうともしないんだからここで聞く意味ないんじゃね
ぶっちゃけ php にべた書きしちゃえばやりたいことはできると思うんだよ
サーバ側で動的にjsを生成するって初めて聞いたのですが一般的なんですか?
Googleドキュメントとか普通にやってなかったか
JSONPなら既にいろんなとこで使われてるけど
そうなんだ。
<script src="hoge.php"></script>ぐらいなら全然ありじゃないか?
なしの方向で。
ありに右折。
行き止まり。バックします。
331 :
Name_Not_Found :2009/06/05(金) 18:46:16 ID:042dcs0/
親ウィンドウのフォームにdogというnameの要素が複数あります。 で、それの0番目の要素の値を取得したいんですが、 以下のスクリプトが動きません。 どこが問題でしょうか? var vId=0; var emt="dog["+vId+"]"; urlX=window.opener.document.fm.elements[emt].value;
["dog[0]"]じゃなくて["dog"][0]じゃないの?
ラジオボタン以外で同じnameのものが複数ってOKだっけ?
NO
チェックボックスというのがあってだな
336 :
331 :2009/06/05(金) 20:09:10 ID:???
解決しました
>>332 それとは原因違いましたが、ありがとうございました
他のひとも、どうもです
ラジオボタン以外で同じnameのものが複数、どこが悪い。責任者出て来い!
>>335 チェックボックスからvalueを取得したりはしないだろう
>>337 どこが悪いって、1つのページに <a name="xxx"> が複数あると
ブラウザが困る。だから悪い。
フォーム部品のnameとその他のnameは、
本質的に別のもの(後者は最初からidとするべきだった)ってことだが、
この辺深く考えずに仕様決めちゃった責任者は、
たぶん、Webではお前さんよりよっぽど有名人だと思うぞ。
もし呼べたとして何か言えるのか?w
俺だったらキャバクラに連れてくな
>>327 <script src="data:text/javascript,function A(){alert('でおk')}"></script>
>>341 <script src="data:text/javascript,function A(){alert('それIEで動かない上にUnicode限定だから')}"></script>
すみません。質問です。 JavaScriptを勉強したいのですが、テキストエディターはなにが良いのでしょうか。 ご存知の方はいませんか。
釣れますか
345 :
343 :2009/06/06(土) 01:03:43 ID:???
釣りのつもりはありません ごめんなさい
otbedit
秀丸
terapad
何でもいいんじゃない?EmEditorあたり。 自分はMIFES使ってる。
js2-mode最強説
EDLIN
結論なんて出ない。 使い慣れたのが最高ってことで。
メモ帳 最高
メモ帳最低
最低はcopy conだなw
nani sore kwsk
Emacs
macだけどcot Editorがいいよ パーミッションなくても無理矢理開いて編集できる
>>349 おおリッチ
今EmEditor使ってるんだけど、比較してどう?
500行超えだすあたりからキー入力すらもたつき出すんだよなー
だからメモ徴が最高
500……? 「使ってるのは1.27です」とかいうオチ?
>>356 copy conは最速のプログラミング方法。
※ ツールではなく"方法"ってのがミソ
インストールどころか、エディタそのものが必要ないという
素晴らしいメリットがある。
スペースや改行を含めて、一文字も間違えることなく、
先頭から一気に入力しなければならないというデメリットもある。
javascriptとVBって似てる?
文法がという意味なら、あんまり似てない
ボタンを押すと、フォームの中の テキストの部分に[a]って表示される、 とかのコードはよく似てると思うけど?
まったくにてない
JavaScriptの関数で引数の受け渡しは call by value ですか call by reference ですか それとも call by name ですか? 関数を引数にして渡すとcall by nameのような気がしました。 数値や文字列を渡すとcall by valueのような気がしました。 実際はどうなんですか?
Cと同じ
>>367 変数に格納されている情報のみを値渡し
格納されてる情報っていうのは所謂オブジェクトID
・・・一言でどう言うのかわからないけど(参照の値渡し?)
参照渡しのように変数いじっても呼び出し元には影響しないし
変数の値であるオブジェクトを破壊的にいじれば呼び出し元に影響する
数値や文字列も不変(破壊的なメソッドが存在しない)
その性質以外は、実装はともかくユーザーには他のオブジェクトと同じように振る舞う
プロミティブ値は値、オブジェクトは参照
"a" と new String("a") が違うってちょっと理解に苦しむよね
値だろ。参照のコピーが値として渡されてるだけ。
>>371 プリミティブとそのラッパーだと思えばおk
>>373 でもプリミティブがメソッド持ってるんだぜ?
alert((new String("abc")).charAt(2));
alert("abc".charAt(2));
alert((new Number(100)).toExponential());
//alert(100.toExponential()); //エラー
String.prototype.hoge = function(){
alert("hoge");
}
(new String("abc")).hoge();
"abc".hoge();
なんか腑に落ちない。
"abc".hoge();もエラーだった
>>374 そう見えるってことと、そうであるってことは違う。
プリミティブがあたかもオブジェクトとして振舞うよーに内部的にラッパーが生成されてメソッドがキックされてるだけ。
ブリミティブにメソッドはない。
100 .toExponential() (100).toExponential()
Shadowboxを使いたいと思って解説サイト見ながらやってみたけど、 FireFoxではしっかり使えるのにIEだと18192文字目「引数が無効です」エラーが出る。 他のサイトのShadowboxはしっかり表示される。 同じ現象がCSSのposition:fixedを使おうと思った時も起こる。 誰か分かりませんか?
まず質問の文章をなんとかしろ。話はそれからだ。
まぁ、ソース見せちゃった方が話が早いから・・・
おまいが書いたソースをさらせ、と言われてるのがわからんのかなあ・・・ 質問投下する前に、読み手の視点で自分の質問が理解されるか推敲した方がいいよ。
<link rel="stylesheet" type="text/css" href="shadowbox/shadowbox.css"> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript" src="shadowbox/shadowbox.js"></script> <script type="text/javascript">Shadowbox.init({players:['img', 'html', 'iframe', 'swf']});</script> 俺が書いたと言うかコピペした部分はここだけ
>>346-362 とても参考になりました。感謝です。
とりあえず、ntemacsとmeadow3を使っていたのでjs2-modeでがんばってみようと思います。
いろいろな意見いただき、勉強になりました。ありがとうございます。
>>386 なるほど!解決しました!ありがとうございます!
388 :
Name_Not_Found :2009/06/07(日) 11:48:57 ID:vcLPLoRc
runtime errorって何ですか。どんなときに起こるのですか。
質問が漠然としすぎて、実行環境でエラーが起きた時としか言えん
>>387 はどう解決したかくらい残してけよ。ksg
>>376 コードを書く上でリテラルによるオブジェクト(プリミティブ値)と
明示的にnewしたオブジェクトに注意すべき違いはあるの?
内部的云々はこの際考えないこととして
typeofの結果が違うよ。そのくらいかな。
内部的云々も考えれば パフォーマンスに違いが出るシチュエーションがある はず。
395 :
Name_Not_Found :2009/06/07(日) 13:14:07 ID:eSNbO/Oi
html文書内でtableがいくつ使われてるかカウントすることはできますでしょうか?
>>392 プリミティブはオブジェクトではないから質問の前提からしておかしい
===の結果が違う
>>397 プリミティブ値は概念的にオブジェクトとして見なすことはできないのか
という質問だと解釈してくれると
でもtypeofが違うなら===が一致しないのは失念してた
これは痛い
element.innerText+='Hello, world!'; element.textContent+='Hello, world!'; と併記しとけばIEとfirefoxはいいんですけど Operaはどうしたらいいんでしょうか
innerHTML
>>399 とりあえず IE, Firefox, Opera だけを対象として考えるなら
if (!window.document.all)
{
window.HTMLElement.prototype.__defineGetter__('innerText', function(){ return this.textContent; });
window.HTMLElement.prototype.__defineSetter__('innerText', function(val){ this.textContent = val; });
}
先頭にこれ書いておけば、Firefox も innerText だけ変更でおk。
>>401 ありがとうございました
今までIEとfirefox用に
いちいち併記して書いてたんですが
こっち方が格段に楽ですね
>>402 >>401 の方法は「innerText をデフォルトにする」から、IE JScript の非標準プロパティ(とその代替品)を使ってるんだ、ということは忘れないほうがいい
つまり、
>>5 読んどけよ、というちょっとした注意喚起
わかってたならおせっかいでスマンかった
innerTextの有無をdocument.allで調べるアホさはともかく innerTextとtextContentは動作が違うからな
「こうするべきだ」ってな何かを言いたいなら、遠まわしにしないでそれ書けばいいんじゃ? というか、わざわざレスするなら、むしろそれを最初に書くべきだと思う。 「違うからな」なんて書いたって、質問者は問題が起こらなきゃスルーだろうし。書く意味ないよそれ。
天然か
>>407 ざけんなw
なんでこんなとこで自演なんぞせにゃならん。
IEで擬似textContentを使う方法を書いたらよかったかもね。 できるか知らないけど。 それなら信者が出てくることはなかったかと。
document.allで分岐すなってのに信者もクソもあるかよw
そこはUA見るでもtry-catchでも好きにすりゃいい部分だろ。 書いた本人はブラウザ限定を明記してるし、手っ取り早い方法書いただけだろ? Object.prototypeをいじってるってのなら影響も大きいが、 document.allのダミーでっち上げるようなプログラム書く奴なんて、さすがにいるとは思えんから、 判別だけなら十分じゃないか?
手っ取り早い方法ってのはそいつのセンスがモロに出るんだよな
便乗で、>409のようなプログラムがあれば便利そうなんだけど、 どなたか教えてもらえませんか?
空白を保存するという意味ならキツいな
>>414 前後の空白考慮は不要です。
>401の逆で、textContentを使うようになるだけでいいのですが、できるでしょうか?
今書いてるプログラムが、IEだけ特別扱いする方向で書いてる部分が多いので、
>401のような「IEにあわせる」のではなく「IEがあわせる」ように
できるプログラムがあれば、楽になる部分が増えるかなと思ったもので。
417 :
Name_Not_Found :2009/06/07(日) 22:58:32 ID:YdCDrg8w
夜分すいません。配列ソートなんですが、ソートしたとき左に順番の番号 つけることできませんか。要素がバラバラのときソートして、 1.apple 2.banana 3.cola 4.doburoku 5.egg 見たいな感じで連番振りたいです。
ソートした後番号をつけるだけなら、難しいこと何もないと思うけど?
419 :
417 :2009/06/07(日) 23:11:25 ID:YdCDrg8w
>>418 夜分のご回答恐れ入ります。言われて分かりました。ばかでした。
ありがとうございました。
>>416 ありがとうございます。
まず、3番は考えないとして。
2番の<PUBLIC:METHOD>は、むしろ手間が増えそうなのでやめときます。
1番はIE8のみということですが、とりあえず試してみようと思って、
'Element.prototype' でググったページをいくつか見て、
自分でサンプルを試したら Element.prototype.__defineGetter__ がなくてエラーになります。
※ エラー: オブジェクトでサポートされていないプロパティまたはメソッドです。
が表示されます。
IE8でしか使えないってことで、とりあえず使う予定はないのですが、
なんか気持ち悪いので、理由が分かれば教えてもらえないでしょうか。
definePropertyでしたか。 ありがとうございました。
>>404 > innerTextとtextContentは動作が違うからな
どう違うの?
おれ名が違うだけで挙動は一緒だとおもてた
>>423 改行のことじゃないかな?
element.innerText="hello\nworld"
hello
world
element.textContent="hello\nworld"
hello world
OperaのinnerTextはtextContentの別名に過ぎないが WebKitのinnerTextはIEのように空白を除去したり色々 ふつうに使う分には問題にならないが汎用化するとハマる奴がでる textContentを持っているならそっちを使うのが無難 textContentは全ノードが持っていることも違うっちゃ違う
そんなとこで嵌ってないでDOMつか……いやなんでもない。
JScriptとJSバージョンの対応表ってどこかにありますか?
>>391 Why does the Shadowbox window open up halfway down the page in Internet Explorer?
The answer to this problem may be that you are not using a strict or transitional DOCTYPE as explained on the support page. In short, placing either of the following code snippets at the top of your HTML page should help:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd ">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd ">
この後半部分をコピペした
>>429 wikipediaのjavascriptかecmascriptあたりで
ブラウザと対応バージョンの表を見かけた記憶がある
だから、ソース見せろと言ったのに
433 :
429 :2009/06/08(月) 16:30:25 ID:???
>>431 そっちの方向へ行ってみます。ありがとうございます。
ね、callerってIEじゃ不可だっけ?
だからスクリプトブロックされると空白になってたのか
438 :
423 :2009/06/08(月) 19:10:05 ID:???
>>436 ありがとうございます。勉強になります。
スクロールでファンクションを呼び出すイベントハンドラというのはあるんでしょうか。
初めて見る挙動なので少し興味がありますね。
440 :
Name_Not_Found :2009/06/09(火) 01:29:23 ID:Jw70WnkQ
javascriptにjspって書き込めるんですか? 誰か教えてください…
コーディング知らないでデザインやる方が効率悪いけどな
>>439 ニコ動はnicolib.jsをlazyimageで検索
というか聞くよりも該当サイトのソースを眺めてみろって
後学のため云々ならなおさらだ
>>440 content-typeを正しく指定して吐き出せば由来は関係しない
くれぐれも鯖側できっちりJSP処理するんだぞ
443 :
439 :2009/06/09(火) 03:26:57 ID:???
444 :
Name_Not_Found :2009/06/09(火) 04:32:53 ID:mS9+yTYu
そんな生ゴミ持ち込むなよ
質問です。 FirefoxやOperaだと、HTMLElement.prototypeにメソッドを追加すれば 全ての要素にメソッドが追加でき、このHTMLElementはwindowの子として存在します。 IE8で同じことをするには、Element.prototypeをいじればよいことは分かったのですが、 このElementはどこにあるのか(orグローバルなのか)、親子関係はどうなっているのかなどについて、 msdnなどを探してみたのですが、そのような情報を見つけられませんでした。 IE8についての、この辺のリファレンスが乗っているサイトをご存じの方がいたら、 教えていただきたいです。よろしくお願いします。
>>448 ありがとうございます。
そうか、よく考えたら>441の前ページ探すべきでしたね…。
しかし…なんだこれ。
×441 ○421 ミス訂正。
質問です。jsファイルを楽に実行する方法はありませんか。 入門書のサンプルプログラムを楽に実行する方法がわかりません。 今は、01.jsを実行するために01.htmlを作っています <html> <head><title>01</title></head> <body> <script language="JavaScript" src="01.js"> </script> </body> </html> 良い方法はありませんか。
超初心者っぽいのでマジレスしてやろう。 HTMLをいちいち手書きするのが面倒だという趣旨かな? だったらHTMLエディタを使おう。 だいたいのHTMLエディタなら、 テンプレートとかでほとんどの骨格は書いてくれるはず。 scriptタグだけは真面目に書かなきゃいけないが、 タグ補完機能のあるHTMLエディタを使うと、そのめんどさもだいぶ軽減される。 自分はez-HTMLを使ってる。他にも使いやすいのあるかもしれないけどね。 あと関係ないかもしれないけど、 コードは必ずしもjsファイルに書かなくてもいい。 サンプルプログラムの実行ぐらいだったらscriptタグ中にそのままコード書いた方が楽かも。
453 :
451 :2009/06/09(火) 23:50:16 ID:???
>>452 ずばりのお答えありがとうございます。
HTMLエディタは知りませんでした。
その他のアドバイスも助かります。
質問す。 class="foo bar" というのを class="foo" class="bar" のように扱いたいんだけど、どうしたらいいの?
>>454 (1) classというのは予約語だから変数名にできない。仮にclass1とする。
(2)
class1 = "foo"; ... class1に「"foo"」が入る
class2 = "bar"; ... class1に「'bar"」が入る(前の値は消える)
というわけでそれは「class1="bar";」だけと同じなのでは?
あれ、失敗した。入れる先が1つの同じ変数名なら上書き、 違うなら別々の変数に入れるだけ、という意味でした。
>>454 はJSじゃなくてhtmlです。
こういう書けばよかったかな。
<p class="foo bar">
そもそも <p class="foo"> に相当することはできているの。
>>458 いやだからそれに対してどんな処理がしたいのかって。
getElementsByClassName的なことがしたいのか、
スタイルをあてたいのか。とか。
よくわかんないけどとりあえず判定メソッドだけは書いてみたよ。
function matchClass(element, className){
var classNames = element.getAttribute('class').split(" ");
for(var i = 0; i < classNames.length; i++){
if (classNames[i] == className) {return true;}
}
return false;
}
IE7以下切り捨てか
ちょっといけてなかったんで書き直そう。 function matchClass(element, className){ var classAttr = element.getAttributeNode('class'); if (!classAttr || !classAttr.value){return false;} var classNames = classAttr.value.split(" "); for(var i = 0; i < classNames.length; i++){ if (classNames[i] == className) {return true;} } return false; }
どうすんだよこれ
getElementsByClassNameならいちいち自分で実装しなくてもコードはあちこちにあるだろ
すみません御教示ください。
一定時間で2枚のリンク画像が入れ替わる、
ということをやりたくサンプルを探していたところ、
ttp://auone-net.okwave.jp/qa3871525.html の回答ひとつめ(良回答20pt)の書き方が、
bodyでリンクを指定できるため一番しっくりきました。
ただ私の場合、一ページに複数設置したいと考えてます。
回答者も「複数使う場合はsetTimeout()を使った方が良いので」と書いているので、
「setTimuout」でググっていろいろ見たのですが、初心者のためわかりませんでした。
●<script>にリンクを入れてbodyでsrc=""指定という方法ではなく、上記回答のようにbodyに<div>などでくくって直接リンクを記述。
●それで一ページに複数使用。
ということは可能でしょうか。
可能な場合、ここなんか初心者でもじっくり読んだらわかるんじゃない、
というような参考になるページがあれば教えていただけないでしょうか。
お手間かけますが、よろしくお願いいたします。
2行各2セルで四分割な構造のテーブルがあり、その右下のセルに、全く同じ構造のテーブルがn個入る
無限変則入れ子のテーブルがあります。んで、そのテーブル内の入力項目を再帰的にチェックするスクリプトを書いてます。
function fReflexiveCheck(sID) {
var iBit = true;
var rURL = document.getElementById("url:" + sID);
if (rURL.value.length == 0) {
rURL.style.backgroundColor = "yellow";
iBit = false;
} else {
rURL.style.backgroundColor = "white";
}
var rTable = document.getElementById("tbl:" + sID);
if (rTable.rows.length > 1) {
rCell = rTable.rows[1].cells[1];
for (var i in rCell.childNodes) {
if (typeof rCell.childNodes[i] == "object") {
if (rCell.childNodes[i].nodeName == "TABLE") {
var aID = rCell.childNodes[i].id.split(":");
aID.shift();
iBit = fReflexiveCheck(aID.join(":"));
}
}
}
}
return iBit;
}
チェックは途中まで上手くいくのですが、↓のような構造の場合、何故か途中で処理が終了してしまいます。
ttp://up2.viploader.net/pic/src/viploader1047047.jpg 変数は全部ちゃんとvar宣言してるので、カウンタが壊れちゃってるとかも無いと思うんですが…
わかる方いらっしゃいましたら、ご教示お願いしますm(_ _)m
>>465 <div id="links1">
<div><a href="1-1">1-1</a></div>
<div><a href="1-2">1-2</a></div>
<div><a href="1-3">1-3</a></div>
</div>
<div id="links2">
<div><a href="2-1">2-1</a></div>
<div><a href="2-2">2-2</a></div>
<div><a href="2-3">2-3</a></div>
</div>
で、それぞれ今表示中のdivをdisplay:noneにして次のdivをdisplay:blockにすれば
いいだけなんじゃないの?
>>466 for inはそこでは使うな。
forの中でalert(i)してみた?
468 :
466 :2009/06/10(水) 16:06:13 ID:???
>>467 ありがとうございます!
iの中身を表示したら、添え字に数字以外の文字がたくさん入っていました
ですので、 for (var i=0; i<rCell.childNodes.length; i++) { に変更しました。
ですが、再帰処理復帰後にループが終わってしまう現象は改善しませんでしたorz
ループ中に再帰処理を呼び出して、そこでまたループ処理をした場合
iのカウンタがおかしくなってしまうんでしょうか…
var宣言してるから常に新しい実体が出来ている、というつもりで作成しているんですが
うーむうーむ
469 :
466 :2009/06/10(水) 16:18:31 ID:???
連投すみません 検証として下記のようにしてみたのですが、改善しませんでした。(sIDは全体で一意) ------ aCt = new Array(); for (aCt[sID]=0; aCt[sID]<rCell.childNodes.length; aCt[sID]++) { ------ ですので、カウンタは原因では無いようでした。
関数実行時にその関数内でvar宣言したものは新しくなるって解釈で間違ってない エラー出て止まってるとかじゃないの?
471 :
466 :2009/06/10(水) 16:20:47 ID:???
IEと、firefoxのコンソールで確認しながらやってます。 ブラウザの表示では、エラーは出てないです。
それじゃxhtmlのせいでnodeNameが大文字とは限らないとか
>>460 >>454 す。
class名を抽出してリストを生成したい。
<p class="foo bar">ほげほげ
<p class="baz">ぴよぴよ
↓
<ul>
<li>foo
<li>bar
<li>baz
</ul>
>>466 var rCell
>>465 「複数設置したい」の意味が、1ページ内にバラバラに置きたいのか、
固めて置いてしまっていいのか、どっち?
固めて置くでいいのなら、>467でおk。
まあ、たぶん違うだろうけどw
バラバラに置きたい場合は・・・すまん時間がない誰か任せた。
>>474 バラバラに置いてもいいんじゃない?
というより、バラバラなタイミングで変化させるのだと
>>467 ではできないかと。
476 :
466 :2009/06/10(水) 17:07:49 ID:???
>>474 あ…ありがとうございます(´;ω;`)ウッ…直りました!!
私が言うのもなんですが、良くこんなところ気が付きましたね…(´;ω;`)
ほんとにありがとうございました!
>>472 さんも、ありがとうございました!
>>475 時間じゃなくて位置の問題でしょ。
>467を1ページの中にバラバラに置くと、
最初の設定時間まではページの上に画像を3つ表示して、
次の時間からは、上の3つが消えて下に画像を3つ表示とかになる。
478 :
465 :2009/06/10(水) 17:57:23 ID:???
>>467 どうもありがとうございます。
ためしてみました。教えていただいた方法はsetIntervalの場合でよろしいんですよね。
ただ、setIntervalとsetTimeoutの違いを調べていて、
setIntervalは処理に関わりなく実行すると知ったため、
処理を終えてから次の処理を実行するsetTimeoutのほうが、
こちらの都合でありがたいんです。
あと、おしえていただいたものを試したところ、
>>477 さんもかいておられますが、一番最初に画像が6枚表示さてれしまってから、処理が始まりました。
最初の6枚表示されないほうがありがたいです。
>>474 >>475 すみません。
>1ページ内にバラバラに置きたいのか、固めて置いてしまっていいのか
やろうと思っているのは、
一列td5つのtableタグが、ページ内に3つ上から順に近接してある。
こちらの都合でtr2段とかにはしていません。
このtd5つそれぞれに、2枚がいれ変わるリンクした画像をいれる。
というものですので、
この場合はバラバラになるのでしょうか、固まっているのでしょうか。
またタイミングはすべて同じです。意図的に右端にいくにつれて5秒ずつ増やしたりなんてことはありません。
返事が明日になってしまいますが、よろしくお願いいたします。
479 :
465 :2009/06/10(水) 17:59:46 ID:???
すみません。
上の文中
>>477 も書いていますが、とか書きましたが違いますね。
480 :
467 :2009/06/10(水) 18:09:51 ID:???
理解されてないので書き直す。 <div id="links1"> <div style=""><a href="1-1">1-1</a></div> <div style="display:none"><a href="1-2">1-2</a></div> </div> (中略) <div id="links2"> <div style=""><a href="2-1">2-1</a></div> <div style="display:none"><a href="2-2">2-2</a></div> </div> と <div id="links1"> <div style="display:none"><a href="1-1">1-1</a></div> <div style=""><a href="1-2">1-2</a></div> </div> (中略) <div id="links2"> <div style="display:none"><a href="2-1">2-1</a></div> <div style=""><a href="2-2">2-2</a></div> </div> がいったりきたりすればいいんじゃない?
482 :
467 :2009/06/10(水) 18:52:01 ID:???
読んだけど、1つ1つにidふって面倒だなあって感想ありきで書いたからな。 別の解釈があることを想定してなかったんだよ。悪いな。
document.write("value1 = " + value1 + "<br />"); document.write("delete value1: " + delete value + "<br />"); for (var value1 = 0; value1 < 2; ++value1) { document.write(value1 + "<br />"); }
484 :
483 :2009/06/10(水) 22:47:11 ID:???
<html><head> <script type="text/javascript"> window.onload = function() { var banner_set = []; var banner_num = []; var div = document.getElementsByTagName('div'); for (var i = 0; i < div.length; i++) { if (div[i].className != 'bannerset'){ continue; } var link = div[i].getElementsByTagName('a'); banner_set.push(link); banner_num.push(0); } setInterval(function(){ for (var i = 0; i < banner_set.length; i++) { banner_set[i][banner_num[i]].style.display = 'none'; banner_num[i] = (banner_num[i] + 1) % banner_set[i].length; banner_set[i][banner_num[i]].style.display = 'block'; } },5000); } </script> <style type="text/css"> .banner { display:none; } </style> </head> <body> <div class="bannerset"><a href="URL1-1"><img src="画像1-1"></a><a href="URL1-2" class="banner"><img src="画像1-2"></a> <a href="URL1-3" class="banner"><img src="画像1-3"></a></div> <div class="bannerset"><a href="URL2-1"><img src="画像2-1"></a><a href="URL2-2" class="banner"><img src="画像2-2"></a> <a href="URL2-3" class="banner"><img src="画像2-3"></a><a href="URL2-4" class="banner"><img src="画像2-4"></a></div> <div class="bannerset"><a href="URL3-1"><img src="画像3-1"></a><a href="URL3-2" class="banner"><img src="画像3-2"></a></div> </body></html>
>>465 ↑ざっと書いてみた。
idはいらない。リンクをまとめてるdiv に class="bannerset" と、
それぞれのリンクの2番目以降に class="banner" を書いておくこと。
切り替える数は↑の通り、それぞれバラバラでかまわないけど、
切り替えるタイミングは全部同じだから、数が少ない方が1周するのが
早いってことになるんでよろしく。
>>487 未提出←採点不可。論外。
動くプログラム>>>>>>>>動かないプログラム>>>(越えられない壁)>>>批判厨=雑魚
>>485 あとはスクリプトOFF時にどうしたいかぐらいだね。
必ず表示バナーを1つにして見栄えを確保したいのであればこのままだし、
全部バナーが表示されないと困るときは、
.banner{display:none}じゃなくて
onloadの中で1つ1つdisplay:noneを設定していけばいいし。
490 :
465 :2009/06/11(木) 16:38:30 ID:???
返事遅くなり、もうしわけありません。
>>467 ,480
ご指導ありがとうございます。
理解力のない頭ではありますが考えてみますので、
お時間いただき試してみます。
>>486 ご教示ありがとうございます。
467さんのを考えて試してみてから、
参考にさせていただきます。
>>489 そこまで気が回りませんでした。
ご教示ありがとうございます。
急ぎの作業ではないので、腰をすえて考えてまみます。
chromeのJSについて質問です。
location.search がchromeだと取得できないみたいなんですが
そういう仕様ですか?それとも俺だけ・・・?
例えば
http://localhost/?test というURI上で
if(location.search.match("test")) alert("TRUE");
は、chrome 以外ではtestがマッチしません。
また
if(location.search == "") alert("TRUE");
の場合、chromeのみ通ります。
これについで誰か、仕様なのかどうか知りませんか?
ちなみにchromeは最新2.0.172.31。
他はIE8、Fx3、Safari3でテストしてます。
ごめん > は、chrome 以外ではtestがマッチしません。 ↓ します。
で、実際にlocation.searchに何が入っているかは確認したのか
厳密比較演算子使いましょう
>>491 XP、chrome2.0.172.31で試してみたけど、
if(location.search.match("test")) alert("TRUE");
if(location.search == "") alert("TRUE");
両方alertが出なかったよ。else付けたしたらelseの方が実行されたし。
alert(location.search)で何が入ってるか確認した?
確認した範囲ではlocation.searchの仕様は他と同じだった たぶんalert(location.href)してみたほうがいい エラーページに対してブックマークレットで動作確認してる気がするんだけど
497 :
Name_Not_Found :2009/06/12(金) 20:20:32 ID:Wxbu78+q
すいません、色々とググってみたのですが、解決できずに質問です・・・。 以下のような記述をすると・・・。 <div id="hoge" onmouseover="func1" onmouseout="func2"> <div id="hoge_left"> <a href="huga"></a> </div> <div id="hoge_right"> <a href="fuga"></a> </div> </div> 子要素にマウスが移動してもfunc1やfunc2が発動してしまいますよね。 これを何とか、発動しないようにして、一番外のhoge要素のみ反応するようにしたいんです。 event.target.idで指定してみても無理でした。 jqueryを使ってみたら、なぜか以下のようにhoverでバインドしても、ピクリとも反応しません。 $("div#hoge").hover(func1, func2); // これもダメ。 何か手はないものでしょうか・・・・。
function func1(event) { if(event.target.id != "hoge") return true; このままだとIEで動かないだろうけど、こんな感じで
>>498 ありがとうございます。
やってみましたが、子要素間でマウスを移動させると、やはりfunc1、func2が呼ばれてしまいました。
うーむ・・・。
targetがaの可能性もあるんだから上も確認しないと駄目に決まってんだろ
>>500 いや、どうもA要素とかいう問題でもなさそうです・・・。
targetをコンソールに書きだしてみたら、
子要素のDIVを行き来させると、なぜか親要素のDIVのeventも呼び出されてしまいます。
つまり、
>>497 でいえば、
<div id="hoge_left"></div>にあるマウスカーソルを、
<div id="hoge_right"></div>に移動させると、
<div id="hoge">からは出てないし、入ってもいないのに、
<div id="hoge">のイベントが呼び出されます。
んなの当たり前
>>502 すいません、読解力が足りず・・・。
ということは、
>>498 の方法では回避できないということですか?
onなんとかをやってるタグの直下のタグでも同じonなんとかのイベントを拾って そこでcancelBubbleをfalseにするなりreturn falseするなりしないといけなかったような。
そのへんめんどくさくなって、対象エリアの座標を計算をした上で カーソル位置を捕捉して出入りをチェックしたことあるなぁ
そうそうw 昔画像を入れ替えて遊んでいたのを今風に書いてみるとどうなるのって事で調べてて cancelBubbleが出てきてめんどくさくなってやめたw
e.targetがdiv#hogeに包含されているかいないかを調べれば良いだけ IEならcontains、Fx、OperaならcompareDocumentPosition、そうでなくとも祖先チェック 過去ログに何度も出て来たぜ
なんという。。。
>>504-507 ありがとうございます〜!
なるほど、contains、compareDocumentPositionで実現できるのですね・・・。
>>505 にインスパイヤされて、
対象のdiv要素の位置と幅、高さを取得して、
マウスの位置がそこに重なったらfunc1を、出たらfunc2を呼ぶようにして力技で実現しました・・・。笑
常にマウスの位置情報を取得してるのが、若干気持ち悪いですが・・・。
可能であれば、
>>507 さんの方法で書き直して見たいと思います。
ありがとうございました!
>>507 e.relatedTargetが、だな
511 :
491 :2009/06/13(土) 02:11:02 ID:???
返事遅くなってすみません。
>>493-496 alert(location.search) ではダイアログに何も表示されません。
if(location.search == "") alert("TRUE"); でアラート:TRUEが出るので""が返ってるんじゃないかと。
とりあえずバグでも仕様でもなさそうなので、再インスコとかしてみます。
ありがとう
ローケーションバーにJavaScript入れてやっているという落ちだろどうせ
だからlocation.href見てみろって きっとエラーページの内部URLだから
>>512 それでもlocation.search拾えたっていうかそれで確認した
>>514 そうなのか、それは失礼
・・・ってダメだろ、?testついてないじゃないかw
>>515 そういえばそうだね、気づかなかった・・・
まあ普通はちゃんと動作する事が分かったし
FxなりSafariなりでは問題ないからテストはできるし
再インスコとかしてなんとかしてみます。
まじお前らありがとうございます
517 :
Name_Not_Found :2009/06/13(土) 18:09:35 ID:WQ1/H40I
valueofってなんですか?教えてください。
アルファベット
English
綴りミス
すまん、Engrishだった。
もう許してやれよ
関数の中に関数を入れることはできますか? 下のようなソースを見せたら気持ち悪いしそんなのできないと言われたんですが。 <html> <head> <script> function calc_fare(){ var i=0; var distance =0; var k = [1.3, 2.2, 1.8, 1.5, 2.2, 1.6, 2.2, 3.6, 4.4, 2.0, 2.3, 3.4]; //配列を足し算する関数 var add = function(a, b){ var a = parseInt(a); var b = parseInt(b); if(a < b) distance = k.slice(a, b); return eval(distance.join('+'))/1000; } //引数を受け渡して、返り値をkmに代入 var km = add(document.form1.jyousya.value, document.form1.kousya.value); document.form1.km.value = km; } </script> </head> <body> </body> </html>
やってみればいいじゃない
計算はできました。 けどなにかjavascriptの文法的に何かおかしいのかなーと
何の問題もないよ
強いて言えば
>>523 はそうやる意味がわからないから気持ち悪い
できないなんて事は全く無いけど addの部分を関数にする必要ある?それ 気持ち悪いのは正しいかも
なるほど、つまりこうすればいいわけですね <html> <head> <script> function calc_fare(){ var i=0; var distance =0; var k = [1.3, 2.2, 1.8, 1.5, 2.2, 1.6, 2.2, 3.6, 4.4, 2.0, 2.3, 3.4]; var a = parseInt(document.form1.jyousya.value); var b = parseInt(document.form1.kousya.value); if(a < b) distance = k.slice(a, b); var km=eval(distance.join('+'))/1000; document.form1.km.value = km; } </script> </head> <body> </body> </html> </head> <body> </body> </html> 関数の中に関数を入れることはできないとはっきり否定されたので何かあるのかと思いましたが一応できることはできるんですね。 お早い回答ありがとうございました。
evalにつっこまないし、関数宣言についての知識は間違ってるし、 あんまりその先生はJavaScriptについてはあてにしちゃいかん気がする。
生徒「先生!ECMAScriptって何ですか?」 その先生「…」 生徒「クロージャって何ですか?」 その先生「…」 生徒「ラムダ言語って何ですか?」 その先生「…」
ちょっと気になったんで聞いてみたいんだが、 function A(){ var X = B(x); ... var Y = B(y); ... } とかするとき、関数Bはどこで宣言する? 自分はA以外でBを使うならAの外、Aでしか使わないならAの内部で宣言してるが。
>>243 のevalは絶妙だから突っ込まれなくても間違いじゃないかと
だから自分も反応に興味があった
でもなぁ、「そんなのできない」と言ってのけるレベルでevalはスルーだなんて酷いw
>>533 その関数の性質と長さによっては埋め込むこともあるけど
for (var i=0, l=array.length; i<l; i++)
for (var i=0; l<array.length; i++)
こういう違いがあるはずだから、基本は外かと
前の宿題の子か
>>530 あんまりよくないと言われたので他にも考えたんですがなぜかどれも計算が合わなくて・・・
思いつかないので仕方ないかなと・・・
<html>
<head>
<script>
function calc_fare(){
var i=0;
var distance =0;
var k = [1.3, 2.2, 1.8, 1.5, 2.2, 1.6, 2.2, 3.6, 4.4, 2.0, 2.3, 3.4];
var a = parseInt(document.form1.jyousya.value);
var b = parseInt(document.form1.kousya.value);
for(i=0;a<b;a++){
km+=k[a];
}
document.form1.km.value = km;
}
</script>
</head>
<body>
</body>
</html>
確かこんな感じでだめだったはずです
ソースを見ないで回答例とあってるかどうかだけ確認してるみたいですので、evalとかは気付かないみたいです。
人が多すぎて中身まで見る余裕がないようですね
素朴に、kmはドコから北の?
ああ、すいません即席で作ったやつなので色々抜けてます。 計算結果が1.3+2.2を足して3.5のはずなのに答えが3.1になったりといろいろぐちゃぐちゃになってしまいまして 結局evalになりました
途中経過をalert()で表示してデバッグぐらいしようぜ、少年
色々抜けた動かないコードを貼るのなら我々もできることはないな。 ところで parseInt() --- 整数用、parseFloat() --- 実数用だけど それは大丈夫なんだろうか。
我々・・?
できることはない・・?
━━━本スレに書く事を許される者は以下の通り━━━━━
一、JavaScriptはJavaとは別物であると知っている者
一、自ら学んでJavaScriptコードを書く意思を持つ者
一、ユーザに迷惑となるスクリプトを書かない者
一、質問を分かる日本語できちんと説明できる者
一、トラブルを再現する最小限のサンプルを貼れる者
一、テンプレ+FAQ
>>2-10 /過去ログ/関連資料を読める者
こんな奴に構ってやるなんて、お前ららしくないな。 暇なのか?
お前ら・・・?
547 :
Name_Not_Found :2009/06/16(火) 17:32:12 ID:I1I9/SC9
お取り込み中すいません。outerHTMLって使ってますか? inner...とどう違うんですか?
自分自身を含むHTML片 イメージで言えばCSSのmarginとpaddingみたいな関係 互換性低いから使ってない
549 :
547 :2009/06/16(火) 18:13:47 ID:+VajhknI
>>548 さん
なるほど、だからなんですね。ありがとうございました。
IEでデバッグをするときには便利
>>551 全部を開いてみたわけじゃないが、vol.58 とvol.59だけでは。
58がいくつもあったりしているからいずれ管理人が直すだろ。
質問です。 <html> <body> <script type="text/javascript"> var java_version = java.lang.System.getProperty("java.version"); var d = new java.lang.Double(1.23); var d_class = getClass(d); </script> </body> </html> 上の html が getClass(d) でエラーになります。 エラーは getClass is not defined です。 実行環境は firefox3.0.11 です。 Rhinoではうまくいきます。 どうしてなのでしょうか。
そんな関数ねぇから
>>554 回答ありがとうございます。
代わりの関数はないのでしょうか。
LiveConnect に getClass() が含まれているのかよくわかりません。
もうjavascriptでjava使いたいヤツは死んだらいいよ。。。
単に自分に知識がないのもあるが、いろいろびっくりしたよ。 Firefoxで1,2行目が通るのが驚愕だ。 RhinoでHTMLタグついてても動くらしい、ってのも驚愕だ。 そして1,2行目を理解してJava脳になったところで3行目を見ても驚愕だ。
function example(){ function example.example(){ code } } と example = function(){ example.example = function(){ code } } ってどうちがうの
>function example.example(){ 違い以前の問題でこんな定義できない
ECMA違反だがJScriptは可
そっか、じゃあそれが違いだ
宣言と式の違いもある
コンパイルのタイミングが違う
スタチックである
ああなるほどすたてぃっくなのね。ありがとん
567 :
Name_Not_Found :2009/06/20(土) 23:18:37 ID:xVDAeImY
JavaScriptを使った画像ボタンを送信フォーム用のボタンにする場合について質問があります。 下記のように記述してますが、うまく画像が切り替わりません。フォーム送信にはjavaは適応できないのでしょうか <script language="JavaScript"> img = Array(3); img[0]=new Image(); img[0].src="images/submitup.gif"; img[1]=new Image(); img[1].src="images/submitorver.gif"; img[2]=new Image(); img[2].src="images/submitdown.gif"; function ChangeImg(imgname, file) { document.images[imgname].src = file; } </script> <p><input type="image" src="images/submitup.gif" size="5" id="submit" border="0" onmouseout="ChangeImg('submit', 'images/submitup.gif')" onmouseover="ChangeImg('submit', 'images/submitorver.gif')" onmousedown="ChangeImg('submit', 'images/submitdown.gif')"> </p> buttonも使いましたが、そちらではjavaは動いたようです。 しかし枠ができたりきれいにできませんでした。
Javaが適応と申したか
ずいぶんと懐かしい趣のあるコードだな
ホームページビルダーが吐いたコードとかじゃね?
試した訳じゃないけど 最悪 removeChild() して appendChild() してやれば何とかなる気がする
━━━本スレに書く事を許される者は以下の通り━━━━━ 一、JavaScriptはJavaとは別物であると知っている者
Javaは、まで読んで完全に引いた。
574 :
Name_Not_Found :2009/06/21(日) 12:43:02 ID:FyxafRKd
567です。571さん、ありがとうございます。一度試してみます。 初心者なので、よくわかってませんが、勉強してみます。
Javaの質問はスレ違い
576 :
553 :2009/06/21(日) 13:57:03 ID:???
>>556 レスありがとうございます。
JavaScript 第5版を読んでいます。
P.234のコードで疑問を持ったので質問しました。
変な質問をしてごめんなさい。
>>557 >>558 レスありがとうございます。
JavaScript上でJavaにアクセスできるのが不思議でした。
それから、RhinoにはJavaScriptのコードだけ渡しました。
試しにRhinoにhtmlを与えたところ、エラーが出ました。
誤解をあたえる文章ですみません。
577 :
名無しさん@お腹いっぱい。 :2009/06/21(日) 16:12:08 ID:3Kh1je8p
<img src="1.jpg" onmouseover="this.src='2.jpg'" onmouseout="this.src='1.jpg'"> マウスを画像の上に乗せたら、パッっと切り替わるんではなくモーションがかかったような感じで切り替える方法を教えてください。
>>577 手取り足取り教えれっていうのはスレ違い
ライブラリでも探して使うよろし
>モーションがかかったような感じで切り替える すごひね。オスとメスか。
<script type="text/javascript"> function $(tagId){return document.getElementById(tagId);} window.onload = function(){ count = 1; document.getElementById("img").onmouseover = function(){motion(this);}; } function motion(t){ $("_motion_").style.display = "inline"; x = [t.getAttribute("src"),t.getAttribute("rel")]; t.src = x[1]; $("_motion_").src = x[0]; $("_motion_").style.position = "absolute"; $("_motion_").style.top = t.offsetTop+"px"; $("_motion_").style.left = t.offsetLeft+"px"; op = setInterval("control()",20); } function control(){ speed= 0.02; if(count > 0){ $("_motion_").style.opacity = count -= speed; }else{ clearInterval(op); count = 1; $("_motion_").style.display = "none"; } } </script> <img src="" id="_motion_" style="display:none;" /> <img src="test.jpg" rel="test2.jpg" id="img" /> つくってみた、IEじゃ動かないからそこは自分でやって
>>578-580 レスありがとうございます。
モーションといいますか、フェードインしながら指定の画像に変わった気がします。
またそのフェードインの種類が8種類くらいあって、8にするとランダムにフェードインしたような気もします。
上を参考にコーディングしたいと思います。ありがとうございました。
XHTMLすら書けてない糞コードは参考にしない方がいいぞ
先生が$は絶対使うなと。
javascript2.0という存在をつい最近知りました。 現状のjavascript1系を根本から書き直した仕様だそうで、既に実装されてるブラウザもあるのですね。 javascriptを本格的に勉強始めようと思っていたのですが、今から勉強する場合でもやはり1系を勉強すべきでしょうか? しばらくは1系と互換性のある形でjavascript2.0が広まるのでしょうが、いつか消えると分かっている1系を勉強する気になれません。
2だっていつかは消えるよ。
>>584 JavaScript覚えて何をしたいのか知らんが、
Webサイトで表現できることを増やしたいだけなら、
そのページを丸ごとFlashにすればいいよ。
JavaScriptではできないようなことだってできる。
ほら、JavaScriptを勉強する気がなくなっただろ?
さっさと帰れ。
言語の将来性考えたくらいで勉強する気になれないんじゃ、 この先何やっても中途半端に終わるよ。
どっちがいいかって聞いてるだけなんだから答えてあげりゃいいんじゃねえの。 そこまでして教えてあげたくない気持ちがよくわからん。
>>584 JavaScript3.1が出るまで触らない方がいいよ。人生の無駄になるから。
そうだよ教えてやれよ。 え?俺?いや遠慮しておこう。
> 一、自ら学んでJavaScriptコードを書く意思を持つ者 > いつか消えると分かっている1系を勉強する気になれません。 結論でてるだろ。2.0学だらいい
JavaScript 2.0はとっくに死亡してる ECMAScript 4はActionScript3やJScript.NETで生き残った ECMAScript 3.1は5になった JavaScript3.1ってのはいつ出るんだろう31年後くらい?
ECMAは4が死ぬんじゃないの?
ひねくれた奴だらけでワラタw
暗に「これから消える1系で頑張ってるお前らアホなの?」と言ってるわけだからな
596 :
596さん :2009/06/21(日) 22:48:33 ID:???
ほんと「これから消える1系で頑張ってるお前らゴクローさんw」言ってるも同然だよな
そう考えると「1系? (プ」って言ってるようなもんだな
マジレスすると2.0が普及するにはまだ時間がかかるから気にせず1系を勉強しろ。 数年前から話題になりながら現状まだ全然広まってないことを考えれば難題も多いのだろう。 2.0が普及したとしても、1系の実情を知ってる奴と知らない奴とでは知識の深みも違ってくるだろう。
yieldとかletとか普通に使えるようになると良いな
残念ながらes5には含まれない
>>588 最初から、やる気のないヤツに答えを教えたって意味がない
この質問だと、「2.0を覚えた方がいい」って答えを待ってるだけにしか思えん
まだまだ、春は遠いなー。
PS2があればPSはほとんどの場合必要ないが、 NTTが光サービスを提供してるからって、即ADSLサービスを打ち切るわけにはいかない。 ブラウザの呪縛に縛られる意味を一番わかってるのが JavaScript使ってるヤツらだろうからなw 古いブラウザのシェアがある程度残っていて、かつそれも対象に含めるつもりなら、 全部乗り換えてスッキリ、ってなわけにはいかないのがWebのクライアントプログラム。 JavaScript2.0だの見てる時間があるなら、その前に、 ブラウザの打ち切り判断まで何年もかかることを ちったあ勉強してからこいと。
たかが素人の質問一つで何でそこまで必死なんだ
606 :
Name_Not_Found :2009/06/22(月) 03:02:44 ID:yMGyyo+O
ほんとwまともな人と人間として終わっている人が混在してるね。 リアルでは痛い人なんでしょう。。
などと痛い言動を繰り返しており動機は不明
JavaScript2.0実装なんてあるの? tamarinとか言う奴? Firefox4に組み込む予定なんだっけ? 詳しい人教えてplz
var test1 = { fields: [ {name: 'aaa'}, ] }; fields: [ {name: 'bbb'}, ] 上記test1オブジェクトの配列fieldsにbbbを追加したいのですが、 どうすれば連結できますでしょうか
test1.fields.push({name: 'bbb'});
できました!有難う。
仮引数eがnullったり、未定義になるのですが、 外部ファイルに書いてるのが原因でしょうか?
>>612 ソース見ないと何とも言えないけど、参照したタイミングでnullだったり未定義だったりするんだと思うよ
言語によっては別ファイルだとスコープ変わったりすることもあるけど JSは<script>にコードを直に書いてもsrcで読み込んでも違いはないはず
>>604 仕事が無くて暇なんですよ。分かって上げて下さい。
うちも受注激減してる。対前年非で先月は半数割れだったらしい。
Bookmarkletについて2つほど分からないことがあるのですが、どうかご教示下さい。m(_ _)m (長すぎる行があるとエラーが出るので改行してあります。) Googleの画像検索ページにて、 javascript:(function(){var ret='<html><body>';var tags = document.getElementsByTagName ('a');for(var i=0;i < tags.length; i++) {var e=tags[i];var url=e.getAttributeNode ('href').value;if (url.match(/imgurl=([^&]+)&/)){var img=RegExp.$1;url.match (/&imgrefurl=([^&]+)&/);var ref=RegExp.$1;ret+=' <a target=_blank href='+ref+'> <img border=0 src='+img+'></a>';}}ret+='</body></html>';var d=window.open().document;d.writeln(ret);d.close();})(); を実行すると、URLが htt://xxxxxxxxxxxxxx/xxx%20xxx%20xxx/xxxx.jpg だった場合、 htt://xxxxxxxxxxxxxx/xxx%2520xxx%2520xxx/xxxx.jpg となってしまいます。どこを修正すればいいのか分かりません。 もう1つは、YouTubeの動画ページにて javascript:void((function(){var%20s=location.href;s+="&";if(s.match(/\Wv=([^&]+?)\&/)){location.href='youtube://'+RegExp.$1;}}))(); を実行すると、再度実行するにはページを更新しないといけません。 更新しなくても何度も実行可能にすることは可能でしょうか? 以上です。よろしくお願いします。
bookmarkletのままじゃなくてインデントいれてくれよ、改行してありますじゃねーよw しかも%20とか混じってるし 前者はパス うろ覚えだけどIEのa.hrefかimg.srcに余計な親切をしてくれる仕様があって それにひっかかってる気がする >location.href='youtube://'+RegExp.$1; window.openでもすれば?
619 :
617 :2009/06/23(火) 00:07:41 ID:???
>>618 ありがとうございます。インデントはこんな感じでいいのかな・・・
javascript:void
(
(
function()
{
var%20s=location.href;s+="&";
if(s.match(/\Wv=([^&]+?)\&/))
{
window.open('youtube://'+RegExp.$1)
}
}
)
)
();
↑
javascript:void((function(){var%20s=location.href;s+="&";if(s.match(/\Wv=([^&]+?)\&/)){window.open('youtube://'+RegExp.$1)}}))();
としてみたのですが、実行するたびに新規ウィンドウが開かれるのですが、
これはどうにかできないでしょうか?
できる。ググったかい?
あと、それ以前にコードの意味理解したかい。 voidの意味わからず書いてそうな予感
622 :
617 :2009/06/23(火) 01:35:54 ID:???
JavaScript分からないのに、Bookmarkletサイトなどのやつを見ながら 適当に一部を改造しただけなので、意味不明なコードになっていると思います。 一応window.openなので、ググってクローズさせようとしましたが元のウィンドウの方が閉じてしまい挫折しました。 それ以外の方法があるのかは分かりません。 最初のは%2520を%20に置換しようとしましたが挫折。 多分一部を修正すればOKなんだろうなと思い、軽い気持ちで質問してしまいました。すみませんでした。
あえてヒントだけ >元のウィンドウの方が閉じて 変数windowには自身のWindowオブジェクトが入ってる window.open()の返値は新しく開いたウィンドウのWindowオブジェクト >%2520を%20に置換 "%25"を"%"に「置換」を行えばおそらく十分 文字列やその操作は基本的にStringオブジェクトの役割 置換には正規表現も利用するのが一般的だけど、この程度なら使わなくてもおk
毎回閉じるんなら
>>623 のヒントで、
毎回同じウィンドウに表示するだけで良いならwindow.openの引数を調べるといい。
625 :
Name_Not_Found :2009/06/23(火) 02:20:07 ID:KBTgP+7R
できるよ、制限を回避するっていうのはそういうこった リファラチェックである程度ごまかせるけど
仕組みを理解すれば自明だと思うが。
あれはJSONPとかと同列な、オープンなAPIみたいなもんだと思っておくといいかと
ある画像へのURLがあるとして、その画像を保存するダイアログを開きたいのですがどうすればいいのでしょうか。 window.open()だと、ブラウザが直接、画像を表示してしまいます。
jqueryでの質問です。 <select id="select" onchange="alert('test');"> <value 〜 /> </select> こういうタグがあって $('#select').value = "10"; のように、変化させたときにonchangeが発動するようにしたいのですが、 どのようにすれば良いでしょうか・・・。 onchangeの値はalert('test');以外にも色々なパターンができるうえ、 複数個のselectがありそれをループさせているので、 できれば $('#select').value = "10"; でonchangeを発動させたいのですが・・・。
631 :
630 :2009/06/23(火) 15:19:23 ID:???
簡単に言うと Javascript上でセレクトボックスのonchangeを発動したいのです
イベントを発生させるのはめんどくさいから イベントが発生したかのようにコールバック関数を呼び出すのが無難 function change() { alert("test"); } elem.onchange = change; elem.value = 10; change();
ていうかjQueryか triggerHandlerでいけるはず
質問があります。スレチの場合は誘導してくれると助かります。 a=new Array("<img src=0.jpg>","<img src=1.jpg>","<img src=2.jpg>"); このように書くとstring literalエラーが出るPCと出ないPCがあります。 エラーを出さないためにはどうすればいいでしょうか?
triggerでよかったらしい
普段jQuery使ってないからよくわからん
>>634 そのエラーってunterminated string literalのことだよね?
だとしたら読めるところだけ読むのはやめてくれw
それで問題のあるコードに見えなかったんだけど、そのコードでエラー再現する?
" を間違えて ' 二個連続で入力してたりしない?
636 :
630 :2009/06/23(火) 16:10:11 ID:???
var func = 'alert("test");'; このfuncを実行させるにはどうすればいいですか?
すごい評判わるいよでも
>>636 eval(func);
普通は
var func = function() { alert("test"); };
func();
returnValue = falseをIE7でやると submitはキャンセルできましたがmousedownではキャンセルできませんでした。 出来ないのでしょうか?
640 :
634 :2009/06/23(火) 17:27:58 ID:???
>>635 さん
すみません。下のようなscriptです。
<script type="text/javascript">
<!--
function aaa(b)
{
a=new Array("<img src='0.jpg'>","<img src='1.jpg'>","<img src='2.jpg'>");
alert(a[b]);
}
// -->
</script>
<input type="button" value="0" onclick="aaa(0)">
<input type="button" value="1" onclick="aaa(1)">
<input type="button" value="2" onclick="aaa(2)">
IEでもFirefoxでも私のPCでは普通に出来るのですが、相手方のPCでは
ご指摘の通りunterminated string literalエラーが出るらしいです。
文字コード設定が合わなくて化けた結果「"」ができたりしてる んではないの。普通の文字はちゃんと表示されているって? HTMLの冒頭にmetaタグで文字コードを指定している?
>>640 「ような」じゃなくてエラーが再現できたことを確認した、最小限のコードそのまま、をはりなさいな。
643 :
634 :2009/06/23(火) 22:03:30 ID:???
>>641 さん 文字は化けていないみたいだし、meta埋めてもダメでした、、、
>>642 さん >「ような」じゃなくて
ごもっともです、すみませんでした。
相手方に詳しく聞いてみて、調べてみることにします。
みなさん、ありがとうございましたm(_ _)m
new Arrayとか見るとイラッとくる。[]でいいじゃん。。。
new Arrayすると色が変わって見やすい
new Array()はJSLintでエラー扱いされるから使わないってのは? 別にJSLintが完璧だとは思ってないが。 あとnew Array()は引数がバグの温床すぎるから嫌だ。
>>644 もっと柔軟にいけば?変なところにこだわるってガキか?645の言う通り見やすいよ
var x = new Array(5); と var x = [5]; って全然違う意味になるよね
無知はこれだから困る
そらそうだ
new Array(1,2,3); new Array(4,5); new Array(6); って並んでるとうっかり3つ目を[6]と同じと勘違いする。 Array.apply(null, ary) とか書いてるとさらに見逃す。 困った仕様だ。
>>603 さんはTagIndexで活躍されているエキスパートの方ですか。
ちがっていたらすみません。こちらの常連さんとも聞いていますので。
>>651 それは思った
配列のShallow Copyを手っ取り早くやろうとしてハマりそう
ところでArray()のようなコンストラクタへのラッパってユーザー実装できる?
argumentsをどうやってコンストラクタに渡すかで詰んだ
new演算子のせいでapplyできないし、apply以外に引数リスト渡す方法あったっけ
ラッパーならarguments.lengthで分岐すればいいんじゃね?
YO♪
これから普及するのはやっぱりprototype.jsよりjqueryですよね? 仕事でもjquery使いたいのに頭の堅い先輩が許してくれない。う〜ん
お前にその人を説き伏せるだけの説得力と能力がないだけだよ
Prototype.jsだしjQueryだしJavaScriptはCSだし。
jQueryはUIが弱いから仕事では使いたくない。
ふむ、またその永遠のループしちゃいますか 結果は圧倒的なFlashを使いなさい、と このスレでは過去に結果が出されています
JS終わった君、出番です。
大阪に出張中です。
未だにprototype.jsなんて使ってる奴いるの? Rails厨だけだろ
prototypeもjQueryも試したが PCからのアクセスが前提のサイトなら やっぱりflash系でいいだろと俺も思った。
flash系って何だ?flexのこと?
君らが何十行も書いて動作させてることが Flashなら3行で出来る こういうことではないでしょぅか
できねーよ。しねよくそが
ま、いじゃないかw
まだprototype.jsなんだけど。 prototype.jsの置換え対象を、JavaScriptに限定すると何が良い?
Ext.onReady( function() { var store = new Ext.data.JsonStore( { autoLoad : true, url : 'a.php', root : 'root', fields : [ 'data' ] }); var data; // ココ store.on('load', function(store, r) { var record = r[0]; data = record.get('data'); alert(data); ← ちゃんと値が取れる。 return data; }); alert(data); ← undefind }); スコープについて教えてください。 extjsを使用しています。 ココのイベント関数から、変数dataに値をコピーしたいのですが、 グローバルdataにコピーできません。 どうすればグローバルdataにコピーできるのでしょうか。
経験と知識が生きる。
自分で書く
>>670 実行タイミングの問題
dataのかわりに、実行場所がわかるような1とか2とかをalertしてみ
DHTML1.0からwindow.openで開いたウィンドウのソースをみたらHTML4.01でした。 仕様ですか?
ごめん
>>674 を訂正
× DHTML
○ XHTML
>>670 「var data;」の行を削除する。
>>674 ソースなんてwindow.openじゃ取れないでしょ。
ブラウザが適当にでっちあげている情報を見ているだけでは。
本当にソース取りたいのならURLからXMLHttpRequestで直に取る。
dataのところを1,2にしてalertしてみたら、かならずココが最後に実行されているわ。asyncだから? 何かいい方法はありますでしょうか。
dataが必要な関数をreturn dataのところで実行すればいい 今回の問題を単純化するとこんな感じ var str; setTimeout(function(){ str = "abc"; }, 10000); // 10秒後の実行を予約 alert(str); // 0秒目で実行される strの値が必要な関数があれば10秒後以降に実行しないと当然ダメ だからこうする var str; var callback = function() { alert(str); }; setTimeout(function(){ str = "abc"; callback(); }, 10000);
<script type="text/javascript; version=1.7"> example = function(){ var str; setTimeout(function(){str = "abc"; e.next() }, 10000); // 10秒後の実行を予約 yield; alert(str); //abc } var e = example(); e.next(); </script>
javascript2.0まだー?
普及するまで10年ほどお待ちください
var f = function(){ alert('test');} このように関数定義をする場合、最後の}の後にカンマは必要ですか? 代入文なので必要な気もするのですが、参考書などを見るといずれもカンマをつけてないようです。 しかしEmacsのjs2-modeではカンマを付けないと構文エラーの赤線が引かます。
>>682 「var i = 0」のような他の変数定義の場合と同じ。
そもそもJavaScriptは文末のセミコロンが必須ではないので、一貫性を
持ちつつ好きにすればいい。個人的には常に付けるべきだと思うけど。
jqueryで選択範囲の取得ってどうすればいいのですか? 「せんたく"はんい"テスト」←"はんい"を選択状態(色の反転)にすると、「はんい」という文字を取得したいです
685 :
682 :2009/06/26(金) 16:22:46 ID:???
>>683 ありがとうございます。カンマではなくセミコロンでした。
書き方の問題でしたか。
でもネットのブログなんか見てても関数リテラルを代入する場合はセミコロン省く人が多いんですよね。
関数宣言の場合はセミコロン付けられないから、関数定義という範囲で一貫性を保ってるのかな。
圧縮して一行にした場合はセミコンロン必須
>>684 document.getSelection();
Deprecated method document.getSelection() called. Please use window.getSelection() instead. だそうだ
689 :
674 :2009/06/27(土) 11:37:30 ID:???
>>676 開いたウィンドウから見れるよ。
>>674 はFx3.0の時で
IE7ではHTMLタグだけが入ってます。
jQueryのアニメーションメソッドを使っています(slideDows()とか)。 だいたいうまくいくのですが、最初のクリックだけアニメーションしません。 同じような経験をされた人がいたら、教えてください。 (jQuery 1.3.2使用, Firefox 3.0.11 と Safari 3.2.1で確認)
Googleが発言力を持ってきたらしいね。
金のあるところが力を持つのは構わない だが、力を持たないところが金を持つのはいただけない。
恐れ入ります。―ビル・ゲイツ
同じWindows製品をバージョンアップする度にユーザから大金むしり取る詐欺企業
<a href="#top">Top</a> のように、同じページ内へのリンクがあるとします。 このような場合で、ユーザがクリックしたときにそのイベントを拾ってJavaScriptの関数を実行することはできますか。 なんというか、document.location.hash が変更されたときに関数を実行したいんです。
<html> <head> <script type="text/javascript"> window.onload = function(){ document.getElementById("link").onclick = function(){alert("1!");}; document.getElementsByTagName("a")[1].onclick = function(){alert("2!");}; } </script> </head> <body> <a href="#" id="link">1!</a> <a href="#">2!</a> </body> </html>
>>695 イベントを拾うのではなくhashを直に書き換えればいいじゃん
うんたらかんたら.onclick = function(){
document.location.hash = "#IdName";//アンカー設定
alert("くりっくされたよ!");//処理
};
マークレット作ってるんですが、functionと関数名の間の空白を詰め る書き方ってないですか?カッコじゃだめですし。
>>698 var func=function(){...};
とか。
function%20func(){...};
701 :
Name_Not_Found :2009/06/29(月) 15:11:13 ID:MhuMrg0c
jQueryのソースについて質問なんだが、 ver1.3.2で、 562行目からの jQuery.extend の定義内575行目で jQuery.isFunction 使ってて、 その jQuery.isFunction は、631行目で jQuery.extend を使って定義してあるように読める。 これってどう解釈すればいいの?
>>702 >if ( typeof target !== "object" && !jQuery.isFunction(target) )
jQuery.extend({ 略 }); では jQuery.isFunction(target) が評価されないから
function f() { alert("f"); return true }
if(false && f()) alert("test");
704 :
Name_Not_Found :2009/06/30(火) 12:51:38 ID:OdPVFaV/
open('', '', 'width=800,height=800'); としてサブウィンドウのサイズを指定してますが、 これより小さい画面(例えば640,480)で開いた場合に ウィンドウサイズを自動的に縮小する方法はないでしょうか? 相手の画面サイズを取得、それに合わせて長辺を縦横比保って縮小。 なんてのがあれば幸せなんですが。。
>>704 「JavaScript 解像度」でぐぐったら、screen.width, screen.height が出てきた。
706 :
704 :2009/06/30(火) 13:39:59 ID:???
>>705 有効領域をを取得してサブウィンドウサイズを決定ってのはあったけど、
800*800にしたいが、それ以下の画面の時は縮小せい!ってのがあると
助かるんだけど・・
そういうのはブラウザの仕事じゃないか? サイト側の都合で勝手に縮小されて文字潰れるとか困るし
708 :
Name_Not_Found :2009/06/30(火) 13:54:03 ID:T3+tpXX0
タヒチで日本の即席めん大人気
リゾート地として知られる南太平洋のタヒチ(仏領ポリネシア)で、たつの市の食品メーカー「イトメン」が製造するインスタントラーメンが売り上げを伸ばしている。
ここ10年で輸出量が倍増しているほか、現地商社の依頼で2年前からカップめんの販売も始めるなどファンを増やしている。
イトメンによると、タヒチへの輸出量は1998年が155万食だったが、2008年には356万食に倍増。
神戸税関によると、神戸港の即席めんの輸出量は07、08年と連続で全国一。
うちタヒチへの輸出は08年が303トンで、同税関は「タヒチ向けはほとんどがイトメンの製品」という。
イトメンの即席めんがタヒチへ渡るようになったのは40年ほど前で、神戸の貿易会社がタヒチに住む中国人向けに輸出したのが始まりという。
タヒチには118の島に23万人が住む。今はシェア6割ほどを占め、イトメンが直接輸出している。
即席めんは、国ごとの味覚に合わせるケースが多く、現地生産が主流。
同社は日本で販売している「チャンポンめん」と味は同じで、パッケージを変え「ALL-IN-ONE」の商品名で販売しているが、現地でも受け入れられている。
人気が高い理由について、同社の伊藤充弘社長(53)は「香港製などライバルの製品が少ないためでは」と分析。
タヒチで日本の旅行会社現地法人で10年間働く日野到さん(36)は「日本のラーメンは最も品質が良くて人気。よく売り切れている。
長年、安定して輸入が続いているイトメンの商品が定着している」という。
伊藤社長は「最近は原料の高騰で利益はほとんどないが、親しまれている味を届け続けたい」としている。
http://www.kobe-np.co.jp/news/keizai/0002072011.shtml 【グルメ】タヒチで日本の即席めん「イトメン」が人気
http://tsushima.2ch.net/test/read.cgi/newsplus/1246257826/ 【イトメン】 イトメンのチャンポン麺 【総合スレ】 Part2
http://gimpo.2ch.net/test/read.cgi/nissin/1185419295/
709 :
705 :2009/06/30(火) 14:24:31 ID:???
>>706 いやだから、screen.width, screen.height と 800*800 を数値比較すればいいんじゃない?
ってことなんだけど。
そんなに難しいアルゴリズムでもないと思うんだけどなあ。
710 :
705 :2009/06/30(火) 14:30:19 ID:???
>>706 ああ、ひょっとして「画像のリサイズを行いたい」ってこと?
window.openで画像のリサイズは無理だろう。
そういうのは <img> や ImageMagicの分野かと。
チェックボックスを変更不可にするためにjqueryを使って↓を作りました $(function(){ $("#checkbox1").attr("checked", "checked"); $("#checkbox1").attr("onClick","this.checked=true"); }); Firefox3ではちゃんと動きますがIE7だとうまく動かないのですがどうしてでしょう?
>>711 その書き方だとチェックを外すつもりでチェックを外せない、不親切なUIに感じる。
スペースキーでチェックできてしまいそうだし。
変更不可はdisabledを使うのが普通かと。
<input type='checkbox' checked='checked' disabled='disabled' />
713 :
704 :2009/06/30(火) 14:53:05 ID:???
>>709 じゃなくて、1024の人もいれば1600の人もいる。
基本はそこを基準にしてサブウィンドウ開かせて中の画像でも表示。
ただ800とかの人がクリックしたときにそのサブウィンドウが、
自動でサイズ調整してくれる(imgで100%とかで縮小)のはないかと。
800って決めた基準以上にはサイズ変更せず、未満だったら変更。
714 :
711 :2009/06/30(火) 14:56:24 ID:???
>>712 すいません、言葉が足りませんでした
(jqueryで)チェックさせたデータを取得したいのですがdisabledを使うとデータが受け渡されないようなので(そうですよね?)
>>711 の形にしています
元のHTMLをいじれないのでJavascriptを使っています
715 :
705 :2009/06/30(火) 15:22:24 ID:???
>>714 よくわからない。チェックボックスを変更不可にする理由は何?
>(jqueryで)チェックさせたデータを取得したいのですがdisabledを使うとデータが受け渡されないようなので(そうですよね?)
取得できたよ。
---------
<input name='test' type='checkbox' checked='checked' disabled='disabled' />
<script type="text/javascript">
(function(){
var test = $('input[name=test]');
console.log(test[0].checked);
})();
</script>
---------
> 元のHTMLをいじれないのでJavascriptを使っています
よくわからないけど、JavaScriptでdisabledをセットしちゃダメなの?
717 :
704 :2009/06/30(火) 15:37:32 ID:???
>>715 サンクス。
if..なんて関数使ってこれ以下だったら画面サイズ読み取って置換
なんて裏技あるかなと。。あきらめますわ。
>>716 ↓でやってみてsubmitを押しても[#checkbox1]のデータが受け渡されていなかったので・・・
$(function(){
$("#checkbox1").attr("checked", "checked");
$("#checkbox1").attr("disabled","disabled");
});
どうもよくわかりません、何か別の方法を考えてみます。
>>715-716 disabledを設定するとsubmitのときにデータがサーバに送信されない。
一方、
>>716 で試しているのはブラウザ上で値がアクセスできるかどうか。
両者は別のもの。値を変更できないようにしたいときはdisabledではなく
readonlyを使う。
>>719 あーそういう理由でdisabledにするとダメなんですね
とりあえずチェックボックスにreadonlyは使えないようなので
disabledを使ってsubmitの直前にdisabledを削除するという↓の方法でごまかしてみました
$(function(){
$("#checkbox1").attr("checked","checked");
$("#checkbox1").attr("disabled","disabled");
});
$(function() {
$("#form1").submit(function() {
$("#checkbox1").removeAttr("disabled","disabled");
});
});
>>712 さん
>>716 さん
>>719 さんありがd
721 :
716 :2009/06/30(火) 17:16:07 ID:???
>>719 補足ありがとう。
submitで送信されないのは知っていたんだけど、>714の文面からはjQueryで値を取得するように聞こえたんだ。
jQueryでフォームを取得して、AjaxでPOSTするものだと思ってた。
readonlyは知らなかった。
勉強になったよ。ありがとう。
>>720 何か遠回りさせたようでごめん。解決できて良かったね。
>>721 dくす
言葉が足りないですいません((_ _ ((´ω` )ペコ...
load時間を表示することはjavascriptでは出来ますか? 画像をたくさん貼ったスライドショーなので全てロードするのに時間が かかります フラッシュでよくある%表示させるやつをjavascriptでもしたいのですが
imgにonloadイベント
ddEventListenerつかえ
726 :
Name_Not_Found :2009/06/30(火) 23:37:57 ID:DL8X9IQU
Lightbox Plus
ttp://serennz.sakura.ne.jp/toybox/lightbox/?ja さっそくこれを導入してみた。
sample.cssは使ってないんだけど、
アニメーションを使って開く。
キャプションが表示されない。
トップマージン0だ下に余白がある。(そこにキャプションがある予定?)
ここを直すにはどこをいじればいいか教えてもらえないかな?
メールで作者に問い合わせるの面倒で・・
これは画像が縮小表示してくれるから助かる。
それゆえアニメーションオープンを殺したのかな。
jQueryのソース見たけど、なんかすごいね。 解読させん言わんばかりにトリッキーな書き方だ。 それとも俺が馬鹿なだけなのか。
つ圧縮
>>723 暇だったので%表示するスクリプト書いてみた
<head>
<script type="text/javascript">
loadCount = 0;
if(document.addEventListener){document.addEventListener('DOMContentLoaded',domLoaded,false);}
function domLoaded(){
for(var i = 0; i < document.getElementsByTagName('img').length; i++){
addEvent(document.getElementsByTagName('img')[i]);
}
}
function addEvent(e){
(document.addEventListener) ? e.addEventListener('load',loadProgress, false) : e.attachEvent('onload',loadProgress);
}
function loadProgress(){
loadCount ++;
var imageLength = document.getElementsByTagName('img').length;
var progEl = document.getElementById('prog');
(loadCount >= imageLength) ? progEl.childNodes[0].nodeValue = "読み込み終わり" : progEl.childNodes[0].nodeValue = loadCount/imageLength*100 + "%完了!";
}
</script>
</head>
<body><span id="prog">ここに%が表示される</span>
・・ここにimgタグを大量に書く・・
<script type="text/javascript">//このタグをHTMLの最後に書く(重要)
setTimeout("domLoaded()",10);
</script>
</body>
730 :
729 :2009/07/01(水) 00:34:52 ID:???
IE以外でdomLoadedが2回呼ばれたりFirefox,IEでしか動作確認してないのでエラーが発生するかも‥
>>729-730 ありがとうございます
onloadだと全然上手くいかなかったんですが
助かります
732 :
729 :2009/07/01(水) 00:49:20 ID:???
たまに読み込み終わっても固まったままになったりするのでsetTimeoutを小さくしたりwindow.onloadで終了させてやってください
>>726 FirebugでHTML見てCSSでKillするとか。
質問 jQuery使用で $("#ThumbNail .overLay").hover(function(){ hoverOn(this); } function hoverOn( ol ){ var pa = $(ol).parent().$(".disc"); $(pa).animate(....... } みたいな事したいのだが、↓の書き方がよくわからんとです。 var pa = $(ol).parent().$(".disc"); HTMLはこんな感じになってる。 #Thumbnail └.overLay └.disc
var x = $("#ThumbNail .overLay"); var y = x.parent(); var pa = y.$(".disc"); とほぼ同じ 一行目は正確には#ThumbNail .overLayのなかでhoverされた要素一つのみ
738 :
質問のためageさせてもらいます :2009/07/02(木) 00:00:04 ID:bQ70R89N
とても初心者的な質問ですいません Javascriptのソースをjsに変えたいのですが、 (デコードとかエンコードとか言うのですか??) どうすればよいか教えていただけませんか 以前海外のフリーサイトで 左側にJavascript でボタンを押すとjsに変換してくれる サイトがあったような。。。 パソコンを再インストールしてうっかりそのサイト情報を消してしまいました 説明べたですいません お願いします
確かにさっぱりわかってなさそうだな
母国語でおk
>>738 なんでもいいからテキストエディタで、拡張子jsで保存すればおk
ツールなんかいらない
743 :
738 :2009/07/02(木) 03:49:00 ID:???
自覚症状ありありで
突っ込み満載間無質問にもかかわらず
アドバイスありがとうございました
>>739-742 大いに参考になりました
問題も解決しました ありがとうございます
744 :
Name_Not_Found :2009/07/02(木) 16:20:47 ID:NtlK7U8l
jsをエンコードと聞いてcompressを想像した
JSと援交と聞いて飛んできました
こんな板にもキモオタいるのか
質問です。 以下のHTMLがエラーになります。 「'」で囲んで表示しようと思います。 解決法をご存知の方いませんか。 <html> <head> <title>test</title> </head> <body onload='alert("\'" + 8 + "\'");'> </body> </html>
タブン、'alert("\'で一つの文字列にしちゃうんだろね
<body onload='alert("'" + 8 + "'");'>
ミスった。 <body onload='alert("'" + 8 + "'");'>
753 :
Name_Not_Found :2009/07/02(木) 21:20:21 ID:MQk14qgM
ASPで作ったコントロールをVISIBLEにしたいのですが、そのJavaScriptを教えてください コントロールidはtxtJavaにしておきます
<body onload="alert('\'' + 8 + '\'');">
>>753 ASPで作ったコントロールとやらのHTMLをplz
マルチ 209 名前:Name_Not_Found[sage] 投稿日:2009/07/02(木) 21:28:02 ID:??? ASPで作ったコントロールをVISIBLEにしたいのですが、そのJavaScriptを教えてください コントロールidはtxtJavaにしておきます
「何を売ったら幸せ買えるんだろ」 お金で幸せを買おうなんて考えはよくないよ!
正規表現の中に変数を含むことできますか? text = "abc" sequence_num = 3 text.match(new RegExp(/[abc]{sequence_num,}/) // "abc" sequence_num = 4 text.match(new RegExp(/[abc]{sequence_num,}/) // null こんなことがしたいのですが。
new Regexpの引数に文字列を渡す。 文字列は変数やリテラルを連結して作ることができる。以上。
text.match(new RegExp("[abc]{" + sequence_num + ",}") // "abc" ありがとうございます。これでいけました。
変数にリラテルが含まれてると危ないので、 ユーザからの入力の場合は要エスケープ処理or整合チェック
>>761 が何を言ってるのかわからない
危ない具体例はどんな?
763 :
Name_Not_Found :2009/07/03(金) 15:50:21 ID:eqySn1TN
URLに引数付けてそれをJavaScriptで受け取る場合とかじゃね
さっぱり理解できない eval(location.search)が危ないのは自明だけど new RegExp(location.search)はなにを渡したら危ない? もしかしてJS処理がエラーで止まる程度を大仰に言ってる? var input = "a(b", reg = /default/; try { reg = new RegExp(input); } catch(e) { alert(e); } alert(reg);
やっとわかった、頭悪くてすまん var str = "abc123 def456"; var reg = new RegExp(input + "(\\d+)"); var num = reg.exec(str)[1]; 入力がabcなら123、defなら456となるところで abc(.*)を入力されると123 def456となり破綻する、って話か
767 :
Name_Not_Found :2009/07/03(金) 23:23:31 ID:eqySn1TN
>>766 > やっとわかった、頭悪くてすまん
いやいや、
>>758 の質問と、
>>759 の「渡す」にピンと来てしまった
>>761 が
心配性なだけだろうて。
そもそも、外から拾うような値って、受け取った直後に処理しない?
使うときに個別にチェックするのが普通?
768 :
Name_Not_Found :2009/07/04(土) 00:39:04 ID:oF2o/J4N
良スレ
よーそろ
Javascriptのライブラリ、scriptaculousのSortable.createを使ってドラッグ&ドロップでの要素のソートが出来るシステムを作っています。 IEでは問題なく動作するのですが、Firefoxでやるとドロップする度にリロードが入ります。 何が原因でしょうか? ソースは以下です。 <script type="text/javascript" src="scriptaculous/scriptaculous.js"></script> function ddset() { Sortable.create('block', { tag:'dt', overlap:'vertical', constraint:false, onUpdate:function(el) { 〜 ドロップ時の処理 〜 } } ) return false; } <body onLoad="setTimeout('ddset()',100);"> <div id="block"> <dt id="row_1" class="block-img>ブロック1</dt> <dt id="row_2" class="block-img>ブロック2</dt> <dt id="row_3" class="block-img>ブロック3</dt> <dt id="row_4" class="block-img>ブロック4</dt> </div>
771 :
770 :2009/07/04(土) 02:35:14 ID:???
原因が分かりました。 解決はしていませんが、ドラッグ要素のdtにハイパーリンクが仕掛けられているせいでした。 IEだとD&Dではハイパーリンクは動作しないのに、FirefoxだとD&Dでも動作するのですね。
自分もデータのフィルタリング条件としてユーザに正規表現を入力させる
プログラムを自作してたりするんだけどさ、
try{var re = new RegExp(str);}catch(e){alert("Error");return;}
で大丈夫だろうと思ってるんだけど違った?
>>770 HTMLぐらい書けるようになってから来い
>>767 入力を制限するか、エスケープするかの違いかな
仕様で決めたものと実装の都合というか
例えば「入力文字列で<textarea>に検索かけて、検索文字列とヒットした行を表示」として
<(abc)>が入力されたとき、new RegExp("<\\(abc\\)>") と result.innerHTML = "<(abc)>"
というようにエスケープ方法が変わるから事前処理なんてできない
もっとも普通は一回しか使わないから受け取り直後でもかまわないわけだし
その場合に受け取り直後と使用直前のどちらでやるべきとも思わない
それに対して入力制限のチェックを使用直前にやるのはイマイチ
>>772 文字列を入力させるなら、正規表現に変換する際にエスケープ処理いるよねってことで
初めから正規表現を入力させるなら問題ないかと
セキュリティの話ではなかったようだし
ミスった result.innerHTML = "<(abc)>"
775 :
Name_Not_Found :2009/07/04(土) 14:56:17 ID:dyfOtNPE
コンピュータを発明発展させたのが旧ソ連だとしたらgetElementByNameなん かはロシア語ですか?旧ソ連の情報を盗んだドイツがプログラミングの基礎 を開発したらドイツ語勉強しなければいけなかったですか?
そうかそれは良かったな
ドイツ語のゼロはnullだぜ そう、それは良かった
でも、nullはゼロの場合もあるしゼロじゃない場合もあるよね
言語の実装による。 nullはnullだゼロではない
ゼロ⇒null null≠>ゼロ
awkなんかだとJavaScriptで言うnullと0とundefinedは全部同じだっけ? ちょっと気になって調べたら、nilはラテン語、nullは古いラテン語が起源なんだね。
nilってラテン語なのか。
Java厨の俺にはnullと0は全く違うものにしか見えない JavaScriptでも型からして違うじゃん その他の言語では同一に扱うことが多いの?
if( null === 0 ){ alert("ちげーよ"); }else{ alert("ですよね"); }
処理系依存 #define NULL 0
ダミーのリンクを作るときなどに href="javascript:void(0);" という記述をたまに見ますが、このvoidは関数ですか? void演算子なら分かるけど関数なんてドキュメント見ても見当たらないのですが。 演算子なら href="javascript:void 0;"とするべきだし。
>783 Rubyは未定義の変数を読み出そうとするとエラーになる。だからundefinedは存在しない。 nullにあたるnilと0は完全に別。例えばif(nil)は不成立だが、if(0)は成立と見なされる。暗黙の型変換も言語レベルでは存在しない。 PHPでも別。ただし大抵は暗黙の型キャストが呼ばれる。1+null+2は特に警告もなく3になる。 undefined型は存在せず、未定義の変数を参照するとE_NOTICEという弱い警告が出るとともにnullが返る。
>>786 演算子
厳密には()いらないけど別に文法違反でもないし
「(1 * 2) + 3の()は外すべき」みたいに聞こえる
789 :
786 :2009/07/04(土) 21:42:28 ID:???
>>788 ありがとうございます。なるほど、そういうことでしたか。
でも見栄えだけでこの書き方が定着したのかな…。演算子であることが明瞭になるvoid 0の方が良いと思うのになぁ
voidは使わんけど、typeofなんかはtypeof(hoge)って書き方に慣れちゃったな。 if (typeof hoge === 'boolean') みたいなときに迷っちゃったんだなきっと。
voidはビルトイン関数なんだが・・
| | ( '∀`) J J J( 'ー`)し アリガト
void 演算子は次の方法のうち、どちらかの方法で使用します。 1. void (expression) 2. void expression void 演算子は値を返さずに評価する式を指定します。
その書き方だとまるで、、、
void(null)の方が自然だな
じゃあ void(0)でも自然だね
voidは値を返されると困る処理に使うんだよ 例えばブックマークレット
ということにしたいのですね :)
いたなあ そういう人
定型文に何言ってんだか。 while(1) を片っ端から while(true) に書き換えるヤツいるけどさw
while(1)する時なら型変換コストもそれなりに大きそう
Cなら勝手に最適化してくれる、Cなら…
voidってキーワードが出るたびに頭の中で void → ボイン → おっぱい と連想してしまう…
>>802 w
wwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
,r;;;;ミミミミミミヽ,,_ ,i':r" 欝 `ミ;;, 彡 ミ;;;i 彡 ,,,,,、 ,,,,、、 ミ;;;! これが受けるようじゃ ,ゞi" ̄ フ‐! ̄~~|-ゞ, 地球はもうダメだ! ヾi `ー‐'、 ,ゝ--、' 〉;r' みんなで宇宙に逃げるんだ! `,| / "ii" ヽ |ノ ,-、 | | /ニニヽ| |イ | | 't ||/⌒i⌒| | / | | | _,,ノ|、 ヽ__ノ/ / \|⌒ ⌒ヽ _,,..r''''" | \`'/ / | |`i | /\ / | ノ
すまん、もうワケワカメだ。どなたか助けて下さい。 JavaScriptでちょっとしたシミュレータを作っていたんだけれど、Cookieの処理でハマってしまった。 Cookieの読み取り(下記で言うgetCookie関数)が、Cookieの最初の値は取れるんだけれど、2回目以降が取れん。 // 式1:クッキーのセット function setCookie( key, val ){ var tmp = key + '=' + escape( val ) + ';' ; document.cookie = tmp; } // 式2:クッキー呼び出し function getCookie( key ){ var arrCookies = document.cookie.split(';'); var tmpCookies; for(var i=0;i<arrCookies.length;i++){ tmpCookies = arrCookies[i].split('='); if( unescape(tmpCookies[0]) == key ) return unescape(tmpCookies[1]); } return null; } (次レスへ)
808 :
807 :2009/07/05(日) 13:42:51 ID:???
// 式3:実際の利用時の記述 setCookie('foo', 'テスト1'); setCookie('bar', 'テスト2'); alert('テスト:foo = ' + getCookie('foo')); alert('テスト:bar = ' + getCookie('bar')); 式3の所で言うと、 fooは 'テスト1'が返って来る。 barは null が返って来てしまう。'テスト2'どこ行ったんじゃ。 FF3,IE6,IE7で全部ダメ。FFのエラーコンソールも無反応でした。アドバイス頼んます!
tmpCookiesをよーく監視してみな
alertじゃ気づかないかもしれないw Firebug入れてとりあえずalertの代わりにconsole.log
811 :
807 :2009/07/05(日) 14:02:29 ID:???
なんでFirebug入れるとわかるんだと思って入れてみました
なんだこれ…orz
確かにalertじゃわからねえっつーか自分気付けよwwwwwwwww
単純に';'で区切ってただけだったので、Cookie中の2つ目以降の値の先頭にスペースが入ってたのが原因でした。
なんか
>>809-810 がそっこーで理解してるのをみて嫉妬。ありがとな!
>>802 気が向いたので手元の環境で計測してみたぜ。
while(1) - while(true) が、だいたい、
IE6だと1000000回あたり-60ミリ秒
Firefox3.0だと10000000回あたり150ミリ秒
Opera9.6だと10000000回あたり200ミリ秒
Chrome1だと100000000回あたり200ミリ秒
Safari4だと100000000回あたり-30ミリ秒
IE7とFirefox3.5はこのマシンには入れてないんで略。
微妙に謎な結果だ。while(1)のがなんで早くなるんだろ?
×Chrome1 ○Chrome2
試行回数の桁が違うのは何なの?読み間違うだろそれじゃ いずれにしろ気にするようなものじゃないだろうが。
有意に差が出るか確認したかったからブラウザのJS実行速度にあわせて変えたんだよ。 まあ気にするレベルじゃないのは同意。
明日からwhile(true)をwhile(1)に書き換える作業が始まるお・・・
grepしろw
while(true)とwhile(1)は趣味の問題でどっちが絶対的優位ってわけじゃないし わざわざ直すもんでもないだろ。 プログラム内では統一感はあったほうがいいが。
ウィンドウが次の様に左右に分かれていたとして、画面右の『C』がクリックされた場合に、 画面左のスライダーを C の位置までスクロールさせる事は可能でしょうか? もし可能でしたらどの様にすれば良いでしょうか? 【メニュー】 | | 【右のウィンドウ】 A | | <A> <B> 『C』 <D> <E> B | | C |■| D | | E | |
href=hidari.html#c
>>820 出来ました。どうもありがとうございました。
JavaScript要らんやん
オライリー本読んでたら、 javascriptはシングルスレッドです って記述があったんだけど、シングルスレッドなのにどうやってXMLHttpRequestの非同期通信を実現してるんですか? シングルスレッドでユーザのリクエストを受けながら裏でサーバにアクセス???
は?
>>824 CPUのコアが1つのPCでも複数のプログラムを同時に実行できるだろ
オライリーがどういった意味でシングルスレッドと書いたのかは知らんけど チューリングマシンと時分割マルチタスクについて勉強すれば コンピュータの理解が深まると思う
function chk_game(y,x,e){ a="img"+y+x; if(oo==0){ document.images[a].src=card_c[e]; i1=(document.images[a].src).slice(33,35); c1=a; g1=document.images[a].src; oo=1; } else if(oo==1){ document.images[a].src=card_c[e]; if(i1==(document.images[a].src).slice(33,35)){ document.images[a].src=card_c[e]; setTimeout("Match(a,c1)",400); } else if(i1!=(document.images[a].src).slice(33,35)){ document.images[a].src=card_c[e]; setTimeout("UnMatch(a,c1)",400); } oo=0; } } for(var y=0; y<=3; y++){ for(var x=0; x<=12; x++,e++){ document.write("<img name='img"+y+x+"' src="" onclick='chk_game("+y+","+x+","+e+")' width=60 height=80>"); } } 神経衰弱作っています。2枚目を開くと400ミリ秒後に数字がそろってれば消えて揃わなければ元に戻すみたいに作ってるんですが 400ミリ秒の間に一気に3枚開くとおかしくなります。 400ミリ秒だけクリックを受け付けないようにする方法や関数って何かありますか? いくつかのサイトも調べたんですが同じミスをしてる人が多いようでなかなか正解にたどりつけません。 ご教授願えないでしょうか。
>>830 考え方が違う。「現在開いている枚数」を変数に持っておき、
クリックしたときに既に2枚開いていたら何もしないようにする。
自分ならクリック不可のモードを用意するかな field.onclick = function(e) { if (isActive) openCard(e.target); return false; } isActive = false; setTimeout(function() { UnMatch(a, c1); isActive = true; }, 400);
833 :
Name_Not_Found :2009/07/06(月) 13:28:42 ID:6XQe+Lkv
835 :
Name_Not_Found :2009/07/07(火) 17:53:26 ID:J/rZ/Ww+
java(jsp)の文字列型の配列を、 javaScriptに設定することってできないでしょうか? 文字列は下記みないな感じで渡せました。 <% String strJsp = "test1"; %> <scirpt> <!-- var tinko = <%= strJsp %>; alert(tinko); --> </script> こんな感じで配列を渡したいです。 代案等でもいいので教えてもらえればと思います。 分かりづらかったらすみません。
JSONでおk
jspを外部jsとして読み込めばよくね
配列を引数によってJavaScriptの配列形式やらCSV形式やらなんやらで出力するjspを用意して それをJavaScriptで読み込めばよくね
つーかその意味不明な質問によく答えられるな皆 俺の読解力が無いのか…
funcitonの中にonmouseoverとonmouseoutを入れたいのですが どのようにやればいいんでしょうか? またifで'1'だったときにmouseoverした時に"2" '3'だったときに"4"の場合もどのように書けばいいのでしょうか?
普通はmouseoverとmouseoutの処理はそれぞれ「別の」関数を作って 取り扱う。なぜ「1つの関数に」両方入れたいのか説明してみ。
>>841 両方一緒じゃなくて平気です。
課題で出されてちんぷんかんぷんなんです・・
onMouseOver用関数と
onMouseOut 用関数を、別々に作る。例えば
function testOnMouseOut(){ }
function testOnMouseOver(){ }
で、それぞれの関数の内部で、共通の処理があるならば
それを別のFunction として作り
function testFunc(){ }
それぞれ、この例で言えばtestOnMouseOut(), testOnMouseOver() の双方で呼び出せば良い
…と
>>841 は言ってるんじゃないかな。
>>840 function example(){
[DOM Element].onmouseover = function(){
expression
}
[DOM Element].onmouseout = function(){
expression
}
}
メモリーリーク乙
DOM ツリーから切り離しさえしなければリークしないというのは 散々議論し尽くされた周知の事実だというのに
そもそもリークする要素ってどこ?
WebKitはイベントリスナーの循環参照だけ切ってるらしい 他の場合はスルー
>>846 DOMツリーから切り離すのが自分とは限らない
>>849 さすがにそこまで面倒見きれないだろ
切った奴が責任持って処分すべき
自分が管理している対象に、 他のコードが”勝手に”手出ししたなら、 それを管理する責任は手出しした側にあるだろ。 手出しされた側は、せいぜい手出しされたことを 検知するぐらいしかできない。 他のコードが”取説で明示した上で”手出ししたなら、 自分が取説読んでそのように対処すればいい。 メモリリークが問題になるケースじゃない。
"手出しした側"だってそんなコードの存在の責任までとれねーよ "俺のグローバル変数を上書きするな"と逆ギレする奴と同類
>>851 お前はあるページでjqueryとgreyboxとprototypeを使っているかを全部チェックし、
それぞれへの対処を完了してから自作スクリプトを走らせているのか。
まじなら尊敬する。
ここでアホ外人が一言↓
どっちも極端な感じがするけど少なくとも
>>853 のような場合はもうちょっと考えてサイト作れよ
と思ってしまうな
ポリシーというかコーディングルールがない感じがする
今担当しているサイトが引き継ぎ引き継ぎでその状態になって苦労してる
ページ作者がライブラリを使うならドキュメント読めで済むが
ライブラリ作者だと他のライブラリとの衝突をできるだけ避けなきゃいけない
話がすれ違っている気がした
ところで
>>844 のどの辺がメモリリークなのか教えて
>"手出しした側"だってそんなコードの存在の責任までとれねーよ 「こういうコード書くとトラブるかもしれんよ。だから書くなよ」と 取説書けば済むじゃねーか。それに従わなかったら使った側の責任。 何でライブラリ側が責任とるなんて考え方が出てくるんだ? 経験不足かただのアホか。
ただのアホに1票
>>857 だからさ、ライブラリ制作者とかサンプル配布者にしてみれば、
利用者が他に何を使っているかなんて知る術がないんだよ
なんでメモリリークの話題になったのかもわかってないけど javascriptで一般的なGC方式ってなに? DOMから切り離して云々ってことはマーク&スイープ?
>>861 サンクス、とりあえず発生原因の部分は把握できた
クロージャとGCの兼ね合いについてもう一つ質問
function f() {
var obj = {};
window.g = function() {};
}
objはgから見えるけど利用はされてない
このときgが生きてる限りobjは回収されないってことであってる?
それなら
>>844 をメモリリークと言ったのも理解できる
>>859 だからさ、ライブラリ制作者とかサンプル配布者にしてみれば、
利用者が他に何を使っているかなんて知る必要がないんだよ。
注意事項きっちり書いておけば、あとは利用者がどう使おうが知ったことか。
ttp://msdn.microsoft.com/ja-jp/library/bb250448.aspx ここを見る限り、IEの場合はクロージャ自体が参照を保持しており
利用するかどうかは無関係
IE7はunloadが発生したときに文書木を走査して参照を切りまくる
846が「DOM ツリーから切り離しさえしなければ」と言ってたのはこれ
文書木から切り離された断片には対処できない
例えば、innerHTMLで一気に書き換えたときなど
IE8はCOM自体に手を入れることで抜本的修正を行ったらしいが
WebKitのような後発ですら同じ道を辿ってんのか
>>863 [DOM Element].focus();
>>840 です。
回答してくれた方、どうもありがとうございます。
解決しました。
lightwindowを使って、javaアプレットを使用してるswfファイルを読み込むことって可能でしょうか? 単純にhtmlにアプレットタグ<applet>を埋め込んで動作は確認してるんですが、 lightwindowのjsソースを改変することなく出来れば一番いいのですか・・・
>>865 > IEの場合はクロージャ自体が参照を保持しており
> 利用するかどうかは無関係
それは
>>862 の例で言うと次のどっちを意味するのか一瞬迷った
・g を呼び出すかどうかは無関係
・g が obj を利用するかどうかは無関係
もちろん前者だと信じてたんだけど、Firebug の機能で call オブジェクトを覗いてみると
一度も使われない obj のような変数も確認できるようになってるから少し不安になってきた
>>862 の obj は g の寿命まで残っちゃうの?
>>870 実装による(結合オブジェクトなど)
少なくともIEは後者。利用しなくてもメモリリークを確認できる。
>>871 なるほど・・・
unload を待たずに解放したい Web アプリなんかでは注意しないとなぁ
とりあえず
>>862 みたいに空の関数が欲しいだけなら new Function 一択か
>>872 わりぃ、
>>862 をよく見ずにレスしたわ。あれはリークしない。
function f() {
var obj = document;
obj.g = function() {};
}
f();
これならリークする。
<input type="text" class="active" value="" disabled="disabled" /> <input type="text" class="active" value="" disabled="disabled" /> <input type="text" class="active" value="" disabled="disabled" /> <input type="text" class="active" value="" disabled="disabled" /> <select class="active" disabled="disabled"> <option value=""></option> </select> こういうのに $.each($(".active"), function(){ $(this).attr("disabled", ""); }); のようなループをかけたところ、 一応全てのdisabledがtrueからfalseに変更されているのですが、 テキストフォームが灰色の状態から元に戻りません。 セレクトボックスはちゃんと表示されます。 ちなみに、IE6で発生するのですが、Firefoxでは正常でした。 これは何が原因なのでしょうか、また、強制的に表示を灰色から白に戻すことはできませんか?
'false'でもfalseでも同じでした。 ちなみにDOCTYPEはHTML 4.01 Transitionalです。
俺の環境だと
>>875 で普通に上手く行ったよ
XP2,IE6
どうやらiframe内にそれがあると挙動がおかしいようでした。 なぞすぎる
ごめんなさい、formのdisableを消すの忘れてただけだった ほんとうにごめんなさい
881 :
870 :2009/07/10(金) 17:44:29 ID:???
>>873 あ、うんうん、分かってる
リークパターンからは外れた質問だと書いておくべきでしたorz
もちろん
>>862 の例がリークパターンではないのも分かってます
obj が g の寿命まで残るのはどちらも同じで、
循環が DOM 経由だとさらにリークもするということですね
>>873 度々スマン、ちゃんと読んでなかったらしいorz
jQueryでメインページとiframe内ページがあって iframe内のページの読み込みが完了したら実行するように メインページにスクリプトを書きたいのですが、 <iframe id="myframe" 〜> のとき、 $("#myframe").ready(function(){ alert(フレーム内ページが呼び出されました); }); としたのですが、反応してくれません。 どのように記述すれば良いのでしょうか
readyは「枠」が準備完了した時点で発火してしまうはず。 確か、loadイベントだったかな。
document.getElementById("myframe").onload
886 :
Name_Not_Found :2009/07/12(日) 00:32:28 ID:izDE7vjW
分からないことがあります。もしよかったらアドバイスください。 var a = function(t){ this.flag = false; this.t.onmousedown = function(){this.flag=true;} this.t.onmouseup = function(){this.flag=false;} } var test = new a(document.getElementById("test")); このとき、onmousedownとonmouseupの各々でthis.flagが認識されません。 どのようにすれば要求する処理が実現されますでしょうか? よろしくお願いします。
メモリが何とか
this.t
仮変数にthisつけんなw
890 :
Name_Not_Found :2009/07/12(日) 01:35:23 ID:izDE7vjW
>>889 すみません。
コードを分かりやすくするために元のコードを多少省いて
板のですが、その際にミスがありました。
正しくは以下のコードです...
var a = function(target){
this.flag = false;
this.t = target;
this.t.onmousedown = function(){this.flag=true;}
this.t.onmouseup = function(){this.flag=false;}
}
>>887-888 もう少し詳しくアドバイスしてもらえませんか?
お手数をおかけしてすみません。よろしくお願いします。
var test = new a(document.getElementById("test"));
イベントハンドラは関数を直に呼ばれるから thisは無指定(グローバルオブジェクトであるwindow)になる var obj = this; this.t.onmousedown = function() { obj.flag = true; }; とかやっておけばよかったはず prototype.jsのFunction.prototype.bindあたりも参考にして
892 :
Name_Not_Found :2009/07/12(日) 02:10:21 ID:izDE7vjW
>>891 なるほど、双方においてthisのスコープが異なるんですね。
紹介していただいたprototype.jsを参考に、もう少しスコープについて
勉強したいと思います。
どうもありがとうございました。
ちょっとした興味なんだけど、 var f=function(){ this.hoge=function(){処理1}; }; f.prototype={ hoge:function(){処理2} }; この場合、(new f).hoge() は処理1になるけど、 (new f)から処理2を呼び出すことってできる?
894 :
Name_Not_Found :2009/07/12(日) 02:32:03 ID:izDE7vjW
多分無理じゃない? hogeを探す際にまずオブジェクト自身が持つプロパティから調べてしまうから。 次いで、prototype。 コーディングレベルでこの捜索順番は変更できないでしょ
(new f).constructor.prototype.hoge.call(this)
>>892 thisは関数実行時に定義されるために静的スコープで把握することが出来ない特殊な変数
普通の変数や、特に他言語のself等のように考えてるとハマりやすい
var foo = { name: "foo" };
foo.method = function method() { alert(this); };
foo.method() // this == foo
var callback = foo.method; callback(); // this == window
foo.method.call(callback); // this == foo.method
基本的には関数呼び出し式method()の直前のドット演算子がthisに設定される
それがないならグローバルオブジェクトが設定
Functionのcallやapplyを使うとthisの値の指定ができる
一見訳わかんない仕様に見えるけど、プロトタイプベースで関数はパーツとして共有するから
その関数という値にthisまで束縛されると却って使いにくいんだ
JavaScriptでゲームを作っています。 画像の切り替えをスムーズに行うにはページ読み込み時に、 必要な全ての画像をimgタグで読み込んでcssで隠しておいて、 必要なときにDHTMLで表示するといった感じであってますか? フォトアルバムのように逐一読み込む方式はゲームには向かないですよね?
898 :
Name_Not_Found :2009/07/14(火) 10:41:29 ID:iQUoCDPv
そもそもjavascriptがゲームに向かないっていうのは無し? Imageでもなんでもとにかくキャッシュに溜めればいい CSS Spriteテクニックを積極的に使うのも手 AVGならフォトアルバム的で問題ない、ただ次画像ぐらい先読みしてるんじゃない? つーか百聞は一見にしかずだから一度やってみな
>>898-899 レスありがとうございます。
>そもそもjavascriptがゲームに向かないっていうのは無し?
そこまで重い処理は入れないので大丈夫です。
細かいパーツに関してはCSS Spriteにしようと思っています。
>次画像ぐらい先読みしてるんじゃない?
もしよろしければこの手法に関して簡単な実現方法を教えていただけませんか?
次画像の先読みというのは考えてはみたのですがやり方がわからなくて・・・
だからnew Image()でも<img id="preload" style="display: none">でもご自由に 次画像?そんなもん配列作るかゲームスクリプト(シナリオ)に予約コマンドを書かせろ
900超えたのでテンプレ論議あれば今どうぞ。
1に、「HTMLが書ける者」ってあった方がいいんじゃねって話があったような気がする
904 :
Name_Not_Found :2009/07/14(火) 21:47:43 ID:iQUoCDPv
>>901 そういえば、いつもいつも
var img = document.createElement("img");
img.src = "foo/var/etc.png";
って書くのが面倒くさくて、myImageクラスを作ったのが、
JavaScriptにはまった始まりだったなあ。
(new Image()).src = "example/foo/foooooooo.jpg"
906 :
Name_Not_Found :2009/07/14(火) 22:47:51 ID:79iMDGQK
すいません。
>>899 で、百聞は一見にしかずだからとありますけど、
百聞は一見にしかずって何ですか。
>>906 それくらいググれよwwwwww
100回聞いて信じるより1回その目で見て信じろってこった
908 :
Name_Not_Found :2009/07/14(火) 22:53:58 ID:iQUoCDPv
>>907 そこまで相手するなよwww
優しすぐるw
(new Image()).src こういう書き方って他言語でもできるの? 昔どの言語だったか忘れたけど new Hoge().method()ってやってだめだったから あきらめたけどこうすればできたんだろうか JSと関係なくてスマン詳しい人さらりと教えて
>>910 できるよ、new Hoge().method()だと"Hoge().method()"をnewするからだめ
>>911 ダウト。JavaでもJavaScriptでも問題なくnew の方が先に実行されるだろ。
○new Hoge().method() ○(new Hoge).method() ×/△new Hoge.method()
914 :
Name_Not_Found :2009/07/15(水) 14:45:20 ID:+jc74H0s
ああ、普通に new Date().getTIme() って書くな。気分の問題で (new Date()).getTime() としたいのもわかる。
ま、二つ実行してみて同じ結果ならカッコ要らないって話じゃないすか?
その言語がなんなのかわからないとなんとも言えないって話だろうw
917 :
Name_Not_Found :2009/07/15(水) 20:16:29 ID:IXOtMprW
画面をクリックすると、その座標が表示されるJavascriptがあるとします。 次に、formのaction処理で別のページに移動した時、 前のページのどこをクリックしたのかわかるようにしたいのですが、 そのような事って出来るのでしょうか? (Javascriptの処理を持ち回り?するようなイメージです
919 :
Name_Not_Found :2009/07/15(水) 20:33:38 ID:IXOtMprW
920 :
Name_Not_Found :2009/07/15(水) 20:34:38 ID:E9it9HQ0
スレ違いな質問かもしれんが、 lightboxの半透明の黒背景をクロスブラウザで実現するjavascript+cssをライブラリなしで紹介しているサイトはありますか?
画像処理でいいじゃん半透過pngとかで それか真っ黒い背景にcss使って IEならfilter:Alpha(opacity=50) 他ブラウザならopacity:0.5とか
>>919 hiddenフィールドに座標を詰めて送信して、location.searchから取得
CGIならlocation.search使わなくてもやり方あるがな
オブジェクト自体をフォームで入れて次のページ渡す事って無理だよね?
924 :
Name_Not_Found :2009/07/16(木) 01:00:52 ID:ZEr8QoT3
関数でサブウィンドウの処理をまとめています。 サブウィンドウによっては、 親ウィンドウの操作にopenerを使ったりparentを使う場合があります。 window.opener.document window.parent.document と、二つ書いて分岐すればいいでしょうが、1つにする方法って無いでしょうか? 例えば、親ウィンドウがopenerで操作できるならopenerのソースにするとか
>>923 シリアライズ無しにっていうことなら無理
>>924 if (!window.opener)
window.opener = window.parent;
{,}省略するおとこの人って・・・
規約ある時ならもちろん従うけど、ないと混乱するほうがどうかしてる
別に、混乱する奴なんていないだろ? 呆れる奴は多いだろうけど。 過去の遺物を仕様としてそのまま残してるJavaScriptが悪いと言えば、それも間違ってはいないけど、 過去の遺物をいまだに平気で使う奴がいるのはそれとは別の話。 ここ数年、コーディングルールでコレを許可してる会社なんて見てないな。 個人的にも、今どき、必然性のない所でコレ使う奴は、字下げしない・字下げ混乱し過ぎな奴と 変わらないと思ってる。たとえ1行のサンプルコードであったとも。
心底どうでもいい
javascript専用のエディターで、なるべく 軽いのないですか? 今はeclipseを使っていますが、起動するまで 2分かかります。もっと5秒くらいで使えるのがほしいです。 しかも補完できるのでお願いします。
J-scripterで、.(ピリオド)を打っても、 補完メニューが自動でポップアップされないんだけど、 なんで? 設定はちゃんとしてあります。
あ、もしかして、.(ピリオド)を打って、 なおかつ、自分で手動で、 CTRL+SPACEを打たないとダメなんだ? やったら出た。
>>933 それってjavascriptのコードの補完できるの?
doc
って打ったら、
document
って出てくるとか、そういう意味です。
dabbrev
イベントの、onkeydownなんとか、って どのキーの押下でもいいのかなあ?
>>934 javascript-modeでTAB補完できる。
938 :
Name_Not_Found :2009/07/16(木) 16:33:58 ID:JZH9eWZM
スゲーの書いてもFxしかまともに動かん。orz 俺の技術にIEなどのbrowserがついてこれてないんだろうな。
アンタのクロスブラウザ技術がダメダメなだけ。
だいたいそういうときって空白が足りないとかすごい微妙なのが原因だったりするよね 1.5Kぐらい書いてFirefoxで動いて安心したところで IEで動かしたら構文エラーが出た時は泣きそうだった
ループ処理でエフェクト処理するときとかはブラウザ別にカウントスピード変えてる switch(browser){ case IE: ct=5; case Safari: ct=3; case Firefox: ct=1; } while(i<100){ i+=ct; } こういう処理方法でいいんだろうか
>>928 遺物と呼ぶからには明確なデメリットがあるんだろうけどそれは一体?
共同作業において使うべきじゃないのには同意する
>>941 前にループの一定箇所を通った時からの時間経過を基準にするのが安定すんじゃね?
>>941 ループ部分を関数に切り出してsetTimeoutで回すようにはできない?
もしその手の分岐をするなら
switch〜
function effect() {
while〜
}
といったように初期化時にパラメータを決めて使い回す
function effect() {
switch〜
while〜
}
と毎回判定するのは微妙
話掘り返すなら俺も便乗して
>>928 に突っ込んどく
コーディングルールで決まってるならまだしも、こんなとこで{}を省略するなんてのはどうでもいいこと
「行を追加したら条件から外れるからわかりにくくなる」とかの話ならなおさら
jQueryにコーディングルールがあるかどうかはわからんけど、あれはelseにも{}なかったよ。
メンテする側だったら{}付けといてもらいたいけど、わかりゃいいでしょ
>945 明確な「ファイルサイズ削減」という目的があってやってることを持ち出して 何が言いたいんだお前は? つか、あの状態のまま開発してると思うのか? カッコ付きでコーディングして、一括で不要カッコ取っ払って配布版作るだろ・・・
インデント崩れてる+{}省略コードはやばかった 脳内実行したときに完璧意味を取り違えた せめてインデントさえはっきりしてれば、{}が省略されてても読めるんだが
>>941 空ループで速度調節なんて冗談はやめてほしい。CPUの無駄なだけ。
setTimeoutに変換できない奴はまじJavaScriptの開発やめてホスイ。
>>946 jQueryのUncompressedって開発コードそのままじゃないのか?
あれはコードを読みたい人用にサイズ大きいのをわざわざ配布してるんだから、
わざわざ配布サイズを小さくするために括弧を消すとか目的違いなような。
ミスった {}外す前提だと、大して無い{}付けるメリットよりも外すときのコストのほうがでかくなるとしか思えない
次スレは975超えたら。
テンプレの変更は今回は
>>1 に次を追加、でいいかな。
一.正しい(validな)HTMLとは何か知っており書ける者
>>946 > 明確な「ファイルサイズ削減」という目的があってやってることを持ち出して
そうだよね。min.jsにした時に少しでも小さくなるようにっていう配慮もあると思うよ。
まぁ、だったらなおさら{}がないコードを見た時にそういう意図もあるって前提でレスすればいいと思う
見やすければいい
955 :
770 :2009/07/16(木) 20:26:06 ID:???
オレも{}があろうとなかろうとどうでもいいんだけど、見やすければどっちでもいい。 ただ社内ルールや脳内ルールでそうすべきってのがあるならそれに従うべきかな。
>>947 一年間くらいpython修行すればいいのですね
{}の話題は宗教論争だな…
958 :
Name_Not_Found :2009/07/17(金) 11:27:15 ID:BkwjRieC
json(jsonpなど派生系でもいいです)でデータベース構築するサンプル集的なサイトor書籍ってありますか? 雑誌の特集コーナーでも英語でも何でもいいです。 また、CGIやMySQLの連携などは無視しても構いません。 例えば、1000件程度のjsonデータがあって、 いくつかあるフォームで数値・文字列などの条件を入力すると結果が返り、 ブラウザに画面遷移なしに反映される。 という処理の内部構造でどう速度を出しているのか知りたいです。
JSONつーかアルゴリズムやデータ構造といったプログラミングの基礎(奥義とも言う)の範囲じゃね? サーチとソート、それとRDBの原理あたり知ってればだいたい何とかなるし 目的に即した手段や構造を選ばないと性能は出ないから一口に言えるものではない 部分一致だけはごり押ししかしようがないと思うけど
960 :
Name_Not_Found :2009/07/17(金) 15:39:37 ID:WQEyfa0i
Javascriptは高級言語ですか?
Brainfuckよりは高級
非実用的なジョーク言語は・・・
Grassという言語があってだな Hello world : wwvwwwWWWwwWwwWWWWwvwWWwwwWwwvwWwwwWwwvwWWwWWWWWwvwWWWwwwwWWWWwWWWWwWW WWWWwWWWWWWWwWWWWWWWwWWWWWWWWwWwwwwwwwwvwWWWwwwwwWWWWWwWWWWWwWWWWWWWwW WWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWwwwwwwWWWWWWwWWWWWWwWWWWWWWwWWWWWWWWWw WWWWWWWWWwWwwwwwwwvwWWWWWwwwwwwwWWWWWWWwWWWWWWWWwWWWWWWWWwWWWWWWWWWWwW WWWWWWWWWwWwwwwwwwvwWWWWWWWwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWwWWWWWW WWWWWwWwwwwwwvwWWWWWWWWwwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWWWwWWWWWWW WWWWwWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWwwwwwwwwwwWWWWWWWWWwWWWWWWWWWWwWW WWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwvwWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWwWWWWW WWWWWWwWWWWWWWWWWWWWwWwwwwwvwWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWwWWWWWW WWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWwWwwwwwwwvwWWWWW WWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwWwwWWW WWWWWWWWWWWWWWWWWwvwWWwwwwWWWwwwwwwwwwwWWWWwwwwwwwwwwWWWWWwwwwwwwwwwww wWWWWWWwwwwwwwWWWWWWWwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwvwWWWWWW WWWWWWWWWWwwwwwwwWwwvwWWWWwwwwwwwWWWWWwwwWWWWWWwwwwwwwWWWWWWWwwwwwwwwW WWWWWWWwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwwwwwvwWWwWWWWWw
開発者が自分の力を誇示するために作ってるオナヌー言語
966 :
Name_Not_Found :2009/07/18(土) 09:58:03 ID:rrF95Alb
<select name="hoge"> <option value="">--</option> <option value="1" selected="selected">1だよ</option> </select> という状態のプルダウンを、javascriptで操作して「--」を選択状態にしたいです <input type="hoge2" onChange="" /> このonChangeの中身はどうすべきでしょうか?
<input type="hoge2" ←これなに?はじめて見た。
968 :
Name_Not_Found :2009/07/18(土) 11:22:10 ID:rrF95Alb
まちがえた、、 name="hoge2" type="text" でした
>>968 ?そのhoge2がどうなると「---」が選択状態になるんだ?
?選択状態とはフォーカスされること?それとも「1」とかになること?
日本語が不自由な奴は皆の迷惑だから修行してから出直してほしい。
970 :
Name_Not_Found :2009/07/18(土) 12:02:39 ID:qB7mCyzq
>>966 element.selectedIndex = 0;
971 :
Name_Not_Found :2009/07/18(土) 12:04:07 ID:qB7mCyzq
>>969 日本語が不自由な奴は皆の迷惑だから修行してから出直してほしい
XHTMLなのにonChangeもヤバいな
HTMLはHTML、JavascriptはJavascript。 HTMLからJavascriptを分けろ
全部小文字じゃないとだめとかいいんだすんじゃね?w つうかくだらんことでケンカすんなや
Fx3.0+Firebug1.4.0でコンソール出した後にタブ切り替えると
リロードするまでコンソールからのDOMアクセスがおかしくなるんだな。
console.log(document);すら出ない。
>>976 XMLはcase-sensitiveだからXHTMLだとonchange≠onChange。
HTMLなら問題ない。
>>977 Web制作板のjavascriptでDOM切り離すのは無理というもの。
ム板にも関連スレあるからそっちでどうぞ。
>>978 application/xhtml+xmlで読み込んでみろ。動かないから。
HTML5のXML構文でtext/htmlは許されないから、似非XHTMLは全滅だぞ。
981 :
Name_Not_Found :2009/07/18(土) 16:56:13 ID:qB7mCyzq
>>977 俺もそう思ってたし、普段は
DOMツリーから要素を探して→ごにょごにょ
って書くけどレアケースとして、大量のinputやliに対してクリックしたら云々、
みたいなのを書くときは、HTMLにonclickで書いた方が速い、というか、
書かないとIEで使い物にならん、ときがあるので困る。
まあ、IEはXHTMLでもXMLでも内部でパースしたら全部大文字になるぐらいだから仕方ない
クロスブラウザかつクロスドメインでPOSTする方法はないでしょうか?
formからだといけるが
すいません。かなり言葉足らずでした。 やろうとしていることを説明するほうが分かりやすいと思うので、そっちを記述します。 1. GETにより他ドメインサイトのクッキー取得 →javascriptにより実行。画面遷移なし。 2. 1.で取得したクッキーを使用してPOST →こちらもjavascriptで実行。画面遷移なし。 以上です。
>>986 GreaseMonkeyならドメイン超えられるけど普通でやるなら無理ね
GreaseMonkeyヤバくない?
>>987 ,
>>988 レスありがとうございます。
よろしければ無理な理由も教えていただけないでしょうか?
たとえばAmazonのログイン情報が知らないうちに収集されてたら困るだろ
仕様よみました。特に問題は見つからなかったです。 つまり実装者が一般に普及させる目的でブラウザを実装する際、 cookieをばら撒けるような危ない代物だと話にならないということですかね。
嘘つけ どうせお前が読んだのは簡単なくっきーの使い方とかだろ
ドメイン制限書いてあんじゃん それとも自分が発行したcookieを自分で取得したいというだけの話なのか?
最初のgetと次のpostのドメインは一緒です。 一度目のgetでset-cookieにあるcookieを次のpostで使いたいという話です。
>1. GETにより他ドメインサイトのクッキー取得
日本語の読解力に難がある人は大変だなあ
まったくです
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。