+ JavaScript の質問用スレッド vol.67 +
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8) 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
【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"」としないとページ移動しちゃうから。
【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中でやるとか。
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
>>1 `・+。*・ (´・ω・`)
。*゚ 。☆―⊂、 つ
。*゚ : ヽ ⊃
`+。**゚**゚ ∪~
>>1 (・ω・`)乙 これはポニテがうんたらかんたら
10 :
Name_Not_Found :2008/10/11(土) 13:16:59 ID:mqs5DpPU
早速ですがCで言うところのexit()みたいな 実行を停止する関数や制御文のようなものはありますか? リファレンスでそれっぽいのを見付けられませんでした throw、return辺りが使えるのでしょうか if(!a) { statement } これを下みたいに書きたいのです if(a) exit statement
>>7 イタタタタタタタタタタタタタタタタタタタタタタ
>>10 if(a) return;
statement
ありがとうございます 一番上のブロック(?)でもreturnが使えるんですね
つかえないよ
設計から見直せ
グローバルスコープでreturnとか
どこに返るんだよっていう
釜山?
前スレ994です 994-995さんレスありがとうございました。
帰る家がない(´;ω;`)
21 :
10 :2008/10/12(日) 05:51:19 ID:???
使えませんでした…
ですがどうやらexitで終わるみたいです
IE、Firefoxで使えるならリファレンスにちゃんと書いといて欲しい…
>>15 分岐によってstatementの量が極端に違う場合少ない方を
ネストの深い方に入れてインデントを減らすコーディングは
設計と関係無いような…
エー、ちゃんと終わるの?構文エラーではなく?
23 :
10 :2008/10/12(日) 06:48:08 ID:???
returnだとスクリプト全体が実行されませんが exitだと実行されます 未定義関数や他の名前を書いても終わるのでエラーぽいです
24 :
10 :2008/10/12(日) 07:11:59 ID:???
ちなみに var t=new Date() var h=t.getHours() if(6<=h && h<18) exit document.write('<link rel="stylesheet" href="hoge.css" />') というコードを書きましたが6時前にはスタイルシートが適用され 6時以降は適用されなくなりました 今後の実装がどうなるかわからないので 趣味の範囲でなら未定義関数を終了と考えて良さそうです
25 :
10 :2008/10/12(日) 07:43:22 ID:???
エラーコンソール見たらexit is not definedて出てました 止めといた方が良さそうですねorz しかし終了できないプログラミング言語って 止まれない車と同じくらい危険な気が…
あほじゃないの。自分がやらせたい動作全体を1つの関数 にして最初にそれを1回呼び出すだけにしておけば、その中で returnを使えば終わりにできるでしょ。その程度の構造の 工夫もできないんじゃ向いてないよ。
28 :
10 :2008/10/12(日) 09:52:32 ID:???
アホなんでネストが何段にもなってるとこんがらがっちゃうんですよね 終わったことは早く忘れてしまいたいというか function hoge(){ if(b) return statements } if(a) hoge() みたいな書き方すれば1段で抑えられそうですね
29 :
10 :2008/10/12(日) 09:58:49 ID:???
>>27 頭悪いのはその通りですけど
一部の頭の良い人しか使えないプログラミング言語ってどうなんですか?
上り坂で減速するテクニックがあれば車にブレーキ要らないですか?
31 :
10 :2008/10/12(日) 10:58:52 ID:???
誘導ありがとうございます アホな初心者でもわかるようなことを偉そうに煽られたもんで つい反応してしまいました
window.moveBy() って IE専用?
<button onclick="aaa.value = '1'; submit();">osu</button> aaaはhidden項目のnameです。 firefoxだとエラーになってしまうのですが、firefoxに対応するにはどう書けばいいのでしょうか。
>>33 onclick="this.form.elements.aaa.value='1'; this.form.submit()"
何段にもなってこんがらがらせる方が悪いと思うが、 内側の関数から例外をthrowして最外側でその例外をcatchして 普通に終わるようにすれば機械的に変換できると思うな。
グローバルスコープにだらだら書き連ねるような幼稚な設計を見直せと言っているのに
prototype.js ってどうなの。jQueryと比べて
どうと言われてもな
斜め読みでも雰囲気は分かるはずだからまずは読めばいいよ
>>40 anonymous contentでぐぐって勉強すれば。
解答率低すぎて質問スレとして機能してねえw
prototype.jsはプログラムの書けない人が使うものですか?
はい
45 :
43 :2008/10/14(火) 16:58:39 ID:???
じゃ習うのやめます。やれ、やれとうるさい人がいるもので。 ありがとうございました。
そんなことねーよ
prototype.js と他のライブラリ(JSON.js)を併用していて問題が発生しました。 突き詰めると、eval を delete した後に eval を読み込むと Object の拡張が消えてしまうというものです。(FireFox2 でのみ再現) どなたか、原因や解決法にお心当たりはないでしょうか? 伝わり辛いと思いますので、以下にサンプルコードを付します。 Array について同様の拡張を行った場合には、この問題は起こりませんでした。 <html><body> <script language="JavaScript"> <!-- Object["newFunc"] = function(){}; alert(Object.newFunc); //* 正常に function(){} と表示される delete eval; alert(Object.newFunc); //* 正常に function(){} と表示される eval; alert(Object.newFunc); //* undefined と表示されてしまう (FF3, IE7 では正常に function(){} と表示される) alert(eval("1+2")); //* 正常に3と表示される //--> </script> </body></html>
なんでevalをdeleteする必要があるのか?
49 :
47 :2008/10/14(火) 22:02:00 ID:???
>>48 詳細は分からないのですが、どうやら
> safe and native code evaulation (ライブラリのコメントより抜粋)
を行うためのようです。
つまり、他のコードで eval が上書きされていると都合が悪いので、
一旦 eval をデリートすることで、eval の内容を剥ぎ取っているようです。
ちなみに、実際のライブラリのコードは以下のようになっています。
e=eval; //* 元々の eval を待避
delete eval;
if (typeof eval === "undefined")eval=e; //* ←ここで質問の内容の問題が起こる
f=eval(""+c);
eval=e; //* 退避した eval を元に戻す
return f;
(ホントはダメなんだろうけど、行数制限でライセンスコードは割愛.
MIT license の元で Copyright (C) 2007 Andrea Giammarchi - www.3site.eu 名義で公開されているコードです)
>>47 バグなんじゃね?
3で直ってるなら問題ないと思う
リロードしてなかった
52 :
47 :2008/10/14(火) 22:32:51 ID:???
>>50 こんな使われているソフトにもバグは有るんですね。
ちょっと意外です。(まだバグ確定ではないかも知れませんが)
>3で直ってるなら問題ない
普及度の高いブラウザには対応したいな〜と思ってましたが、
よくよく調べてみると、もうFireFox2のシェアって6%切ってるんですね。
なんとなくモヤモヤは残りますが、
ひとまず、現実的には乗り切れそうな気がしてきました。
ありがとうございます。
(他の皆様、もし更に具体的にご存知の事がありましたら、引き続きよろしくお願いします)
cookieというのはスタンダロンでも使えますか?自分用に使いたい のですが。よろしくお願いいたします。
>>53 他のブラウザは知らんけど、Firefox3ならデフォルトで、
/D:/foo/bar/
などとファイルが置かれているディレクトリがパスになりcookie登録/参照可能。
すいません。コードの中でJScript objectを指定するように、という エラーが出るのですがどんなことが考えられますか?ラインは当て にならなくてどの部分かよくわかりません。
58 :
56 :2008/10/16(木) 10:33:09 ID:???
>>57 さま
回答ありがとうございます。1を3回読んでみましたが解決しませんでした。
よろしくお願いします。
マジレスまがいのレスするからつけ上がるんだボケ
>>60 いつもの人をからかってるだけなんだからマジレスで水を差すなよ
>>56 そのエラーが出る最小限の例題を作って貼って。
作る能力がないならこのスレはあなたのためのものではない。
63 :
56 :2008/10/16(木) 12:13:00 ID:???
>>62 さん
親切なお答えありがとうございます。自分で見つけてやってみます。
少しはヒントなりいただけるかなと思ったのですが、残念です。
ダメだこりゃ 次いってみよー
>>63 とりあえずエラーが出る自分のコードをコピペして貼ったらいいよ。って
>>62 は言ってるのね。
口で説明してもよくわからないから。
エラーとは関係ない部分は削ってコード貼れば大抵誰かが教えてくれる
質問です。 function extend(sub, sup){ var F = function(){}; F.prototype = sup.prototype; sub.prototype = new F(); sub.prototype.constructor = sub; sub.superclass = sup.prototype; if(sup.prototype.constructor == Object.prototype.constructor){ sup.prototype.constructor = sup; } } これは継承のためのユーティリティ関数ですが、if文のところだけが理解できません。 そもそもこれは何をやっているのかがよく分からないのですが、 私の理解ですと、ある特殊な場合にスーパークラスのコンストラクタを自身に設定するということのようです。 この理解が正しいかは分からないです。 このif文の意味を教えてください。お願いいたします。
>>67 うーんたぶん。sup.prototypeにプロパティを設定するときに
function Sup() { ... }
Sup.prototype.method1 = ...; // (1)
Sup.prototype = { method1 : ... }; // (2)
(1)の方法なら自動的に Sup.prototype.constructor == Sup になるが、
(2)のようにオブジェクトを代入してしまうとその条件に当てはまりますね。
69 :
67 :2008/10/17(金) 04:06:43 ID:???
>>68 ありがとうございます。
デフォルトではfunction Foo(){}のように宣言したとき、
Foo.prototype.constructor==Foo
になるけど、Foo.prototypeにオブジェクトを代入してしまうと、
Foo.prototype.constructor==Object
になりますね確かに。
勉強になりました。
function Sup(){}
function Sub(){}
Sup.prototype = {
method1: function(){alert(10)},
};
extend(Sub,Sup);
var o = new Sub();
o.method1(); // 10
var p = new Sup();
alert(p.constructor == Sup); // true
extend内のif文がないと最後の行でfalseになりますね。
正規表現を使って、 xmlファイル中の<Url>http:〜〜</Url>のhttp:〜〜の部分を取り出して、 配列に格納したいのですが、以下の正規表現ではうまくいきません。 ご指摘お願いします。 var url_list = source.match(/<Url>(.+?)</Url>/g); ちなみに、変数sourceはString型で、そこにxmlが書かれています。
エスケープせなあかんとちゃいまっか。gもいらん。
72 :
70 :2008/10/17(金) 22:58:12 ID:???
ご指摘ありがとうございます エスケープってのは特定の文字を置換することですよね。 もう少し頑張ってみます。
エスケープってのは特別な意味を持つ文字を普通の文字として使うってこと タグ内の /(スラッシュ) をエスケープしてないから /<Url>(.+?)</Url>/ が /<Url>(.+?)</ で終わってる だから /<Url>(.+?)<\/Url>/ \を付けるとエスケープできる。ただこれじゃ望み通りの結果は得られんだろうけど。
サブマッチ使えばできるけど 折角XML形式になってるのに、何故DOMを使わないのかと XMLの意味がない
75 :
Name_Not_Found :2008/10/18(土) 14:28:26 ID:cTQJu4p+
【質問】 js内にある、多次元連想配列を、サーバー側に送る際の形式について 【状況】 Postで、送ろうと思っていますが、何も考えず送ってみた所、[object Object]となり、そっかオブジェクトだ…と困っています。 全然、解決策が見えないのです… どたなかお知恵を下さい よろしくお願い申し上げる;;
>>75 サーバ側でどう使いたいか不明だけど、とりあえず JSON 形式にエンコードしてみれば?
77 :
Name_Not_Found :2008/10/18(土) 14:42:43 ID:AF3+wTrX
>>76 >>77 なるほど。確かに文字列ですね。
XMLよりも、jsonに馴染んでるので、jsonにしてみます。
ライブラリも発見してみました。試してみます。
本当にありがとうございました
79 :
Name_Not_Found :2008/10/19(日) 22:22:47 ID:gRo9N6p6
'2ch.net'.match(/^2ch\.net$/) が null になるんだけど、何故か分かりますか? リテラルの中の.を\でエスケープしてる(つもり)部分が問題になってるんだけど、 エスケープの仕方が違うのでしょうか? '2ch.net'.match(/^2ch.net$/) だと2ch.netが返ってくるけど、 当然ながら'2chxnet'.match(/^2ch\.net$/) もマッチするんですよね。 お手元の環境で再現するかだけでも教えて頂けると嬉しいです。 当方macのFirefox3.0.3、safari3.1.2、Opera9.6でダメでした。
80 :
79 :2008/10/19(日) 22:26:18 ID:gRo9N6p6
>>79 > 当然ながら'2chxnet'.match(/^2ch\.net$/) もマッチするんですよね。
は
> 当然ながら'2chxnet'.match(/^2ch.net$/) もマッチするんですよね。
の間違いです。すいません。
>>79 Fx3.03では2ch.netにマッチする
バックスラッシュを入力したつもりがIMだかエディタだかの都合で円記号になってたりしないよな?
Fx2.0.0.17でも2ch.netにマッチしたよ
84 :
79 :2008/10/20(月) 00:27:45 ID:BoxSCXfb
>>82 流石にそれはないです。
みなさんありがとうございます。当然マッチしますよねぇ。
うーん、なんなんだろう。
85 :
79 :2008/10/20(月) 00:42:05 ID:BoxSCXfb
>>82 あぁ、すいません。どうやら円記号が原因だったみたいです。
こういう場合どうすればいいんでしょうか。
86 :
79 :2008/10/20(月) 01:04:25 ID:BoxSCXfb
option+¥(半角)キーで\ですね。MS以外のUnicode環境では気をつけないとダメですね。 皆さまありがとうございました。
87 :
Name_Not_Found :2008/10/20(月) 12:43:14 ID:8cRDKNUU
>>87 tooltip.jsをどこからもってきたのかよくわからないけど、
表示する位置はその中にべた書きしてあるから作者に要望出してみたら?
それか自分でxとかyをいじれば色々変えられるし
89 :
Name_Not_Found :2008/10/20(月) 13:27:02 ID:7Z5AQA80
>>86 逆じゃん?当方、Macで10年ちかくJS書いているけど、
普通にチルダの右のキー → バックスラッシュ
Opt + チルダの右のキー → Yen記号
だと思う。
>>87 なにがわからないのかを書かないと。
まるっと作ってほしいのなら手取り足取りスレへ。
90 :
87 :2008/10/20(月) 15:02:12 ID:???
>>88 ということは表示位置の変更はcssではなく、
.jsの方をいじる必要があるということですね?
>>89 表示位置変更のために、cssのpositionやtop、leftといった部分の値の変更
をしていたんですが、上手くいかず解決法も分からなかったので質問させて
いただきました。
誘導案内どうもです
tooltip.js内の51,52行目の y = mouseY(e) + 16; x = mouseX(e) - (ew / 4); を y = mouseY(e) + 35 - ew; x = mouseX(e); にしたらマウスの右上辺りにくるよ ただ、単に数値合わせただけだから windowWidthとかoffsetWidthとかの意味がなくなるけど
92 :
87 :2008/10/21(火) 15:47:57 ID:???
>>91 ありがとうございます!
やはり.js内のその辺が表示位置合わせに関連してくるのですね。
>>93 発言の真意が、
1. エフェクト不要
2. Flashを使え
のどちらかは知らんが、"適度"なエフェクトには価値があるだろ。
こんな軽い効果では、無効な環境では全く表示されないFlashよりも、
とりあえず画像は表示されるJavaScriptで実現した方が良いのは確かだし。
95 :
79 :2008/10/22(水) 02:11:01 ID:Wjx9Fs/I
>>89 すいません。10年やってる人に恐縮ですが、
ことえりだと環境設定で¥と\の使い分けが設定できるので、
逆とかじゃなくて設定の違いだと思いますよ。
jspでデータベースからデータを取ってきて格納した配列をjavascriptでも同じように変数として扱いたいのですがどうすればいいでしょうか? jspではtitleとhonbunは配列で <form name="form_title"> <input type="hidden" name=title value="<%= title %>" > </form> <form name="form_honbun"> <input type="hidden" name=honbun value="<%= honbun %>" > </form> このように名前をつけ、javascriptでは var taitoru[]= document.form_title.title.value; var honbun[]= document.form_honbun.honbun.value; このように変数に代入しています jsp側ではSPANでオンマウス時にjavascriptを呼び出し、javascriptでは文字が配列のhonbun[0]等をポップアップした枠の中で表示させるようにさせたいのですが 枠そのものがポップアップしません 上記のjavascriptでの変数への代入部分をコメントアウトすると、枠自体は表示されます 配列を丸ごとjavascriptで配列に代入できないのであれば、1データずつ引き継ぐという方法でもいいのですが、どのようにjavascript側で代入すればいいのでしょうか?
こういうサーバーサイドの言語での配列やオブジェクトを JSに直接渡そうとする質問が定期的に出てくる理由が分からない
全部同一人物だと思えばスルーしたくなってくるだろ?
99 :
Name_Not_Found :2008/10/22(水) 21:19:29 ID:gv4QIdNy
俺は全く問題なかった。 サンプルコピペで動かないなら動作環境ぐらい書けよ。
101 :
Name_Not_Found :2008/10/22(水) 21:47:24 ID:gv4QIdNy
PHPの中に書き込んでIEでプレビューしてます。 最初チェックはずれてるときは表示されてて、 一度チェック入れてはずすと消えます。 次チェックすると出てきます
>>99 >>1 どこが分からないのか説明できないなら手取り足取りスレへ
103 :
Name_Not_Found :2008/10/22(水) 22:37:11 ID:gv4QIdNy
了解です。 移動します。
104 :
Name_Not_Found :2008/10/22(水) 22:46:09 ID:gv4QIdNy
display:none; 付けるのを忘れていただけみたいです。 CSSのコピペを忘れていました。
コピペもできないってどういうことなの?プンプン
DOMchange的なイベントって搭載されているブラウザってどれですか? 例えばFirebugってドキュメントツリーが変わった時にそれが反映されて表示されますよね。 そういったことを自分のアプリでやりたいと考えてます。
ドキュメント読み込み完了後にスクリプトから!importantなスタイルを適用するにはどうしたらいいですか? ただし、あらかじめ用意したCSSファイルを適用するのではなくて、動的にCSSルールを生成して適用するものとします。 試しに、elem.style.background = '#ccc !important'; をボタンクリックで実行させたところ、Fx3では何も変化がありませんでした。
109 :
106 :2008/10/23(木) 18:47:30 ID:???
>>108 これは面白い方法ですね。確かにこれでいけそうです。ありがとうございます。
Firebugのソースざっと見てみたんですが、ちょっとすぐに分かりそうになかったので、また時間が出来た時に見てみます。
質問です。 1. XPathを使って、title属性を持つdivを抽出したいと思っていまして、今は //div[@title] という指定で抽出しているのですが、この表記は間違っているのでしょうか? 一応抽出できてはいるのですが、title="hoge"だとかそういった指定しか見かけなかったので… 2. href属性の中にURLが書いてあるとき、 そのURLのdomainを抽出する方法を教えてください。 document.domainで今見ているサイトのドメインはとってこれますが、 任意のURLのドメインを抽出することはできるのでしょうか? よろしくお願いします。
>>106 >>108 DOMNodeInserted、DOMSubtreeModifiedとか。Firefox限定だけど。
>>110 正規表現じゃだめ?
divにappendChild(p)して そのpの中にaを付け加えたいんですが どうやってpを取得すればいいですか? お願いします
113 :
Name_Not_Found :2008/10/24(金) 00:10:50 ID:Y49ehIFq
>>112 よく分からない質問だな。appendChild(p)するということは
そのpは変数とかに入っているんだよな。ということは今更
取得も何もないと思うが(変数に入ってないのならappendChild()
するときに入れればいいと思うし)。
なるほど aを持つpを作ってからそれをappendChildすればいいんですね ありがとうございます
逆でもいい
ExplorerCanvas(excanvas.js) について質問です。 現在excanvasを使用してIE6へ描画処理をさせようと思っています。 このexcanvasを使用した描画処理について自分なりに調べてみたのですが、 以下の二点が分かりませんでした。 ・画面上に引ける線の種類は実線のみか? ・画面に文字を表示したいが、直接表示できないため、 canvasでは「画像で表示」、又は「div要素を絶対座標を使用して表示」となっていた。 これはexcanvasでも使用できるか? 線種は、折れ線グラフをcanvasに表示していたサイトがあり、 そこで水平補助線の線種を点線・破線・実線から選んでいました。 これはグラフで使用しているからこれらの線を引けるのであって、 実際にcanvasに描けるのは実線のみ、ということでよいのでしょうか? (できれば点線・破線が引きたいです) 文字表示ですが、現在のブラウザではcanvasの文字表示は対応していないようです。 この場合、canvasでは上記の「画像使用」、「div要素を座標表示」で代用できるらしいとなっていましたが、 これはcanvas同様excanvasで使用できるのでしょうか? (excanvasでの使用制限でひっかからないか?) よろしくお願いいたします。
>>111 正規表現を考えてみたところ、
サブドメインを判断するのが難しそうなのですが、
何か参考になるようなサイトはないでしょうか。
よろしくお願いします。
また、正規表現以外の方法でも構いませんので引き続きよろしくお願いします。
>>117 "正規表現" "URL抽出" に一致する日本語のページ 約 2,300 件中 1 - 10 件目 (0.09 秒)
答えを求めているように見えるけど、もう少し自分で調べような
URLじゃなくてドメイン抽出だろとつっこんでみるテスト
再帰処理について質問です。 ある文字列を1文字単位で並び替えて全ての組み合わせを生成するプログラムを途中まで作ったのですが詰まりました。 処理速度を最も軽くするにはどう書けばいいでしょうか? 生成する結果は1文字〜任意文字数の全ての組み合わせで、以下の順番で生成します。 あ い う ああ あい あう いあ ・・・・・ あああ ああい ああう あいあ ・・・・・
121 :
120 :2008/10/24(金) 18:16:19 ID:???
<html> <head><script language="JavaScript"><!-- var txtData = 'あいう'; //任意文字列 var n = 2; //任意文字数 var t = txtData.length; var k = 0; var txtArr = txtData.split(''); var list=new Array(); function test(i){ if( i<n ){ if( i>0 ){ var txt = txtArr[k]; k=k+1; }else{ var txt = ''; } for( var j=0; j<t; j++ ){ list.push( txt + txtArr[j] ); } if( i>0 && k<t ){ test(i); }else{ k=0; test(i+1); } } return list; } //--></script></head> <body onLoad="document.body.innerHTML=test(0).join('<br>');"> </body> </html>
気軽に「最も」とかいうなよ
もっともだ
(ht|f)tp(s)?:\/\/([\w-~\.]+?)\/
125 :
120 :2008/10/24(金) 19:51:52 ID:???
>>122 ご自分の感覚でかまいませんので、
よろしくお願いします。m(_ _)m
JSでやる以上再起処理という時点で「最も軽い」という要件を満たさない気がする
再帰なんて要らんだろそもそも。ホレ。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> </head><body> <pre><script type="text/javascript"> function gen(txt, n) { var l = 0, a = ['']; while(l <= n) { var b = []; for(var i = 0; i < a.length; ++i) { for(var j = 0; j < txt.length; ++j) { var s = b[b.length] = a[i] + txt.charAt(j); document.writeln(s); } } a = b; ++l; } } gen('あいう', 8); </script></pre> </body></html>
appendChild('a')だと、親要素の中にaを追加できますが 中ではなくて、親要素の直後に追加したい場合はどのようにすれば良いのでしょうか
nextSibling insertBefore
>>127 JSは関数呼び出しのコストが高くつくから速度が必要なときに再帰でやるのは悪手という常識
JS、板違い ここはJavaScript
135 :
Name_Not_Found :2008/10/25(土) 00:22:31 ID:4ixLRwLT
ボタンを押すと、特定の画像の現在の座標を取得できるような方法を教えてください
特定の画像のオフセット + その親要素のオフセット + その親要素の… と遡って全部足せばいい。
>>136 それだとブラウザのバグ絡みで不味くなかったっけか
ブラウザによってダメなのがわけわからない
139 :
120 :2008/10/25(土) 03:38:12 ID:???
>>130 レスありがとうございます。
繰り返しを使った方法は知っていましたが再帰の勉強中でして、
できれば再帰を使った方法をお願いしたいです。m(_ _)m
140 :
120 :2008/10/25(土) 03:39:54 ID:???
>>127 ,129,140
>>126 はJavaScriptで再帰処理すると速度的に不利になるよと言ってるんだよ
142 :
120 :2008/10/25(土) 05:05:54 ID:???
>>141 今は他言語との比較を問題にしている訳ではないのだが?
>>142 頭のめぐりが悪そうなので丁寧に書いてやろう
JavaScriptの再帰はループに比べて遅いので速度がほしいときはループで書け
他言語との比較とか誰も問題にしてねえよカス
再帰処理の勉強がしたいだけなので、パフォーマンスは関係ないって話じゃないのか。
処理速度を最も軽くするにはどう書けばいいでしょうか?
>>139 アンタが指定した順番(幅優先順)は再帰と相性が悪い。わざわざ適して
ない問題に再帰を使おうとするというのはセンスを疑うけどね。
しかしなぜ皆ごたくばかりでコード書かいてみせない?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
var out = [];
function gen(cur, txt, m, n) {
if(!out[m]) out[m] = [];
for(var i = 0; i < txt.length; ++i) {
var s = cur + txt.charAt(i); out[m].push(s);
if(m < n) gen(s, txt, m+1, n);
}
}
gen('', 'あいう', 0, 7);
for(var i = 0; i < 7; ++i)
for(var j = 0; j < out[i].length; ++j) document.writeln(out[i][j]);
</script></pre>
</body></html>
宿題じゃね?
画像ビューアーを作っています Imageオブジェクトについて質問です window.onload = function (){ url="C:\\test.txt"; url="C:\\test.jpg"; objnowimage = new Image();add_log("imageオブジェクト作成"); objnowimage.src=url;add_log("url設定"); log.src=objnowimage.src;add_log("url表示"); objnowimage.onload=function(){add_log("onload");}; objnowimage.onerror=function(){add_log("onerror");}; } function add_log(msg){ info.value=msg+"\n"+info.value } このサンプルの二つのurlのファイルはどちらも0バイトの空ファイルです url="C:\\test.jpg";の時はちゃんとadd_log("onerror");が返ってくるのに、url="C:\\test.txt";の時はonload、onerrorどちらも返ってきませんので 画像でないファイルの時に完全に止まってしまうので困っています javascrptで、そのファイルが有効な画像ファイルかを調べるを教えて下さい 環境はvista+IE7です サンプルコードには書いてませんが、completeプロパティも最後までfalseで役に立ちませんでした
質問ですが、次の上がtrueで下がfalseになる理由は何ですか? 両方ともオブジェクトなので参照型なので同じ扱いになるのではないんでしょうか? function f(){ var r = /a/; return r; } var x = f(), y = f(); alert(x == y); // true function g(){ var o = {x:2}; return o; } var x = g(), y = g(); alert(x == y); // false
>>150 正規表現リテラルはオブジェクトを1つだけ作ってあとはそれを
使いまわす。オブジェクトリテラル(ではなく正式にはオブジェクト
式)はそこを実行するたびに新しいオブジェクトを生成する(だから
リテラルではないわけだ)。
>>149 >objnowimage.src=url
これは一番最後にしたら?
>>152 一番最後にすると、何故かobjnowimage.onerror=function(){add_log("onerror");};
}が作動してしまいました
onloadは作動しなかったのに
そのほかアレコレ順番を変えてみましたが、結果は変らずでした
154 :
150 :2008/10/25(土) 13:17:51 ID:???
>>151 なるほど!
var o = {x:2}
は
var o = new Object();
o.x = 2;
の簡易表現と考えたらいいんですね。
一方
var r = /a/;
は、
var r = new RegExp('a');
とは違うので、>150のfをこれで書き換えると
function f(){
var r = new RegExp('a');
return r;
}
var x = f(), y = f();
alert(x == y); // trueでなくfalse!
となりますね。
ありがとうございます。
>>151 function f(p) {
var r = /a/;
r.p = p;
return r;
}
var x = f("a"), y = f("b");
alert( x.p );
alert( x == y );
こういう風にしたらブラウザで結果が割れたんだがECMA的には後者が正しいんでしょうか?
IE6, Safari3
x.p: "a"
x == y: false
Fx3, Opera9.5, GC0.2
x.p: "b"
x == y: true
>>153 onerrorが作動するのは正しい動きじゃないの?
質問です。メンバが見つかりませんと出るのですがど ういう原因が考えられますか。IE6-SP2を使用です。
ハア???
これはまた・・・・レベルの高い質問だな
メール欄
>>143 文盲乙
釣りじゃなければレスをもう一度見ろやカス
>>161 ありがとうございます。
>走査時に RegExp オブジェクトに変換される
>プログラムまた関数の評価の開始前に生成される
>それは新規オブジェクト生成はしない
この部分を解釈するとやっぱりそうなるんですかね。
しかし解り難い・・・
>>162 おいおい、いまさら「再帰を使った方法をお願いしたい」まで巻き戻すのかよ
昨日の今日で何が「いまさら」だよw
負け惜しみ乙www
ところで、
>>130 と
>>147 の所要時間を計測してみたんだけど、
手元のノートPCのFxで 2400msec .vs. 340msec と再帰版が
圧倒的に速かった。もちろん出力まで含めての時間ね。
再帰が遅いとかわめいてた人たち、
>>147 より速いの書いてみて
くんないかな。無駄口を叩き合うより優れたコードで競う方が
有意義でしょ?
いやだから、
>>130 と
>>147 の作者なんだけど。
まあ2ちゃんだから信用しないというのなら勝手だが。
負けるなホレ氏。
それで
>>130 と
>>147 の作者だけど、もう1つ書いてみた。
でもこれも1000msec と再帰版より遅い。やっぱ再帰版が最強なんでは?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function gen2(a, n) {
var m = a.length, limit = Math.pow(m, n);
for(var i = 0; i < limit; ++i) {
var x = i, s = '';
for(var k = 0; k < n; ++k) {
s = a[x % m] + s; x = Math.floor(x / m);
}
document.writeln(s);
}
}
var t1 = new Date().getTime();
for(var j = 1; j <= 8; ++j) gen2(['あ','い','う'], j);
var t2 = new Date().getTime();
document.writeln(t2 - t1);
</script></pre>
</body></html>
それで
>>130 と
>>147 と
>>172 の作者だけどもう1つ書いた。
これも780msec と再帰版より遅いね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
function gen3(a, n) {
var m = a.length, limit = (Math.pow(m, n+1)-1)/(m-1);
var out = [''], p = 0, q = 1;
while(q < limit) {
for(var i = 0; i < m; ++i) out[q++] = out[p] + a[i];
++p;
}
return out;
}
var t1 = new Date().getTime();
var a = gen3(['あ','い','う'], 8);
for(var i = 1; i < a.length; ++i) document.writeln(a[i]);
var t2 = new Date().getTime();
document.writeln(t2 - t1);
</script></pre>
</body></html>
174 :
nanasi :2008/10/26(日) 01:57:49 ID:EVWZmOp/
JavaScript がオフになっているかどうかはどうすればわかりますか?
<noscript>JavaScriptがオフだよ お兄ちゃん!</noscript>
<div class="hoge"> <h2 class="header">Example<h2> <div class="script"> <script type="text/javascript"> (function () { あんなことこんなこと })(); </script> </div></div> ↑こういう構造で、下の無名関数から<h2>タグをstyle="display:none;"にすることは可能でしょうか? div.hogeが閉じる前だから無理なような気もするし、 h2.headerはすでに閉じてるから可能のハズって気もするんですが。 可能ならどうやればいいんでしょうか? ご教示お願いします。
(function () { document.getElementsByTagName("h2")[0].style.display = "none"; })(); h2 は閉じてるから問題ない
>>177-178 こんな時間に即レスありがとう。
html内のh2タグの数が不確定なんで
>>177 のままでは無理だったけど、
>>178 も参考にして、↓にしたらうまくいきました!
(function () {
document.getElementsByTagName("h2")[document.getElementsByTagName("h2").length - 1].style.display = "none";
})();
1,2,3,4,5,...とあるボタンを、Allというボタンを押すと順番に全てを押すような動きをさせたいのですが、どうしたらいいでしょうか
>>180 Allのときに1,2,3,4,5への呼び出しメッセージを送る。
多分順番に届く。
IEでのマウス座標の取得関数についてなんですが、
(A) DHTMLクックブックではleftの部分だけ取り出すと、
coords.left = e.clientX + document.body.scrollLeft - document.body.clientLeft;
if(document.body.parentElement && document.body.parentElement.clientLeft){
var bodyParent = document.body.parentElement;
coords.left += bodyParent.scrollLeft - bodyParent.clientLeft;
}
(B) 一方、JavaScript Cursor Position
http://hartshorne.ca/2006/01/23/javascript_cursor_position/ では、
cursor.x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
となっています。
どちらが正しいですか?(私はどちらも間違いだと思いますが、長くなるのでとりあえず根拠は省いて皆さんの意見を待ちたいと思います)
ポイントとして、
・e.clientXはクライアント領域の座標値なので、コンテンツのスクロール値を足すことで、ページ内の座標に変換する必要があります(基本)
・スクロール値は、standard modeの時は、document.documentElement.scrollLeftで、quirks modeの時は、document.body.scrollLeftです。
・ここまでは、(A)(B)とも同じです。違っているのはclientLeftを引くことによる微調整の部分です。
(A)は、document.body.clientLeftとdocument.documentElement.clientLeftを引いています。
それに対して、(B)はdocument.documentElement.clientLeftだけを引いています。
・当たり前のことですが、document.body.parentElementとdocument.documentElementは同じです。
細かな点として、
・document.body.clientLeftはbody要素のleft-borderです。
element.clientLeft - MDC
https://developer.mozilla.org/Ja/DOM/Element.clientLeft ・(B)によるとstandard modeのIEではクライアント領域の右上端が(2,2)になるような座標系でe.clientXを測っていることを発見したとのこと。
これは、document.documentElement.clientLeftがstandard modeの時に2になるのと符合します。
・また、Windows環境でウィンドウを最大化した場合には、IEに限らず右上端が(2,2)になります。ただし、Operaでは右上端が(0,0)です
183 :
182 :2008/10/26(日) 10:50:05 ID:???
半ば自己解決したので、報告します。Bが正解に近いという結論です。 これは何を持って正しい座標系とするかの問題なので答えなど存在しないとも言えそうです。 以下の考察では簡単のためスクロールは無いものとします。また、動作の確認にはIE7を使用しました。 ●座標系を5つ定義します。 (1) (B) e.clientX - document.documentElement.clientLeftをx座標値とし、y座標値も同様に計算する座標系。この座標系で(x,y)の座標になる点をB:(x,y)のように書くことにします。以下同様。 (2) (A) e.clientX - document.documentElement.clientLeft - document.body.clientLeftをx座標値(ry A:(x,y) (3) position:absoluteでtop:0px: left:0px;な点を(0,0)とする座標系。 ab:(x,y) (4) e.clientX, e.clientYを座標値とする座標系。 cl:(x,y) (5) 右クリックでコンテンツの右クリックメニューが出る最も左上端を(0,0)とする座標系。 con:(x,y) ●standard modeでは、 ・cl:(2,2) = con:(2,2) = B:(0,0) = ab:(0,0) ・A:(0,0)はbodyのborderがある限り別の点。しかも何ら特徴のない点。 例えば、bodyのmargin-left-widthが10px, border-left-widthが20pxの時、A:(0,0)はbodyのボーダー内の点。 つまり、standard modeでは(A)のDHTMLクックブックの座標系は役に立ちません。 ●quirks modeでは、 ・cl:(0,0) = con:(0,0) = B:(0,0) ← bodyのborderの外辺であり、表示部の左上端。 ・ab:(0,0) = A:(0,0) ← bodyのborderの内辺 bodyのborderが0pxなら両者は同じ点になります。 ●以上のことから、「e.clientX, e.clientYの値からクライアント領域の左上端を(0,0)と見た座標系での値へと変換するには」、 Bの方法が適切だと考えられます。 Bの方法はやってることは簡単なことで、基本的にe.clientX/Yの値をそのまま使いますが、standard modeの時は2(document.documentElement.clientLeft/Topの値)を差し引いて補正します。
184 :
182 :2008/10/26(日) 10:57:07 ID:???
言い忘れてましたが、Windows環境ではウィンドウを最大化すると、standard modeで右上端がcl:(0,0)となります。 つまり、clientX/Yが2未満な領域に移動すると、コンテンツの右クリックメニューは出てこなくなります。 以上のように私は考えましたが、今回検索しまくったら、DHTMLクックブックの方法を結構見かけました。 bodyのborderはデフォルトでは0pxだし、あったとしても少ない値なのであまり問題が表面化しないとは思いますが、 (B)の方法のほうがタイピング量も少ないですし、より正しい方法であるように思いました。 何か私の見落としていた点や間違いがあれば補足お願いします。
>>185 clickハンドラ内でscrollByをsetInterval。
188 :
120 :2008/10/26(日) 15:41:12 ID:???
>>147 レスありがとうございます。
順番を無視すればより早くなるかもしれませんが、整頓して出力する方法を探していたもので。
適するかどうか以前に再帰をよく知らなかったので勉強になりました。
ありがとうございました。m(_ _)m
ちなみに、私のノートでも再帰を使ったほうが倍近く早いです。
これは繰り返し文を使うと遅くなるという事でしょうか。^^;
データバインドでソートできるテーブルで、セルに交互に背景色を付けて見やすくしたいのですが、 var elem = "TR"; window.onload = function() { if(document.getElementsByTagName) { var el = document.getElementsByTagName(elem); for(var i=0; i<el.length; i++) { if(el[i].childNodes[0].tagName != "TH" && el[i].parentNode.parentNode.className.indexOf("tbl") != -1) { if(i%2 == 1) { el[i].className = "on"; } else { el[i].className = "off"; } } } } } これでは初期状態では思い通りになっているものの、ソートをすると色が戻ってしまいます。 ソート後も色を維持できる方法があればご教授下さい。
>>187 おーありがとうございます
ぐぐったら出てきました
勉強してきます
191 :
Name_Not_Found :2008/10/26(日) 20:52:24 ID:iJZnswBP
>>191 <FORM>がないのに</FORM>があるじゃん
つうかここで質問するようなことじゃないだろ
193 :
191 :2008/10/26(日) 21:08:43 ID:iJZnswBP
すみません、そこは削除してしまいましたが実際はあります。 が、やはりここで聴くことじゃないですか?
>>193 >>1 一、自ら学んでJavaScriptコードを書く意思を持つ者
一、質問を分かる日本語できちんと説明できる者
最初の文面にCGIと出ているのでURLは開いていませんが、
HTMLまたはCGIの内容と思われるのでここではスレチと言う事になります。
195 :
191 :2008/10/26(日) 22:42:00 ID:iJZnswBP
>>194 そっか。そうですよね。すみませんでした。
レスありがとう御座いましたm(_ _)m
JSでMath.rint()はどう書けばいいの?
Math.round
>>196 見逃していました、ありがとうございます
CGIやSSIが使えないサーバーで、頻繁に更新するファイルを、
極一部の身内での利用に重宝しています
DOMノードの属性を全て取得するにはどうしたらいいですか? hasAttribute()で特定の属性を持つか判定したり、getAttribute()で特定の属性の値を取得できますが、 ノードの属性はDOMノードのプロパティから取得できるとは限らないので、for-inでは取得できません。
DontEnumが付いてるのは列挙できない (俺が知らないだけで抜け道はあるのかも) 列挙するためのライブラリとか読むとDontEnumがついてそうなメンバの名前を持っておいて、 それが存在するかどうか一つ一つ確かめているみたい
202 :
200 :2008/10/27(月) 09:22:26 ID:???
>>201 DontEnum属性がついてると列挙できないのは分かるんですが、
DOMノードの場合ですとそもそも属性がプロパティになっているとは限らないですよね。
例えばHTML DOMの場合は全てのHTML属性に対して、その属性名をキャメライズした名前のプロパティを持ちます。
しかし一般のXMLの場合は、全ての属性がプロパティから取得できるとは限りません。
そんな場合に全ての属性を取得するにはどうしたらいいでしょう?
>>202 element.attributesでNamedNodeMapが返ってくる
てかDOMの仕様書読め
204 :
200 :2008/10/27(月) 09:52:29 ID:???
>>203 ありがとうございます。これからは仕様書読むようにします。
javascript+cssでつまづいているのですが function ch(chsrc) { document.getElementById("zoom").src=chsrc; } <div class="bigImg"> <img src="photo/04.jpg" id="zoom" /> </div> <img src="photo/02.jpg" class="small" onClick="chsrc(this.src)" > <img src="photo/03.jpg" class="small" onClick="chsrc(this.src)" > 上記コードで#bigImgに対してfloat:leftを効かせると IE6(MultipleIE)で動作しなくなってしまいます。 float:leftを切ると実行できます。 仕方ないのでTableでレイアウトしたところ、 それでも無理でした。 CSSによってJavascriptの動作に制限がかかることが あるのでしょうか? わかる方がいらっしゃればヒントをお願い致します。
206 :
Name_Not_Found :2008/10/28(火) 16:37:30 ID:8Nu1VnzO
二日間ぶっ通しであれこれやっているのですが、らちがあかず質問します。 eucで書かれたサイトで別のページをXMLHttpRequestで読んで加工して出力したいのですが・・・、 その別のページというのは現状で手をつけること(XMLに変更するなど)はできません。 質問1. responseTextの内容をXMLのようにパースできるようなライブラリ等はないでしょうか? 質問2. 仮に上の質問でライブラリが無いとした場合、正規表現で処理しようと思うのですが、 eucの日本語にマッチしてくれません。 responseTextの中の日本語にマッチさせる方法まないでしょうか? IEオンリーの処理でかまいません。 ご存知の方、お知恵を拝借できますでしょうか?
>>205 通常のIE6では動作する。
ところで
class="bigImg"なのに
#bigImgに対してfloat:leftを指定しても意味はない。
function ch(chsrc)なのに
onClick="chsrc(this.src)"これでは動作するわけがない。
>>206 Document.loadXML()では駄目?
responseXML は空なのか
選択をキャンセルしたいんですが下記のように onchangeイベントでfalseを返しても変更前の 値に戻らないのですがonbeforechangeみたいなイベントは 無いものでしょうか? <select name="hoge" onchange="return changeHoge();"> <option value="hoge1">hoge1</option> <option value="hoge2">hoge2</option> <option value="hoge3">hoge3</option> </select>
211 :
Name_Not_Found :2008/10/28(火) 17:47:32 ID:8Nu1VnzO
206です。 208>> Document.loadXML()とは・・・なんでしょう? 209>> だめでした・・・。 中に何も入ってないです。 なにかいい方法がないでしょうか・・・。
>>211 昔ちょっと調べたことがあるけど、responceXMLは読込先のページのContent-TypeがXMLと判断できないと空になるみたいだね
別ページに手をつけられないとなると難しいな
responceTextをそのままalertかテキストファイルに書き出したら文字化けしてるんじゃないかな
読込先のcharset指定が無かったり異常だったりするとXMLHttpRequestはutf-8扱いしてしまうんで
読込先がeucやsjisで書かれていると文字化けしちゃう
その場合は文字コードをあわせてやらなきゃいけない
>>206 CGIを裏で動かしてプロキシにした方が解析もできるしいいと思うんだけど無理?
JavaScriptで解析とか重くなりそうだけど。
>>210 どういうこと?
changeHogeがどういうことする関数かわからないんだけど、
選択をキャンセルするどのタイミングでどうやると起こるわけ?
>>211 208も言ってるように普通loadXMLを使う。
>>210 onchangeは、変わってしまってから発生するイベントだからreturn falseしても無駄。
onchangeするたびに変わった値をpreviousValueという変数に格納すればいい。
215 :
Name_Not_Found :2008/10/28(火) 19:27:01 ID:8Nu1VnzO
211です。
>>214 なるほど・・・と思ってやってみたけどだめなんですよね・・・。
var domObj;
try{
if(window.ActiveXObject) {
try{
domObj =new ActiveXObject("Msxml2.DOMDocument");
}catch(e){
try{
domObj =new ActiveXObject("Msxml2.DOMDocument.3.0");
}catch(e2){
try{
domObj =new DOMDocument;
}catch(e3){}
}
}
}
else
domObj =null;
}catch(e4){}
if( !domObj ) return;
domObj.loadXML( targetContents );
alert( domObj.getElementsByTagName('table').length )
----------------------------------------------------------
出力:0
216 :
Name_Not_Found :2008/10/28(火) 19:52:23 ID:8Nu1VnzO
211です。 上のエラーメッセージは"テキストの内容に無効な文字が見つかりました" でした。 がっくし・・・。
217 :
Name_Not_Found :2008/10/28(火) 21:58:10 ID:XUCuP6no
いきなりですが、質問です。 たとえば2択のラジオボタンをJQueryのclone()を使って増やすと、FireFoxでは問題なく全て 別々のグループ(name=)で作られるのに、IE7だと全部同一グループとして扱われてしまいます。 ためしにクローン用のラジオボタンからname属性を消すと、IE7では選択不能な状態に。 どうもIE7ではname属性の書き換えができていない模様です。 似た症例が過去に無いでしょうか? 素直にCGI使った方が良いのだろうか?
>>217 意味不明。再現可能なミニマムコードを提示してくれ。
219 :
Name_Not_Found :2008/10/28(火) 22:10:49 ID:8Nu1VnzO
206,211です。
>>212 書き込み見落としていました。
なるほど、
やはり読込先に手を付けないとだめですか・・・。
まいったな、それができないんですよね・・・、
なんかいい方法ないかな・・・。
220 :
217 :2008/10/28(火) 22:27:52 ID:XUCuP6no
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script src="test.js" type="text/javascript"></script>
</head>
<body>
<div id="radiobase">
<input type="radio" id="radid1" name="rgrp" value="1"/>
<input type="radio" id="radid2" name="rgrp" value="2"/>
</div>
</body>
</html>
221 :
217 :2008/10/28(火) 22:28:12 ID:XUCuP6no
// test.js jQuery.noConflict(); var $ = jQuery; $(function(){ $(window).ready(function(){ for(var i=0; i<10; i++){ var aaa = $("#radiobase").clone().removeAttr("id"); aaa.find("#radid1").attr("name","rgrp"+i).removeAttr("id"); aaa.find("#radid2").attr("name","rgrp"+i).removeAttr("id"); $("#radiobase").before(aaa); } }); });
222 :
217 :2008/10/28(火) 22:29:15 ID:XUCuP6no
223 :
Name_Not_Found :2008/10/28(火) 22:32:30 ID:8Nu1VnzO
206,211,219です。
>>212 >読込先のcharset指定が無かったり異常だったりするとXMLHttpRequestはutf-8扱いしてしまうんで
>読込先がeucやsjisで書かれていると文字化けしちゃう
metaで指定しててもだめのようですね。
XMLHttpRequestはhttpヘッダの中のcontent-typeとcharsetで内容を判断してるみたいです。
現状httpヘッダにcharsetは吐かないようにしてるからutf-8と思ってるようです。
だめだこりゃ、あきらめました。
224 :
217 :2008/10/28(火) 22:39:52 ID:XUCuP6no
>>217 でname属性の書き換えができていない模様と書きましたが
DebugBarで確認したらしっかり書き変わってました。
もしかしてIE7の不具合?
226 :
217 :2008/10/28(火) 23:24:50 ID:XUCuP6no
>>225 ものすげー有益な情報、超サンクス!!!
やっぱりIEの不具合か、おかげで解決。
具体的には以下のコードで対応可能。
アホっぽいけど、複製じゃなくて生成しろってことだな・・・。
jQuery.noConflict();
var $ = jQuery;
$(function(){
$(window).ready(function(){
for(var i=0; i<10; i++){
$('<input type="radio" name="rgrp'+i+'"/>').attr('value',1).appendTo('body');
$('<input type="radio" name="rgrp'+i+'"/>').attr('value',2).appendTo('body');
$('<br />').appendTo('body');
}
});
});
227 :
Name_Not_Found :2008/10/28(火) 23:38:23 ID:DCyLLWdN
nicEditのいじりかたについて聞きたいのですがココでいいですか?
そんなもんわざわざいじるくらいなら HTMLタグ打ちを勉強した方が良いかと
229 :
Name_Not_Found :2008/10/29(水) 00:52:15 ID:xl6MBZyt
webアプリ作るためにも必要で・・ 「クエリ送信」の文字を置き換える方法が知りたいのですが
>webアプリ >webアプリ >webアプリ >webアプリ 勝手に改変して利用して、 自作ですって公開するのは著作権に抵触するよ 自分で一からJavascript学んで出直してきなさい
そろそろライブラリに関する質問をどうにかした方がいいと思う
「クエリ送信」て type="submit" のデフォルトの文字列のこと? nicEdit とも関係ないような
>>230 ちなみにNicEditはMITライセンス。
>自作ですって公開
ってのは明らかに真っ黒だけど、
元の著作権表示を行うなら勝手に改変して公開しても全く問題無し。
234 :
Name_Not_Found :2008/10/29(水) 07:45:28 ID:IWnl6Gf3
バブリング?やevent delegation?辺りのクロスブラウザ対応の質問になると思うのですが、
<div style="position:absolute;width:100px;height:100px;"><a href="
http://google.com ">button</a></div>
<div style="position:absolute;width:100px;height:100px;">A</div>
<div style="position:absolute;width:100px;height:100px;">B</div>
このように同じサイズのブロック要素でレイヤ構造を組んだときに、
IEは最背面ブロックの<A>のボタンの"utton"辺りはクリッカブル、
IE以外は最前面以外のレイヤーは完全に無反応という違いが出ますが、
IEの挙動をIE以外の環境で再現する方法論はありますでしょうか。
235 :
212 :2008/10/29(水) 11:39:13 ID:???
>>223 やっぱり文字化けしてるのかな
var Stream = new ActiveXObject("ADODB.Stream");
Stream.Open;
Stream.Type = 1;
Stream.Write(domObj.responseBody);
Stream.Position = 0;
Stream.Type = 2;
Stream.Charset = "euc-jp"; //別ページの文字コードがわからんから、適宜変更して
alert(Stream.ReadText);
responceTextじゃなくて
こんな感じでresponseBodyからエンコードしてやるといいんじゃないかな
どうしたアホ外人、出番だぞ
238 :
Name_Not_Found :2008/10/29(水) 15:47:48 ID:+jnOtkwV
質問です。 オンマウスでメニューツリーを表示したいのですが、 あるサイトを参考にして 親メニューは画像にして、オンマウスで違う画像に変え、 下に子メニューを持ってくるようにしました。 この親メニューを複数使いたいのですが、 どこを変えたらいいのかわからないです。 <SCRIPT type="text/javascript"><!-- function showMenu1(menu1,menu2){ document.getElementById(menu1).style.display = 'none'; document.getElementById(menu2).style.display = 'block'; } --></SCRIPT> <STYLE type="text/css"><!-- #M1A { display: block;} #M1B { display: none;} */--></STYLE> <DIV id="M1A" onMouseOver="showMenu1('M1A','M1B')"><img src="通常の画像"></DIV> <DIV id="M1B" onMouseOver="showMenu1('M1A','M1B')" onMouseOut="showMenu1('M1B','M1A')"><img src="オンマウスで表示の画像"> <DIV> <A href="">子メニュ1</A><BR> <A href="">子メニュ2</A> </DIV> </DIV> idの部分を変えるんだろうとは思うのですが、 アドバイスお願いします。
idと引数
240 :
Name_Not_Found :2008/10/29(水) 19:16:17 ID:bBMTwy3L
同じblogパーツが貼られているサイト間をリンクするタイプのblogパーツがありますが、 URL取得の仕組みがわかりません。 リファラーから取って来ているのか?? 大まかな仕組みを教えて頂けないでしょうか? Flashスレで聞く内容でしたらすみません。。。
スレチ
242 :
238 :2008/10/29(水) 20:55:02 ID:???
>>239 ありがとうございます。
引数というヒントで答えに辿りつけました。
感謝します。
すいません。objectタグのDOMなんですが <html> <head> <title></title> <script language="javascript" type="text/javascript"> function test(){ document.getElementById("box").data="2.PNG"; alert(document.getElementById("box").data); } </script> </head> <body> <input type="button" value="push" onclick="test()"/> <object id="box" data="1.PNG" width="200px" height="300px"> </body> </html> でボタンを押すとIE以外のブラウザではobjectで埋め込まれている 画像が変わります。(IEは変わりませんが、 alert警告では「2.PNG」と表示されます。) divとかでobjectを囲んで丸ごと入れ替えるという方法はうまくいったのですが IEでobject の埋め込みデータの中身だけを変える方法はないのでしょうか。 もしあったら教えてください。お願いします。 環境はXPSP3 の IE7 です
質問させてください。 onclick関数でHTMLのリンク要素のように他サイトに飛ばすことはできますでしょうか? できるのなら方法を教えていただけませんか?
onclick="location.href='URL'"
246 :
244 :2008/10/29(水) 23:54:24 ID:???
>>245 ありがとうございます!できました。
ただ、欲を言えば新しいウィンドウで開きたいのですが、
そのような方法はありますでしょうか?
小出しにすんな死ね
248 :
Name_Not_Found :2008/10/30(木) 00:17:20 ID:ef+iSf+5
それはギャグなのか
249 :
244 :2008/10/30(木) 01:30:22 ID:???
みなさんごめんなさい。
onclick="window.open('URL','new');"
でうまくいきました。
>>247 試してみるまで気づかなかったもので、すみません。
>>248 ギャグではないのですが、失礼しました。
250 :
Name_Not_Found :2008/10/30(木) 22:37:25 ID:Loz9bFuT
質問です。 var array = [['']]; という2次元配列の宣言の仕方をとあるサイトで見かけたのですが、 これを new Array を使用して宣言しなおすとすると、 どのような宣言の仕方になるのでしょうか? 「[['']]」の具体的な意味(内容)を知りたく思います。 よろしくご教示ください。
>>250 var array = new Array();
array[0] = new Array('');
252 :
250 :2008/10/31(金) 00:44:00 ID:???
>>251 レスありがとうございます。
なるほど、array[0]に対して、「''」(中身がない)配列を加える感じっぽいですね。
勉強になりました。
>>252 ナンカチガウナー。Arrayコンストラクタの引数の扱い方をシラベナー。
var array = new Array();
array[0] = new Array();
array[0][0] = '';
>>253 別に間違ってない。
Array コンストラクタの引数が 1 つの場合、
それが数値の時はその長さの配列が作られるが、数値じゃない場合は最初の要素がその値になる。
結果として >250 も >251 も >253 も
var array = new Array(new Array(''));
もやってることは同じ。調べてみな。
>>254 いやこの辺が違うなって言ったの
> 「''」(中身がない)配列
’’ というのは空文字列の実体なので new string() と同等の意味になるでしょ。 new string() と new Array('') が等価なのかな? え?string()なんてない? おじゃましました。
無知もここまでくると気持ち悪いな
var array = [['']]; → var array = new Array(['']); → var array = new Array(new Array('')); new Array(...)と[...]が違う結果になるのは ... の部分が 1個の整数のときだけだが、上の場合はいずれも該当しないから。 しかし個人的には [['']] の方が簡潔で見やすいと思うけどね。
259 :
Name_Not_Found :2008/10/31(金) 09:21:43 ID:olHAtU/2
206,211,219,223です。
>>235 返事がおくれました。
ADODB.StreamはIE7ではだめだそうです。
やはり無理か・・・と、思った矢先、
友達に相談したら希望の光が、
時間がなくまだ試していないのですが、
読み込み元に空のdivを作り、そのinnnerHTMLに
responseTextをぶちこむ、で自分をパースする。
うまくいったら書き込みます。
それでも化ける気がする iframe.src と並んで最後の手段だね
anything from here offsetLeft,offsetTop,offsetWidthそしてoffsetHeight──静的配置要素の絶対位置を確実に取得する方法について
http://hkom.blog1.fc2.com/blog-entry-503.html offsetTop/offsetLeft/offsetParentの闇 - Backstage of theater.js
http://d.hatena.ne.jp/susie-t/20061004/1159942798 Positionオブジェクトの枠線幅問題対策 - Backstage of theater.js
http://d.hatena.ne.jp/susie-t/20070218/1171760841 を読んでJavaScriptでの位置指定をクロスブラウザに完全に行うことが極めて困難だと知り、
ここ二年ばかりは熱心にJavaScriptにハマってましたが、ちょっと幻滅してしまいました。
ここに書かれている対策(table内の要素では位置指定を使わない、body要素でのborder, marginの計算を考慮に入れて
offsetParentsを足し込む、など)をすればうまく動くようですが、
どうも釈然としないものがあります。
・知人は位置指定にこだわるならJavaScriptでなくフラッシュを使うべきと言ってましたが、果たしてそうなんでしょうか?
そんなに位置指定の正確さってJavaScriptにおいて問題になりうるものなんでしょうか?(問題になるケースとしてどんなものがありますか?)
・例えば、矩形範囲のHTML要素を取得するのに、出来れば2px以内に誤差を抑えたいですよね。
しかし、上のリンク先を見る限りではtable要素内の要素の位置を正確に取得するのは限りなく困難です。
だから、JavaScriptで矩形範囲のHTML要素を取得しようとするのは無謀だというふうに考察したんですが、どのように思われますか?
・JavaScriptの闇というべき致命的欠点って他にありますか?
262 :
261 :2008/11/01(土) 12:08:42 ID:???
すみません、
>>260 の位置指定は、全部「絶対位置取得」の間違いでした。
JavaScriptの問題じゃなくてブラウザの実装の問題じゃないか
CSS
265 :
261 :2008/11/01(土) 17:20:09 ID:???
>>263 ブラウザの実装の問題として質問しました。深刻な問題ではないでしょうか?
>>265 >>263 は「JavaScript言語の実装の問題ではなく、
DOMなど(JavaScript言語仕様では規定されていない)
オブジェクトモデルの実装の問題だ」といいたかったと思うの。
で、闇だ何だと大げさに騒ぎ立ててるけど、あなたの作ってるページは
枠線の幅が2pxを越えるテーブルが大量にネストしてたりするのかな?
昔懐かしのテーブルレイアウト全開でやってるならともかく、
そうでないならたとえテーブル利用時に正しく位置取得できなくても
そこまで大きな誤差が出ることはほとんどないのでは?
267 :
261 :2008/11/01(土) 18:24:30 ID:???
>>266 DOM実装の問題だという件、理解しました。
さて、闇が何を指すかを正確に理解していただかないとコミュニケーションが成立しない(闇だ闇じゃないだの不毛な平行線上の言い合いになる)ので、
事実を確認します。
http://d.hatena.ne.jp/susie-t/20061004/1159942798#200610041723 によれば、テーブル内の要素のoffsetParent, offsetLeft/Topは、ブラウザによって大きく異なります。
枠線が2pxを超えるか否かといったレベルの問題ではなく、そもそも何がoffsetParentになるかというのがブラウザによって違います。
例えば、Firefoxではposition:relative;なtd要素内のposition:absolute;は
body要素がoffsetParentになるけど、IEではtd要素がoffsetParentになります。
これは場合によっては、100px以上の誤差が発生しうることを意味します。
正確な位置取得は、矩形範囲のhtml要素を取得する関数を作る際には深刻なのではないかと考えました。
これは例えば、LDRizeのような事をするために表示領域内のhtml要素を取得する
必要がある時には便利な関数と思われますが、正確に位置を取得する必要があります。
>>267 ブラウザ間の実装が異なるならブラウザを判別するコードを使って実装の違いを吸収すればいいわけで
実際にそれぞれのブラウザの挙動の違いは詳しく分かっているわけだしそれを考慮したコードは書けるよね
CSSとかと違ってJavascriptはブラウザ毎に違うコードを実行するなんてことが簡単にできるからそんなに問題にはならないかと
269 :
261 :2008/11/01(土) 18:47:15 ID:???
>>268 ブラウザテストすればいいということですね。
しかし、
>>267 のような特例が無数にあることが問題です。
リンク先に出ているものだけで10個ありますが、この記事の筆者はこの途方もなく複雑な挙動に
「闇」を感じて以降調査を打ち止めにしたようです。
ということは、他にもたくさんある可能性があります。
それだけでなく、この記事が書かれたのが2006年なので、最新版では挙動が異なっている可能性もあります。
もし、矩形範囲のhtml要素を取得したいような場合に、自力であれこれ各ブラウザの挙動をテストして、
クロスブラウザなコードを書くのは極めて困難だと思いませんか?
>>269 お前はただ同意を求めてるだけなのか?
なら、困難だと思うよ。これで満足か?
271 :
261 :2008/11/01(土) 19:06:56 ID:???
>>269 すみません。問題点を明確にするために自分の意見を述べすぎました。
そのせいで、あらぬ誤解を生んだようです。
質問は
>>261 にあります。これについての回答を期待しています。
そもそも質問の意図がわからん 何がしたくて要素の絶対位置を取得したいのかで答えは変わってくる 用途によってはJSよりFlashを使った方が良いだろうし 全てのHTML&CSSに対して適用できるような手法が必要なのはライブラリを作って公開しようとしてる場合ぐらいではないかと
位置指定というか、px 単位での調整が必要ってどんな処理だ? JavaScript のアウトプットって DOM が中心だから、 ブラウザの画面内で位置調整を行う方法って CSS に頼るしかない。 JS 側はクラスや ID や要素を指定した DOM を弄って、予め作った CSS に適用させる感じ。 もちろん、CSS に対応しているかどうか、 CSS がどんな描画されるかなどは実装依存(てか相当バグがある)だが、それは CSS の問題。 HTML を描画できるだけじゃ嫌、ピクセル単位で画面を調整したいってのは、それこそ Flash を使えばいい。 ただし言語仕様を Adobe が握ることになるので、 VerUp の度に拡張の嵐の憂き目に遭うだろうね。
274 :
261 :2008/11/01(土) 20:02:33 ID:???
>>272 確かに漠然とした質問でした。私自身問題を正確に理解できていないのもあります。
>全てのHTML&CSSに対して適用できるような手法が必要なのはライブラリを作って公開しようとしてる場合ぐらいではないかと
Webサイトやクライアントサイドのツールを自分が作るためのライブラリを作ろうとしています。
確かに、ユースケースを限定すれば、それほど深刻な問題ではなくなるのかもしれません。
>>273 >位置指定というか、px 単位での調整が必要ってどんな処理だ?
それを経験豊富な先輩方におたずねしたかったのです。
>CSS がどんな描画されるかなどは実装依存(てか相当バグがある)だが、それは CSS の問題
いや、offsetParentやoffsetLeftが何を指すかというのは、CSSの問題ではないと思います。
例えば、offsetLeftがoffsetParentのborderの外辺までの距離を指す場合もあるし、borderの内辺までの距離を指す場合もあります。
offsetLeftは、CSSのプロパティではないので、クライアントサイドJSをどのように実装するかという問題ですよね。
>ピクセル単位で画面を調整したいってのは、それこそ Flash を使えばいい。
やはり、JSでは困難なんでしょうか?
私の理解では、矩形範囲のhtml要素を取得することはFlashに出来ないですよね。
FlashはFlashの中のモノにしかアクセス出来ないので。
これが制約にはなりますが、フルFlashのサイトにするなどして回避はできそうです。
ただ、ldrizeのようなクライアントサイドツールを作る場合には、ほとんどJSしか選択肢がないですよね。
ldrizeはコードを見ると雑な処理で妥協しているところがあって、実際、挙動がおかしいことが多々あります。
ですが、長く使っているうちに、「これが仕様なのかな」と納得してしまいました。
あまりWebで位置取得の話題が深刻なテーマとして出てこないところを見ると、皆さん妥協してらっしゃるのかなと思いました。
しかし、正確な位置取得のライブラリがあっても良さそうなものですが、見かけません。
何がご存じのものがあれば教えて下さい。>all
オレの自前ライブラリの GetAbsPosSeikaku() が火を噴く時が来たようだ。
位置指定にこだわってるのは >261 なのに実例を出せと言ったら「こっちが訊いている」ってアホかよ
リンクにカーソルを載せたときにリンクと被らないようdivをポップアップウインドウ風に表示する、なんて場合に問題になるかもしれない
278 :
261 :2008/11/02(日) 00:33:07 ID:???
>>276 すみません、私が想定している実例を出せという意味でしたか。
であれば、矩形範囲のhtml要素の取得が実例です。
これが本当に実例になっているかは実体験が無いので分かりません。
なので、JavaScriptでpx単位の正確さを要求されるような例ってどんなのがありますかと
>>261 の最初の質問で聞きました。
てっきり、
>>273 は本当に実例になっているものを出せという質問かと思ってしまいました。
私はかねてから矩形範囲のhtml要素取得などのために、位置を扱うライブラリ作成を予定していました。
だから、位置取得にこだわっていますが、
>>261 のリンク先を読んで絶望してしまいました。
当初の予定では、まず位置を扱うライブラリを作成してから、さまざまな実例を試して、
矩形範囲のhtml要素取得もpx単位の厳密さを要するものなのかも実体験として把握するつもりでした。
しかし、ライブラリ作成の意欲を無くしてしまったので、まだpx単位の厳密さを要する実例を
実体験として検証出来ないでいる段階です。
そこで、
>>261 では、私のイメージ上では矩形範囲のhtml要素取得がpx単位の厳密さを要する実例になっている
と思うのですが、実体験としてそうした厳密さを要する実例を先輩方にお尋ねしました。
>>277 ありがとうございます。確かに問題になりそうです。
それ以外に、重なり合わないようにD&D可能なボックスを配置する際にも問題になるのではと考えました。
ドロップ時に衝突判定を行い、重なるようであれば重ならないような位置にズラしてドロップする方法をいくつか試行し、
どうしても重なるようであればD&Dを取り消し元の場所にボックスをドロップする、という処理を考えます。
これは矩形範囲のhtml要素の取得より有用かもしれません。
こういったことをやろうとされた方ややっているコードをご存じな方はいますか?
px単位での位置取得の正確さが要求されるような例ではないでしょうか?
グダグダ言ってないで適当なブラウザ上で「矩形範囲のhtml要素取得」とやらを実装してみろ。
elementFromPoint()もgetBoundingClientRect()も使わず、実用的な速度で動作し、
かつボックスの重なりも処理できるなら、それだけで画期的だ。
値がズレてるならズレたまま扱えば正しく要素を取れるんじゃねーの。
>>267 で何やら言ってるが、getComputedStyle()やbox-sizingも試してみたのか。
CSSOM-ViewのWDは目を通したのか。
むしろ
>>267 なんかより厄介な問題が出てくると思うが、それは遭遇してから言ってこい。
280 :
261 :2008/11/02(日) 08:55:45 ID:???
>>279 これまでで一番有益なアドバイスでした。ありがとうございます。
CSSOM-Viewは初めて知りました。
さて、
http://hkom.blog1.fc2.com/blog-entry-503.html の位置取得方法はお試しになりましたか?
これが私の知りうる限り一番正確に位置取得できる方法なんです。
実は
>>267 の問題もとりあえずはこれで解決できますが、ただ限られたケースしか使えないという欠点はあります。
ちなみに、やってみれば分かることですが、getComputedStyle()やbox-sizingは使い物になりません。
その理由はスペースの都合で割愛します。
要するに、知りうる限り、完全に正確に位置取得をする方法がないので、皆さんにおたずねしたいのです。
だからな、あんたは「正確、正確」と言うが、 どのブラウザも各ブラウザ基準で「正確に」値を出してるだろうが。 あんたが言う「正確」とは何基準だ?脳内か?何に統一したいんだ? > getComputedStyle()やbox-sizingは使い物になりません 理由を書かねば話になんねーだろ。三行で書け。 古いMozillaでoffsetLeftがleftの計算値に一致しない現象を知ってる奴なら今でもgetComputedStyle()でやる。 つーか最初に一回だけ計ってその後の処理はstyle.leftで統一する。
282 :
234 :2008/11/02(日) 09:46:12 ID:56s2bwm5
>>234 の件引き続き探してます
Mozillaの独自CSSなどで要素のbackgroundの透過設定が出来れば良いと思うんですが
283 :
261 :2008/11/02(日) 09:46:57 ID:???
>>281 >あんたが言う「正確」とは何基準だ?脳内か?何に統一したいんだ?
>>183 の(3)です。
>理由を書かねば話になんねーだろ。三行で書け。
offsetLeft/Topの総和が座標値の概算値になります。
しかし、
>>261 のリンク先にあるようにoffsetLeft/Topの定義はブラウザ依存です。
だから、getComputedStyleを使っても問題の先送りになるだけです。
どうしたアホ外人、出番だぞ
>>283 >>183 の(3)はoffset(Left|Top)の算出と何も関係ねーはずだが。
> offsetLeft/Topの総和が座標値の概算値になります
> getComputedStyleを使っても問題の先送りになるだけ
あんたがやりたいのは「正確な位置算出」であって「正確なoffset(Left|Top)算出」じゃないと思ったんだが、
違うのか。
286 :
261 :2008/11/02(日) 10:34:14 ID:???
>
>>183 の(3)はoffset(Left|Top)の算出と何も関係ねーはずだが。
>>183 の(3)による座標値と一致している事が私の正確の定義です。
> あんたがやりたいのは「正確な位置算出」であって「正確なoffset(Left|Top)算出」じゃないと思ったんだが、
違うのか。
offsetLeft/Topの正確さは私は定義してないです。
どうも不毛な流れになってきたので、これで終わりにします。
有益なアドバイスありがとうございました。
関係ねーと言うか、IEのoffsetParentには位置指定以外にhasLayoutも絡むから、 offsetLeftで考える時点でab:(x,y)の座標系にはならんわな。 つーことは何だ。問題はIEなのか。IE以外なら何とかなるのか。
試してないけど、offsetParent と offsetLeft/Top じゃなくて、 getComputedStyle()/currentStyle で position:static 以外の要素を探して left とか margin を足していけば良かったのでは。
>>282 261がそれを実現するライブラリを作ってくれるからしばしまて
こんにちは。アキハバラの○○無線で買ったウィンドウズのXPなんで すが、標準装備とかいうので付いていたIEのバージョン6は、JavaScript のバージョンでいうと1.5ということになりますか。 変な質問ですいません。
IE6ならJavaScript1.3相当なんじゃね このスレ、レベルが高すぎてついていけません
IE6は1.5だ。
294 :
Name_Not_Found :2008/11/02(日) 15:15:04 ID:fDCBeq+A
クリップボードのamazon URLからASIN番号を取り出すブックマークレットを作ろうとしているのですが、 原因不明のエラーで困っています。 javascript:asin=window.clipboardData.getData('Text');clip=asin.match(/dp\/.{10}/);clip2=clip.substring(3,13);alert(clip2); ↑が自作のブックマークレットですが、これだとサポートしていないメソッド…のエラーが でて動作しません。しかし、 javascript:asin=window.clipboardData.getData('Text');clip=asin.match(/dp\/.{10}/);alert(clip); と javascript:clip="dp/4000223941";clip2=clip.substring(3,13);alert(clip2); のように分けたものはそれぞれ意図通りに動作します。 文字数制限にひっかかってるわけでもないし、何が悪いんでしょうか? ブラウザはIE6.0です。
いつも思うんだけどglobalフラグ立てないならexecにしとけ javascript:alert(/dp\/(.{10})/.exec(clipboardData.getData('Text'))[1]);
質問です。下記コードでuberメソッド内のif節(depthが1以上)はどういう時に使われますか?具体例を教えて下さい。 以前から何度も例を考えてみましたが、どれもif文でdepathが0になるのでelse節しか実行されません。 Function.prototype.method = function(name, func){ this.prototype[name] = func; return this; }; Function.method('inherits', function(parent){ var depth = 0, proto = this.prototype = new parent(); this.method('uber', function uber(name){ var func, ret, v = parent.prototype; if(depth){ for(var i = d; i > 0; i -= 1){ v = v.constructor.prototype; } func = v[name]; }else{ func = proto[name]; if( func == this[name]) func = v[name]; } depth += 1; ret = func.apply(this, Array.prototype.slice.apply(arguments, [1])); depth -= 1; return ret; }); return this; });
297 :
294 :2008/11/02(日) 16:38:21 ID:fDCBeq+A
>>295 すいませんヘボなもんで…。
わざわざ書き直してもらってありがとうございます。
バッチリ動作して感謝です!
>>295 横レスだけどglobalフラグ立てない場合は何でexec使った方がいいの?
慣れで常にmatch使ってるんだけど。
300 :
Name_Not_Found :2008/11/03(月) 01:21:09 ID:7/XJRJrH
jquery で table のどこをクリックしても、 その行の1列目の値を alert() したいのですが、 ↓だと何がマズいでしょうか? $("table tr").click(function () { alert( $("$(this) td:first").text() ); });
>>299 なるほどありがとう。exec使うようにする。
>>300 jQueryあんまり覚えてないけど
$(this)はselectorじゃないから中に入れたらダメじゃない?
$(this).find("td:first").text()なら取れるはず
302 :
300 :2008/11/03(月) 08:28:40 ID:7/XJRJrH
> 301 できた!! 学習させて頂きました。m(_ _)m
303 :
1/2 :2008/11/03(月) 19:24:45 ID:???
お世話になります。
現在、下のサイトを参考にしてツールチップを作成しています。
http://www.dynamicdrive.com/dynamicindex5/dhtmltooltip2.htm こちらのサンプルは、マウスを動かすとマウスについてくるようにツールチップが表示されます。
これを、マウスを動かした際には非表示、動かさない場合は表示というようにしたいと考えています。
マウスを動かした際に、現在のカーソル位置と一秒後のカーソル位置をsetTimeoutで比較して、
同じだった場合に表示処理を行うようにしたのですが、うまくいきません。
マウスを動かしツールチップが消去されたあとは再び表示されない状態です。
(setTimeoutのところで「引数が無効です」のエラーが出ています。イベントを渡したりしてみましたが駄目でした)
ご指導お願いいたします。
304 :
2/2 :2008/11/03(月) 19:25:52 ID:???
function setMouseMove(){ var beforeX = event.x;//現在の表示位置を取得 var beforeY = event.y; setTimeout(showTooltip(beforeX, beforeY), 1000);//1秒ごとに表示位置を確認する } function showTooltip(beforeX, beforeY){ var afterX = event.x;//マウスが動いた場合の判断のため var afterY = event.y;//1秒後の表示位置を取得する if(beforeX==afterX && beforeY==afterY){ if(tipobj.style.visibility != "visible"){ positiontip();//同じ場所かつ非表示の場合、表示する。 }else{//すでに表示されてた場合は消去してまた表示 hideddrivetip(); positiontip(); } }else{ hideddrivetip();//同じ場所でない場合は非表示処理 } } document.onmousemove=setMouseMove
setTimeout を使って自分自身を再帰的に呼び出す、という定石で setTimeout に出会った人は setTimeout 自体に繰り返し処理機能があると勘違いしている人が多い。 つ setInterval
問題はむしろ別にありそうだね
307 :
300 :2008/11/03(月) 23:20:10 ID:f+cnwmk6
jquery の tablesorter + pager で作ったテーブルでクリックすると、 最初に表示された行のついては1列目の値が alert() されるのですが、 ページング処理で開いたテーブルをクリックしても alert() されません。 ページサイズを増やし、 クリックされても alert() されなかった行を1ページ目で表示させ、 その行をクリックすれば、ちゃんと alert() されました。 どうしたら、ページング処理後の行でも 問題なく動くでしょうか?
>>307 いきなりtablesorterとpagerがわかっている前提で話されても困ると思うんだけど。
サンプル出さないとわからんよ。
>>300 のやり方踏まえてエスパー回答してみると、table配下のtrにclickを設定したけど、
pagerとかいう奴でtrが置き換わり、そっちにはclickの設定がされてないのが理由じゃないの?
>>300 を下のように変更してtableにclickを設定し、クリックされた時のイベントで
alertを実行すればいいんじゃね?
$("table").click(function(e) {
alert($(e.target).text());
});
309 :
296 :2008/11/04(火) 18:18:01 ID:???
どこから沸いたコードなの?
>>296 > どういう時に使われますか?
一生使われません
312 :
Name_Not_Found :2008/11/05(水) 02:40:01 ID:ZJZlQtYZ
313 :
312 :2008/11/05(水) 05:38:26 ID:???
自己解決。すみませんでした。
314 :
296 :2008/11/05(水) 10:37:44 ID:???
315 :
Name_Not_Found :2008/11/05(水) 15:23:06 ID:p17cjZCi
お願いします。
リンクのURLを動的に変換させたいのです。
function () {
var ADD_URL = "
http://*.*.*/view.php?url= "
window.location.replace(ADD_URL + window.location.href);
});
この場合,一度ページを表示してから,新URLが表示されます。
いきなり新URLで表示させるためにはどうしたらいいのでしょうか。
>>315 その無名の関数式をどうやって呼び出しているの?括弧の対応が
取れてないし…
中途半端なコピペとか >いきなり新URLで表示させるためにはどうしたらいいのでしょうか。 最初から新URLにアクセスすればいいんじゃね
>>314 uberで呼び出したメソッドの中で更にuberを使ってると1以上になるんじゃない?
なんか微妙なコードだなと思って原文見たら
最後に「最近よく考えてみたらuberとか使わなくね?無駄じゃね?」って感じの追記がしてあった。
>>318 処理に使われてるJavascriptを探してそれを示してください。
できなければこのスレにはあなたに相応しくありません。
321 :
296 :2008/11/05(水) 22:09:21 ID:???
>uberで呼び出したメソッドの中で更にuberを使ってると1以上になるんじゃない? ありがとうございます。まあそれはそうで、ぶっちゃけ見ればすぐ分かる当たり前のことですよね(偉そうでごめんなさい)。 具体的にはどんな場合でしょうか?それが私の質問の主旨です。 そうですね、最近は古典的継承は使わずにプロトタイプ的継承やfunctionalな継承を 使うよう推奨してますよね、Crockfordさんは。 でも、古典的継承を実際見かけることも多いので、後学のために理解を深めておこうと思いまして。
>>320 初心者系のスレがなかったのでここで質問させてもらったのですが、失礼しました
323 :
Name_Not_Found :2008/11/06(木) 11:29:20 ID:xhBpNM3i
jqueryのajaxに関する質問です $.ajax()で非同期でサーバを呼び出しているのですが、 これは、あるURLへの呼び出し&処理がまだ終了していない時に、 他のURLを呼び出しても問題ないのでしょうか?
nextSiblingやpreviousSiblingなどで返すElementですが、 IEだと必ずHTMLになるのに対して、FirefoxだとTextElementになることがあります。 これを常にHTMLになるようにする方法はないでしょうか? 一応nodeTypeをみて処理して解決してはいるのですが…
>>323 問題ないけどRFCの規定で2本までしか投げられないから3本目は待機させられるだろうね
Cometする場合は注意しないといけない
>>324 IEを恨みつつ(X)HTMLを全部1行に書く
>>321 えーと、どんな場合て?uberが何をするためのメソッドなのかを聞いてるん?
ところでこのuberだけどやっぱ変だよ。
わざわざdepthの数だけprototype.constructorを辿るように書いてあるのに、
肝心のconstructorプロパティをいじってないから常に最上位クラスを指す事になる。
http://d.hatena.ne.jp/brazil/20051012/1129035427 ここで作者から記事を改訂する予定だっていう返事が来た事が2005年に書かれてるけど、
今現在載ってるのを見てもconstructorに関する記述はそのまま。動作もおかしい。
作者自身使ったこと無いと言ってるし、多分テストも真面目にやってないのでは。
クロージャーというのがあってだな、
すいません。javascriptで書かれたブログパーツを
ブログでなくて自分で書いたページ(ブログじゃないページ)に
張るということができないかやってみたのですが
たとえば <script src="
http://xxk/hoge.js " language="JavaScript"
type="text/javascript"></script>
というソースで配布されているブログパーツ(javaでFlash埋め込みを書き出す)を
張りたい場合、クロスドメインを解消すればいいんじゃないかと思って
webtips.open-log.net/index.php?JavaScript%2Fクロスドメイン制限の解除
(↑URL)や
http://www.ironhearts.com/diary/archives/001463.html に書いてあるに書いてある方法や自分のローカルにつくったHTMLで
やってみたのですができませんでした。
そもそも普通のページには張れないんでしょうか。
それとも別の方法があるんでしょうか。教えてくださいお願いします。
環境はIE7とFireFox3、テストした環境はland.to鯖とXPSP3のローカルです
>>328 そもそもスレ違いだし、ブログもただのHTMLなので普通は貼れるはず。
<html>とか<head>とか<body>がないってオチじゃない?
ブログパーツが何かわからんと何とも言えないけど。
331 :
296 :2008/11/07(金) 10:56:56 ID:???
>>326 ご回答ありがとうございます。
uberメソッドをどういう時に使うかという点で言えば、オーバーライドされた親クラスのメソッドを呼び出したい時に使うと
認識していますが、合ってますか?
で、私が
>>296 で質問したのは、uberの使い方ではなくて、if文内の(else節ではなくて)if節の部分が意味を持つ
のはどういう場合かという具体例を知りたいということです。
つまり、prototype.constructorをたどるのは何のためかというのが分からないということです。
というのも、prototype.constructorはデフォルトでは関数(クラス)自身を指すので、通常の場合は
else節が意味を持たないと考えて混乱してしまったんです。
実際にいろいろ具体例を作ってみたところ、どれもif節の部分(depth>=1)の部分を有効活用しているような
コードを作ることが出来ませんでした。
それから
>>296 の出典が分かりました。"Pro JavaScript Techniques"(John Resig)という本の41ページです。
uberメソッドが変と言われてもこれはResigさんもCrockfordさんもblogや本に書いているメソッドなので、
コードが間違っているというのは考えにくいような気がします。
>>326 さんはどんな点で変だとお考えになったのかがよく理解できていないですが。
作者が使ったことないというのはどこに書いてありましたか?
(古典的継承の)「記事を使って以来使ったことがない」とは書いてありますが、
このメソッドをそもそも一度も使ったことが無いとは書いてある箇所は見あたりません。
>>329 >>330 スレチでしたか、すいませんでした。
とりあえずもうちょっと頑張ってみます。
ありがとうございました。
>>328 > (javaでFlash埋め込みを書き出す)を
javaではなく、javascript 勝手に省略するな!
おれはメーカーに勤務していたとき、職場での会話・雑談と効率の関係を、 人事部と上司の指示で調査したことがある。 その結果、会話(会社で仕事に関係する会話)、雑談(仕事と関係ない話)の時間が 多いほど仕事の効率が高く、プロジェクトの成功率が高いことがわかったんだ。 当時、最低でも10人以上でチームを作ってやる仕事ばかりだったけど、 参加人数が多いほど、雑談時間と効率が正比例の関係にあるという結果になった。 その結果は社内にも秘密とされた。(おれがいいふらしたけどねー!) それは、雑談するほど効率がいいなんて、上司も人事部も認めたくなかったからなんだ。 ちなみに毎日2時間以上雑談をするチームが最も効率がよかった。(^o^)v
>>331 >コードが間違っているというのは考えにくいような気が
そう思うんですが
>>326 のブログによると実際に不備を認めた事があったらしいからそういう事もあるのかなと・・・。
>一度も使ったことが無いとは書いてある箇所は見あたりません
ごめん、「記事を使って以来使ったことがない」の事を言ったんだけど、
まあもちろん記事を書いた時は何度かテストしてるでしょうね。でも実用はしてないと。
>prototype.constructorをたどるのは何のためか
inheritsを使って (親)A→B→C→D(子) と継承したクラスを作ったとして、
uberを利用してDから呼んだCのメソッドがBのメソッドを呼び、そのBのメソッドがAのメソッドを呼んでた場合どうすればいいか?
この場合、D.prototype.constructor.prototype.constructor.prototype
とする事でBクラスのprototype(Aクラスのインスタンス)を参照できるので、それを
・・・という事を想定したコードだと自分は解釈したんだけど、
>>326 でも書いたようにこういう風に使うためにはinherits時に各クラスのconstructorプロパティを調整する必要があります。
このコードだと、上記の例で言えばBCDクラスのconstructorプロパティは全部Aになってしまって、
prototype.constructorを段階的に辿る意味が全然無いんです。
A→B→C のケースなら直接parent.prototypeを読みに行くようになってるので問題無いかも知れませんが、
A→B→C→D→E→F などの深い階層の場合恐らくまともに動作しないのでは?
それと
>>296 の for(var i = d; は for(var i = depth; だよね?
スクリプトを実行したときにループ警告が出るのですが、これを出なくすることはできますか? 有限ループなのですが処理が多くて途中で何度も引っかかるのが面倒なので。
JavaScriptで、イベントの発生もとを取得するのはどうしたらいいですか。 <a href="#" onclick="f1(); return false">click</a> function f1() { // ここで <a>要素を取得したい }
>>388 クロスブラウザにするにはonclickで関数にeventという引数を渡すのがおすすめ。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test(ev) {
var elt = ev.target || ev.srcElement;
alert(elt.innerHTML);
}
</script>
</head><body>
<div><a href="#" onclick="test(event)">xxxyyy</a></div>
</body></html>
おいおい、そんなものおすすめするなよ・・・
341 :
Name_Not_Found :2008/11/08(土) 12:57:25 ID:tIO05utY
正規表現に関する質問です。 引数として渡された関数の処理部分のみを(文字列として) 返すにはどうすればいいですか? alert(a)にて、"return x + y;"が表示されるようにしたいです。 function test(func){ return func.toString().replace(); } var a = test(function(x, y){ return x + y; }); alert(a); できれば以下のような無名関数でない場合についても教えてほしいです function b(x,y){ return x + y; } var a = test(b); よろしくお願いします。
342 :
296 :2008/11/08(土) 13:07:58 ID:???
>>335 ご説明ありがとうございます。ちょっと時間がとれないでいるので、
また時間がとれる時に自分で確認したいと思います。
はい、dはdepthの間違いでした。
>>341 .replace(/^[^{]+\{\s*|\s*\}[^}]*$/g, '');
344 :
Name_Not_Found :2008/11/08(土) 13:39:53 ID:tIO05utY
>>343 ありがとうございます。
なるほど、どちらにせよ結局括弧で囲まれてる訳ですね。。
気づきませんでした。
ああ違う thisを渡せって言いたかったのか。
348 :
Name_Not_Found :2008/11/10(月) 02:48:15 ID:IkE1xeP/
>>348 手元のIE6は動いたな。インターネットオプションぐりぐりやってみたら?
350 :
Name_Not_Found :2008/11/10(月) 12:09:01 ID:8hWHsSqU
script.aculo.usのEffect.Foldの逆をやりたくて ソースにUnfoldを書こうとしてます。 Effect.Scaleを2回やっているのはわかるんですが、 どう書いていいかわかりません。 知ってる方、誰か教えてもらえないでしょうか? む
351 :
Name_Not_Found :2008/11/10(月) 16:06:45 ID:8hWHsSqU
たて続けに質問で悪いですが、 new Effect.SlideDown( "box" ); で、 'down()'はNullまたはオブジェクトではありません。 とエラーが出るんだけど理由がわからない。 どなたか理由を知ってる方教えてもらえないでしょうか?
>>351 そのエラーが出るサンプルコードをください
353 :
Name_Not_Found :2008/11/10(月) 19:31:00 ID:zV68AOIx
自分でソート条件を指定するので Array.sort( function(a,b){ return a-b; } );を使いたいのですが、 Firefoxだと、Array.sort( func ) は使えないのでしょうか。 IE7では動きましたが、FF3では動きませんでした。 もしだめで、prototype.jsなどで代替案などありましたらお願いします。
Firefox でももちろん使えるはずだけど。
動かなかった例を出してみてよ
お知恵を貸してください。 body内に以下のような構造があります。 <script type="text/javascript"> <!-- window.onload = function () { var elm = document.getElementById('box1'); document.getElementById('box2').innerHTML = elm.innerHTML; elm.innerHTML = ''; }; // --> </script> <div id="box1" class="xxx">hoge</div> arekore <div id="box2" class="yyy"></div> onloadの無名関数でbox1の内容をbox2に移動するだけで、 このスクリプト自体は問題なく動作するんですが、 可能なら、 JavaScriptが有効な場合はbox1を非表示、無効の場合はbox1を表示したいんです。 idが確定している場合(関数より前にある場合)なら、 document.getElementById('box1').style.display='none'; とすればいいのはわかったんですが、 こういう構造のときはどのようにすればいいのかわかりませんでした。 なお、<head>内やbox1以降は手を出せません。 よって、box1を<noscript>で挟むという方法もつかえません。 よろしくお願いします。
357 :
356 :2008/11/10(月) 21:34:00 ID:???
わかりにくかったので追記です。 window.onload実行時に非表示じゃなくて、 box1が出現した時点でdisplay='none'にしておきたいということです。
>>356 クラスxxxに割り当てるスタイルをJavaScriptで書き換えればいけるんじゃないの
359 :
Name_Not_Found :2008/11/10(月) 22:25:12 ID:8hWHsSqU
351です。 端折って書きます。 html部分はPHPになってます。 echo ' <script type="text/javascript" src="prototype.js"></script>'."\n"; echo ' <script type="text/javascript" src="effects.js"></script>'."\n"; echo '</HEAD>'."\n"; echo '<BODY> <!-- ヘッダーエリア 開始 -->'."\n"; echo ' <div id="box"></div>'."\n"; javascriptの部分です。 Event.observe( window, 'load', onInit, false ); function onInit(){ new Effect.SlideDown( "box" ); }
>>356 <div id="box1" class="xxx">hoge</div>
<script type="text/javascript">
<!--
document.getElementById('box1').style.display = none;
// -->
</script>
iroiro
<div id="box2" class="yyy"></div>
361 :
360 :2008/11/10(月) 22:53:05 ID:???
ごめん box1以降は手を出せねいのね。 消えます document.getElementById('俺').style.display = none;
362 :
Name_Not_Found :2008/11/10(月) 23:43:35 ID:ovMkJR/O
ページが
・index(○○.com/index.htm)
・メニュー(menu.htm)
・コンテンツ1、2、3(1.htm、2.htm、3.htm)
とありまして
メインフレームが無い状態でコンテンツが開かれた場合メインフレームのページにジャンプさせる
ため
<script language="JavaScript"><!--
checkURL = "
http:// ○○.com";
jpURL = "
http:// ○○.com";
if(parent.location.href != checkURL) parent.location.href = jpURL;
// --></script>
という文をコンテンツ1、2、3に埋め込みました。
結果としてメニューでどれをクリックしても初期ページに戻ってしまうのですが
どのようにしたら改善されるでしょうか
参考にしたのは
「検索エンジンから来た場合にメインフレームのページにジャンプさせる」
と言うページです
メインフレームってIBMとかのアレか? さておき、一度親フレームから子フレームを呼び出して 子フレームに埋め込んだ alert(parent.location.href) とかで 親フレームのURLを調べてみたらいいと思うよ。
365 :
354 :2008/11/11(火) 09:54:44 ID:9y4+xSeq
>>354-355 使えるようなので色々見てみると解決しました。ありがとうございます。
原因はprototype.jsのgetElementsByClassName()で受け取ったものが厳密には配列ではなかったようです。
IE7ではsort( func )が動作していたので勘違いしていました。
以下のようにして動作できました。
var foo = parent.getElementsByClassName(classname);
for (var i=0; i<foo.length; i++){
bar.push( foo[i] );
}
hoge = bar.sort(function(a,b){ if(!a.tabIndex){return 1;} if(!b.tabIndex){return -1;} return a.tabIndex - b.tabIndex; });
366 :
Name_Not_Found :2008/11/11(火) 21:00:22 ID:H1yNcsz7
お世話になっております。
JAVA SCRIPTでフォームで送ったら
フォームで情報を成型してデータを格納して
確認のためメールで流して欲しいと要望があったので作成しようとしています。
現在
<FORM name="mail_form" method="POST" action="mailto:
[email protected] "
enctype="text/plain">
<TEXTAREA rows="8" cols="40" name="comment">
</TEXTAREA><BR>
<INPUT type="submit" value="送信">
<INPUT TYPE="reset">
</FORM>
で中のコメントは送れるのはわかったのですが
下記のフォームの内容をメールで送りたいのですが
どのようにすれば出来るのでしょうか?
<FORM METHOD="GET" ACTION="resroom.cgi" NAME="form">
<INPUT TYPE="hidden" NAME="target" VALUE="table">
<INPUT TYPE="hidden" NAME="date" VALUE="2008/11/11">
<INPUT TYPE="hidden" NAME="act" VALUE="">
<TABLE> <TBODY> <TR> <TH>名前</TH>
<TD><INPUT SIZE=16 TYPE="text" NAME="name" MAXLENGTH=32> </TD>
<TD></TD> <TR>
<TD COLSPAN=11 ALIGN='center'>
<INPUT TYPE="button" NAME="but" VALUE="予約" onClick="JavaScript:argChk('book')">
<INPUT TYPE="button" NAME="but" VALUE="キャンセル" onClick="JavaScript:argChk('cancel')">
</TD> </TR> </TBODY></TABLE></FORM>
resroom.cgi の方で何とかする
368 :
Name_Not_Found :2008/11/11(火) 22:26:02 ID:4uIaL5KQ
AjaxのWebアプリケーションでデータを保存するために、XMLファイルの使用を検討しています。 PHPなどの力を借りずにJavaScriptの機能だけで、XMLファイルをサーバ上に(動的に)作成・書き換えすることはできますか? ※XMLオブジェクトを作成するのではなく、XMLファイルそのものを作成したいです。
370 :
368 :2008/11/11(火) 22:35:22 ID:4uIaL5KQ
>>369 ありがとうございます。
WebDAVについて調べてみます。
371 :
368 :2008/11/11(火) 22:53:19 ID:4uIaL5KQ
アプリケーションを一般的な無料レンタルサーバの上で動かしたい(そのサーバ上で完結させたい)のでWebDAVは使えなそうです・・・残念 他に選択肢はありますか?
あきらめる。
374 :
368 :2008/11/11(火) 23:08:51 ID:4uIaL5KQ
>>372 ありがとうございました。
>>373 サーバ側に保存されているファイルは読み込むことができるので、「ローカルファイル」とはクライアント側のディスク上に保存されるファイルと解釈していました。
>>365 任意の値を受け入れるが、処理としては配列を前提とするという場合には、
foo = (typeof foo=='object' && foo.constructor==Array ? foo : [foo]);
あたりが定番。
>>365 戻り値が配列では無く、HTMLCollectionというのが原因なので、
prototype.jsを使っているなら
foo = $A(foo);
とか。
377 :
Name_Not_Found :2008/11/12(水) 13:09:06 ID:dnhbbK1y
お世話になっております。
JavaScriptでメールを開くってゆーのは出来るのでしょうか?
検索したけど見つからない、、、、
<a href="mailto:
[email protected] ">メールを出す</a>
をクリックしたのと同じような動作をしつつ
JavaScriptの処理を進めたいのです、、、
以上 情報をお持ちな方はご助力いただけますとありがとうございますっ
お世話になっております。
JavaScriptでExcelを開くってゆーのは出来るのでしょうか?
検索したけど見つからない、、、、
<a href="mailto:
[email protected] ">メールを出す</a>
をクリックしたのと同じような動作をしつつ
JavaScriptの処理を進めたいのです、、、
<a href="punipuni.xls">えくせるを出す</a>
380 :
Name_Not_Found :2008/11/13(木) 02:04:21 ID:Dq+4kRPM
お世話になっております。 ■スクリプトの説明 bodyタグ内にある「HTML」「CSS」「Javscript」という3つの文字列に対して、 背景色を黒、文字色を白、太字にする。 IEに対応しています。 ■質問(実現したいこと) firefoxでは、document.body.createTextRange の部分でエラーが出る。 scriptタグ内のみを改修し、firefoxでも対応するにはどうすればよいでしょうか? ■制限事項 ・bodyタグ内は一切、手を加えてはいけない(つまり該当文字列に対して<span id=""></span>などをつけてはいけない)。 ------ソースここから----------- <html> <head> <title></title> <script type="text/javascript"> <!-- var words = new Array("HTML", "CSS", "JavaScript"); function test(){ for(var i in words){ keyword(words[i], "black", "white"); } }
381 :
380 :2008/11/13(木) 02:05:40 ID:Dq+4kRPM
// 続き function keyword(word, bcolor, fcolor){ var rng = document.body.createTextRange(); while(rng.findText(word, 1)){ rng.execCommand("backColor", false, bcolor); rng.execCommand("foreColor", false, fcolor); rng.execCommand("bold", false, null); rng.moveStart("character"); } } //--> </script> </head> <body onLoad="test();"> HTML<br> CSS<br> JavaScript<br> <br> <img src="hoge1.jpg" alt="HTML"><br> <img src="hoge2.jpg" alt="CSS"><br> <img src="hoge3.jpg" alt="JavaScript"><br> </body> </html> ------ソースここまで-----------
382 :
380 :2008/11/13(木) 02:06:25 ID:Dq+4kRPM
■試してみたこと 以下のようにやってみましたが、HTMLタグ内にある文字列まで変換されてしまうのでダメポです。 <script type="text/javascript"> <!-- var words = new Array("HTML", "CSS", "JavaScript"); function test(){ for(var i in words){ var reg = new RegExp("(" + words[i] + ")", "g"); document.body.innerHTML = document.body.innerHTML.replace(reg, "<font style=\"background-color:black; color:white; font-weight:bold;\">$1</font>"); } } //--> </script> 以上、よろしくお願いいたします。
正規表現を工夫するか、innerHTMLを使うのをやめて1つずつノードを走査すればいい
>>380 >>383 がレスしてるような感じだとこんなのかな
bodyを全部走査するからwordsの配列そのものを渡すようにしたのと、
パターン見終わったらspliceで削除するようにした。wordが何度も出てくるならspliceコメントアウトすればいいし。
function keyword(words, bcolor, fcolor, baseElem) {
if (!baseElem) baseElem = document.body;
var elems = baseElem.childNodes;
var regs = [];
for (var i=0,l=words.length; i<l; ++i) { regs[i] = new RegExp(words[i]); }
for (var i=0,l=elems.length; i<l; ++i) {
var elem = elems[i], text = elem.nodeValue;
if ( !text || text == '\n') continue; // 文字以外は見る必要なし
for (var j=0,m=regs.length; j<m; ++j) {
var match = regs[j].exec(text);
if (match) {
var span = document.createElement('span');
var spanStyle = span.style;
spanStyle.backgroundColor = bcolor;
spanStyle.color = fcolor;
span.innerHTML = match[0];
baseElem.insertBefore(span, elem.nextSibling); // 自分の次に追加
baseElem.removeChild(elem); // 自分自身を削除
regs.splice(j, 1); // もう使わないから削除
break; // このパターンは終わったので抜ける
}
}
}
}
ページが表示された際、1番最初のフォームのinput type="text"に自動的にフォーカスされるようにしたいです。 リファレンスをみたところfocusというメソッドがあるので、それを使えばいいのですけど、 jqueryを併用していて、focusが上書き(?)されているようで意図した動作をしてくれません。 擬似的に元のfocusメソッドを再現する方法等ないでしょうか・・・。
>>385 ですが
なんかソース整理してたら普通に動作してくれました(:D)rz
すいませんでしたっ
それ目的でソース貼れって言ってるからおk
申し訳ない 次回から気をつけます。ご指摘ありがとうございました。
390 :
Name_Not_Found :2008/11/13(木) 20:20:09 ID:cF/LvURE
javascriptでソケット通信を行いたいんですが jnext以外に方法はないんでしょうか? また、他にjavascript以外でもソケット通信が可能ならその言語を教えてください
やっぱり質問は無しの方向で。 スレ汚しすまん
>>391 スレ違いだがJava Appletならサーバとの間でソケット通信
できるよ。ページを取り寄せたサーバ限定だけどね。
質問は無しらしいが補足 ExternalInterface 使ってラップすれば ActionScript のソケット通信関連がそのまま使える。 ので、他鯖にも接続できる。Flex SDK 使えばタダだ。 ただし、Flash Player のソケット関連のセキュリティ制約、 843 番の影響もそのまま受けるので鯖に手を入れられないと難しい。まぁこれは Flash も同じ。
395 :
380 :2008/11/14(金) 01:06:42 ID:eT5ZgTqu
>>384 ありがとうございます。
しかし、bodyタグ内が以下のような場合、
-------------
<body>
HTML、CSS、Javascript<br>
DHTML、CSS、Javascript<br>
</body>
-------------
・「DHTML」の部分も「HTML」に書き換わってしまう。
・「CSS」「JavaScript」は最初に出てきたとこしか変化しない。
という問題が発生してしまいます。
なので、
>>384 さんのソースを参考にして、
それらにも対応できるよう、まずは自分でやってみます。
ブラウザ特有のAPIを使ってるJSを他のブラウザでも使えるようにしたいと思ってます。 そのJS自体を書き換えることなく APIをエミュレートするような方法は可能でしょうか? 参考になるサイト、書籍がありましたら教えていただけませんでしょうか?
ブラウザ特有の API というのが何を指してるのかわからん
398 :
396 :2008/11/14(金) 09:05:32 ID:???
たとえば、 addEventListener という API は IEでは使うことができません。 これを IEで使えるようにしたいのです。 addEventListener があったら attachEvent を実行するようにすればよいのかな と思ったのですが、いろいろ調べてみるとタイミングが違うということがわかりまして、 どうやって互換性を維持すればよいのか知りたいと思ってます。
>>398 jQueryとかPrototype.jsみたいなライブラリ読んだら良いんじゃない?
中身解説サイトが結構あるからそれ見ながら読むと結構わかると思う
400 :
Name_Not_Found :2008/11/14(金) 12:02:46 ID:niaTKV86
質問です。 Dreamweaverで作ったリンクボタンで、 マウスオーバーしてる時は、イメージが変わるスクリプトを フォームのサブミットで実装する方法を教えてください。 //自動生成されたjavaスクリプト function MM_swapImgRestore() { //v3.0 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc; } function MM_swapImage() { //v3.0 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3) if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];} } //質問 <a href="/test.php" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image10','','/image/template/menu1.gif',1)"><img src="/image/template/menu.gif" name="Image10"></a> <input type="image" src= "image/template/menu.gif" value="submit">
401 :
Name_Not_Found :2008/11/14(金) 14:19:30 ID:/JbNyPzV
質問です。 Ajax&javascriptでXMLを扱う方法について教えてください。 今、以下のようなXMLがあります。 <?xml version="1.0" encoding="utf-8" ?> - <ZIP_result> - <ADDRESS_value> <value state="北海道" /> <value city="札幌市中央区" /> <value address="北一条西(1?19丁目)" /> <value company="none" /> </ADDRESS_value> </ZIP_result> Ajax.Request()でデータを取得し 取得したデータの処理は function getData(data){ var response = data.responseXML.getElementsByTagName('ZIP_result'); var item = response[0].getElementsByTagName('ADDRESS_value'); var address = item[0].getElementsByTagName('value'); } などとやっています。 ここでaddressの件数は8になっているところまではわかったのですが、 valueタグの中のstateとかcityとかにアクセスする方法がわかりません。 ご教授のほどよろしくお願い致します。
402 :
401 :2008/11/14(金) 16:58:56 ID:/JbNyPzV
こんな感じで取れました。 for(i = 0; i < address.length; i++){ if (address[i].getAttribute("state") != null) { pref = address[i].getAttribute("state"); } else if (address[i].getAttribute("city") != null) { city = address[i].getAttribute("city"); } else if (address[i].getAttribute("address") != null) { addr = address[i].getAttribute("address"); } }
>>398 IE6とかはHTMLElementのprototypeを拡張できないから
JSを書き換えずに動かすのは無理
質問致します。 replaceで置換後に、$1で取り出した文字列をencodeURIComponent関数で かぶせたいのですが、「$1」という文字列そのものが入ってしまいます。 ご教授よろしくお願い致します。 <script type="text/javascript"> <!-- var str = "東京\n京都\n京橋"; str = str.replace(/(.*京.*)/g, "$1 → " + encodeURIComponent("$1")); alert(str); //--> </script> ■動作結果■ 東京 → %241 京都 → %241 京橋 → %241 ■期待する動作■ 東京 → %E6%9D%B1%E4%BA%AC 京都 → %E4%BA%AC%E9%83%BD 京橋 → %E4%BA%AC%E6%A9%8B
>>404 $1を使うと罵詈雑言が飛んでくるのがこのスレだ!
はやくにげてー
>>404 encodeURIComponent("$1")
これがおかしいよ
407 :
Name_Not_Found :2008/11/15(土) 16:32:34 ID:X43o2fsc
XML, Event, クロスブラウジングに関連して質問致します。 XMLDocumentオブジェクトを生成し、そのイベントを操作したいのですが、 調べてもイベントタイプの対応関係がよく分かりませんでした。 addEventListener(), attachEvent()にイベントタイプをそのまま突っ込んでも動きませんでした。 Mozilla系 : xmlDocument.addEventListener("load", listener); IE系? : xmlDocument.onreadystatechange = listener; 上記の例はよく見かけたのですが、それ以外は見つかりませんでした。 ondataavailable, ontransformnodeの場合はどういった対応関係をとればよいのでしょうか? あと、eventTarget["on" + type] = listener, eventTarget.attachEvent("on" + type, listener), eventTarget.addEvenListener(type, listener)が必ずしも一致しない例って他にもあるのでしょうか?
408 :
404 :2008/11/15(土) 16:34:10 ID:???
>>406 はい。そこをどう直したらいいのかという質問でございます。
ちなみにencodeURIComponent($1)だと、そんな変数は無いと言われちゃいますし。
検索してif処理
質問です。document.writeするとき単独タグの終端マーカもエスケープ すべきですか?
>>404 str = str.replace(/.*京.*/g, function(s) { return encodeURIComponent(s); });
>>410 空要素のこと?
ダメ文字は "</" だから "... />" は大丈夫
412 :
356 :2008/11/15(土) 19:07:46 ID:???
>>404 str = str.replace(/(.*京.*)/g, function(s){return s + " → " + encodeURIComponent(s);});
413 :
404 :2008/11/15(土) 23:51:56 ID:???
>>411 >>412 ありがとうございます!
「replaceの第二引数は無名関数も指定できる」 勉強になりました。
ってことは、最初のstrの文字列を、
var str = "<b>東京</b>\n<b>京都</b>\n<b>京橋</b>";
にして、
■期待する動作を
<b>東京</b> → %E6%9D%B1%E4%BA%AC
<b>京都</b> → %E4%BA%AC%E9%83%BD
<b>京橋</b> → %E4%BA%AC%E6%A9%8B
にしたいとすると、
こんな漢字でいいんですかね?
<script type="text/javascript">
<!--
var str = "<b>東京</b>\n<b>京都</b>\n<b>京橋</b>";
str = str.replace(/<b>.*京.*<\/b>/g,
function(s){
ss = s.replace(/<b>([^<>]+)<\/b>/, "$1");
return (s + " → " + encodeURIComponent(ss));
});
alert(str);
//-->
</script>
415 :
404 :2008/11/16(日) 02:19:05 ID:???
>>414 >>試せば分かるのにどうして聞くのだろう
→もちろん試してみて、期待通りの結果を得ましたが、
当方のプログラムに効率の悪い部分があったらご指摘を受けたかったからです。
現に「抜き出したい部分を()でくくっておけばfunctionの中でいちいち抽出する必要はない」
というご指摘、非常に感謝しております。
最終的にこれですね。
<script type="text/javascript">
<!--
var str = "<b>東京</b>\n<b>京都</b>\n<b>京橋</b>";
str = str.replace(/<b>(.*京.*)<\/b>/g,
function(s, a){
return (s + " → " + encodeURIComponent(a));
});
alert(str);
//-->
</script>
417 :
Name_Not_Found :2008/11/16(日) 02:38:39 ID:qgzRqUcQ
JavaでStringオブジェクトとかのソースが公開されてるように、 JavaScriptでも既存の関数のソースって見れませんか?
Mozilla や WebKit ならオープンソースだから見れる IE や Opera はたぶん見れない
419 :
Name_Not_Found :2008/11/16(日) 09:31:10 ID:bO2fC3N0
おはようございます。 javaスクリプトについて、2点質問させてください。 Aという情報検索画面があり、テキストに条件を入力して「検索」ボタンを押下することで、 検索結果がテーブルに表示される仕組みのプログラムを作成しています。 A画面に設置している「情報更新」ボタンを押下することで B画面(情報変更画面)ポップアップが立ち上がります。 質問@B画面(ポップアップ)が立ち上がるのと同時に、 A画面を操作不可(もしくは不可視)にすることはできますか? 質問AB画面には「閉じる」ボタンがあり、押下するとB画面が閉じます。 B画面が閉じたことをきっかけにA画面に表示されている検索結果のテーブルの情報を 最新化したいのですが、B画面が閉じたことをA画面で判定することはできないでしょうか。 以上です。 よろしくお願い致します。
421 :
Name_Not_Found :2008/11/16(日) 09:59:07 ID:bO2fC3N0
>>420 レスありがとうございます。
質問の書き方が悪かったようで申し訳ありません、
どのように実装すればいいのでしょうか?
422 :
Name_Not_Found :2008/11/16(日) 11:43:26 ID:z+amVslg
教えてください <script type="text/javascript"> window.onclick = function() { alert("clicked");} </script> と入力してクリックすると常にメッセージを出すようにしようとしているのですが、 firefoxでは動くのにIEでは動きません。 環境OS:vista IE7 どうしてでしょうか?
document.onclick = function() { alert("clicked");}
424 :
422 :2008/11/16(日) 12:09:59 ID:z+amVslg
425 :
Name_Not_Found :2008/11/16(日) 15:43:58 ID:YMTZFDs6
質問です。 <div>もしくは<span>の間に挟まれた<form>の中を操作するとき、 どう指定すればよいのでしょうか? document.formNameだとundefinedとなってしまいます。 どなたかご存知でしたらお教えください。
formName が undefined になる意味がわからんが id ふって getElementById でもすれば
427 :
Name_Not_Found :2008/11/16(日) 16:39:11 ID:Zc8ItWlQ
質問があります。よろしくお願いします。 例えば history.previous と同じような動作をする別の命令で 直前のページのURL(もちろん自サイト内)を取得する方法はありますか。 前のページへ戻る動作をしたいのですが、前ページはcgiを使用しているので IEだとブラウザの戻るや history.back() では「警告 : ページの有効期限切れ 」 と出てフォームの再送信を要求されます。どなたかこの回避法をご教示下さい。 どうぞよろしくお願い致します。
>>421 そういう質問者より回答者の方がカキコが大量に必要となる様な聞き方じゃあ、
余程ヒマジンでないとレスしないよ。
少しでも自力で考えてサンプルを造って、動作不良の解決方法を問う様にすれば
少しはレスするヤシも居るだろうが。
>>425 getElementsByNameでOK
そうでなければgetElementsByTagName("FORM")で得たそれぞれに対してnameを確認する
>>427 リファラ
> 「警告 : ページの有効期限切れ 」 それってPOSTメソッドで取得したページでしょ。 document.referrer に従って戻ろうとしたところで、 前に見ていたのと同じページにはならないでしょ。 今の場合 document.referrer は 送信したクエリ情報を含まないURLだろうから。 action="/bbs" method="get" name="msg" value="hello, world" ↓ ページ /bbs?msg=hello%2C+world を取得。 このページ内のリンクをクリックして移動すれば 送出するリファラは ".../bbs?msg=hello%2C+world"。 action="/bbs" method="post" name="msg" value="hello, world" ↓ ページ /bbs を取得。 このページ内のリンクをクリックして移動すれば 送出するリファラは ".../bbs"。 リファラに従ってページ /bbs を取得(get)しても 送信内容は空っぽ。
CGIなら何とでも出来ます
なら最初からGETにしとけって話だな
cookieにonsubmitで保存すれば?
いちいちPOSTデータを再送信させるってことは 例えばそれが投稿フォームなんかだと2重・3重カキコになるわけだがいいのかね。
鯖でセッションつくれよ
今テーブルを動的に作ってるんですが、IEとFireFoxで挙動がちがくて困ってます。 やってることは、tr要素にappendChildでいくつかのtd要素を追加してtbodyにappendChildでいくつかのtr追加 というものです。このtd要素に背景画像をセットして、角の丸い枠の中にテキストを表示するんですが、 そこまでやると、エラーは吐かれないんですが、何故か その他の (0,1)の背景画像 背景画像 テキスト たち(7枚) という猛烈に崩れた形で表示されてしまいます。何が原因として考えられるのでしょうか?
ソースも貼らずに何言ってんだ
>>436 IEとFFxで大きく挙動が違うのはコードがHTML/DOM的に正しくない
場合に一番多く起こる。問題のある最低限のコードを貼る。
HTML側もJavaScript側も必要。
Firefoxのデザインが崩れるならFirebug使ってHTML見ればある程度予想つくとおもうけどなー
HTML、DOMってかCSSの影響が一番大きいとは思うがな
なーなーうっせー
ん?
にゃーにゃー
ModalBoxがIEで動かず困っています。 XHTML1.0なのですが、それが問題なのでしょうか?
>>436 まずそんな場合には、
tableかbody全体のinnerHTMLをコピーしてHTMLファイルに貼り付け、
HTMLとして各ブラウザで正常に表示出来るかどうかを検証する事から始めた方が良さげ。
で、そのHTMLでの問題点が判明すれば、JavaScriptでの要修正点もおのずと判る流れ。
446 :
Name_Not_Found :2008/11/18(火) 23:19:31 ID:nTsdJ6Mo
0〜9999999のランダムな数値を重複しないように表示したいのですが googleで検索したところ 仮に0〜99のランダムな整数を重複しないように表示する場合 for(i = 0;i <100;i++) a[i] = i; for(i = 0;i < 100;i++){ j=Math.floor( Math.random() * 100 ); buf = a[i]; a[i] = a[j]; a[j] = buf; } このように配列に一旦0〜99の数値を入力し それをシャッフルするという方法が多数載っていました しかしこの方法だと0〜9999999(1000万通り)の乱数を扱おうとすると 一千万個の要素を持つ配列が必要になります これでは重過ぎて使えません 一旦配列に格納する方法ではない大きな範囲で重複しない乱数を得る方法はありあませんか
重複したらやり直す
448 :
Name_Not_Found :2008/11/19(水) 00:05:30 ID:nTsdJ6Mo
>>447 その方法でも重複チェックのために
今まで抽出した乱数を格納するための一千万個の要素を持った配列が必要になります
重複しないように祈る
重複チェック用に配列に格納するのは絶対条件っぽいし無理だろうね
>>446 その表示する値の数の上限は?フラグはその数分だけで足りると思うけど
まさか一千万個全部表示するのか?
上限とかそういうのはスマートじゃないね 俺も無理だと思う
>>446 まさか本当に1000万個の数値を全て表示するとは思えないので、
var check = {};
rdm = Math.floor( Math.random() * 10000000 );
check[rdm] = true;
ってな感じで、一度表示した値をhashに入れて管理すれば?
重複した場合には、もう一度randam値を算出するか、
値をインクリメントして空きを探すかなどは実装次第。
454 :
436 :2008/11/19(水) 02:04:17 ID:???
どうやら主にtd要素のdisplayスタイルがblockになっていたのが原因のようでした。 ありがt
455 :
Name_Not_Found :2008/11/19(水) 06:29:59 ID:jTBtxRkv
>>450-453 ありがとう御座います
一千万個表示する事はまず無いと思いますが
特定の値が出るまでループしながら途中経過を表示したいので
配列に既に生成された乱数を入力するやり方だと
数分で数万の要素をもつ配列が出来てどんどん動作が遅くなっていきます
別のやり方を思いついたんですが
たとえば0〜99の数字が書いてある札があったとして
ひとつの数字を引き当てるまで札を引き続けるという状況を表すなら
札を一枚引いたら乱数の範囲を一つ狭めて0〜98の数字が書いた札から一枚選ぶ
というふうにすればこういうふうに出来る表現できると思います
for(i=0;i<100;i++){
rdm = Math.floor( Math.random() * (100-i) );
if(rdm==0){break;}
}
alert((i+1)+"回目で当たり");
これだと大きな配列は使わないのですが
当たりの数値が常に0でないといけないので汎用性は無いので
実現したい事とは異なるのですが
みなさん知恵を出してくださってありがとう御座いました
>>453 例えば rdm = 9999999 なんかが出ると
(代入文 check[999999] = true を実行すると)
配列 check のサイズは一気に 10000000 になっちゃうけど
その辺は大丈夫なん?
それとも length プロパティに 10000000 が代入されるだけで
undefined な要素の分まで実際にメモリ確保するわけじゃないのかな。
まぁ大丈夫じゃなかったとしても、例えば check["_" + rdm]とかにして
文字列変数にしちゃえば回避出来るけど。
>>455 あなたがやろうとしていることは数万要素のハッシュか配列を作ること
なしには絶対に実現できない。なぜなら、「既に出た要素」と
「まだ出ていない要素」を区別するにはそのどちらか、従って
最大5000000個の数を何らかの形で覚えておくしかないから。
だからあなたが試したそののろい方法で我慢するか、
あきらめるかのどっちか。
>>456 IE8とFirefox3で試してみたけどどっちも
check[999999] = true;実行してもメモリ使用量増えなかったし
普通の配列も連想配列的に処理してんじゃないのかな?
>>455 Math.randomはダメだけど、条件を満たす疑似乱数生成法はあるかもしれない。
数学板かプログラム技術板の乱数スレなら何かヒントがあるかも。
> 当たりの数値が常に0でないといけないので汎用性は無いので いや、何か勘違いしてるでしょ。 汎用性云々以前に肝心の「重複しない」が全然実現出来てないじゃん。 その意味不明なアルゴリズムで「出現回数が高々1回」なのは 0と99の2つのみでしょ。
461 :
Name_Not_Found :2008/11/19(水) 13:32:15 ID:63HhrnTx
JavaScriptのコードから関数の名前を検索するにはどうすればいいですか? 関数の定義は以下の二通りで行われます。 function a(){} var a = function(){} var funcs = new Array(); document.hoge.hoge.value.replace(//g,function(){ funcs.push(); });
>>457 こういうのはどうかな。まずある数が出たか否かを1ビットで
表現することにして、10,000,000 / 32 = 312,500 要素の「0」の
配列を作る。Math.random()で1つ数を出すごとにこの配列でチェック
して「0」の時だけその数を出力して対応するビットを1に変更する。
これだけだと最後は遅くなりすぎるので、残り要素が10万になったら
残っている数を列挙して配列に入れ、シャッフルして順に出す。
>>461 何がしたいのか分からんがな
何その意味不明なコード
464 :
Name_Not_Found :2008/11/19(水) 14:49:34 ID:63HhrnTx
>>463 説明不足ですみません。
テキストエリアに入力されたJavaScriptnoコード(document.hoge.hoge.value)から
関数の名前(一覧)を取得したいのです。
しかし、肝心の関数の名前を検索するための正規表現が分からないのです。
アドバイスよろしくお願いします。
>>464 var funcs = new Array();
document.hoge.hoge.value.split(/\n/).forEach(function(e){
var match = /(?:(?:function\s\s*(.*))|(?:var\s\s*(.*)\s*=\s*function))\s*\(\)\s*\{\}/.exec(e);
if (match) {
(match[1]) ? funcs.push(match[1]) : funcs.push(match[2]);
}
});
こんな感じで取れたけど、正規表現は得意じゃないので効率は悪そう
>>464 俺が思ってたのと全然違ったw
これは463に感謝しなくてはならない
468 :
Name_Not_Found :2008/11/19(水) 20:32:23 ID:f5hMCKE7
>>461 >関数の定義は以下の二通りで行われます。
>function a(){}
>var a = function(){}
ってーことは、その関数が定義されたスコープで、例えばグローバルスコープだったら、
for(var prop_name in window){
if(typeof prop_name == "function"){
// ここで入力内容とwindow[prop_name]をごにょごにょする
}
}
とかすればいいんじゃないかな。
あれ、はずしてる?
// ※「i」はtype="text"のinput要素 document.forms[0].i.style.width = "100px" ってhtml文書の<script>タグ内に直書きすりゃ ブラウザに表示したときにname属性値iのテキストフィールドの幅が100pxになるよな? 実際そう動くんだが、なぜかPC(※)によってはうまく動かない時があるんだ。 「うまく動かない」っていうのは、ブラウザ上に表示されたときに幅が変わっていなくって マウスのポインタをこのテキストフィールドの上に持っていくと 急にJavaScriptが動いて幅が100pxに変わるんだ。onmouseoverとか使ってないのに。 意味わからんと思うがマジ困ってるんで誰かなんか知ってたら教えてくださいorz ※検証用に使っているPCはすべてWinXPSP2 IE6
IEの再描画のタイミングが腐ってるからだろ
>>469 俺も違うケースだけど描画が同じ環境のPCでも変わることがあるよ。
たぶんPCの性能差の問題。
>>470 オレもそう思うんだが、なんとかせにゃいかんくって。。。
>>471 むしろ性能のいいPCのほうが起こっているんだが。。。
473 :
Name_Not_Found :2008/11/19(水) 21:38:50 ID:63HhrnTx
>>466-468 やっぱり正規表現を勉強するのが一番の近道のようですね。
>468
スクリプトはテキストエリアに入力されるだけであって、実行はされません。
(なんかすみません)
今回はどうもありがとうございました。
474 :
Name_Not_Found :2008/11/19(水) 22:57:04 ID:UD83etHO
アンカータグでPOSTしたくて以下のようにしたのですが IE6とOpera9では動いたのですが FireFox3.0.4でうまく動きません 何か間違ってるのでしょうか? <form method="post"> <a href="" onclick="submit(); return false;">hoge</a> </form>
なんか意図があって return false; な訳?
476 :
474 :2008/11/20(木) 00:29:21 ID:???
>>475 return false;しないとhref=""が効いてしまうから
で、そのsubmitはどこから沸いたの?
478 :
474 :2008/11/20(木) 01:10:19 ID:???
>>477 <input type="button" value="hoge" onclick="submit();" />から流用
Operaで動いたから採用した
普通にform.submit()すれば?
480 :
474 :2008/11/20(木) 01:35:13 ID:???
>>479 <a href="" onclick="form.submit(); return false;">hoge</a>にしてもダメだった
なにこの一問一答
479なんだけどさ
>>480 よ、君に言いたいのは、「form要素のsubmitを呼び出せ」ということであって、form.submit()などどそのまま書けってことじゃない
>>1 からテンプレを読んで質問してるんだろうから、それぐらいは理解してると思っていた俺がバカだった
自力でできないと思ったら直接答えをもらえるスレを見つけて教えてもらったほうがいい
483 :
474 :2008/11/20(木) 02:17:30 ID:???
>>482 やっと理解した。すまんね。
とりあえず以下のかたちで動いた
どうもありがとうございました
<form method="post" id="form_hoge">
<a href="" onclick="form_hoge.submit(); return false;">hoge</a>
</form>
最後にもうひとつだけ言っておく idを直接叩くぐらいならgetElementByIdかdocument.formsから参照したほうがいい
485 :
Name_Not_Found :2008/11/20(木) 15:50:52 ID:VAboEYhu
多次元配列を使いたいのですがうまくいきません ary[0] = [1,2,3,4,5]; ary[1] = [6,7,8,9,10]; ary[2] = [11,12,13,14,15]; document.wirte(ary[0][0]); ary[0][1]としたら2を ary[1][4]としたら10をとりたいのですが どうしても配列になってないのか、数字が出力されません どなたかご教授お願いいたします
var ary = [];
いやそれ以前に"wirte"って・・・
488 :
Name_Not_Found :2008/11/20(木) 17:35:39 ID:JXYA5/g4
解決しましたありがとうございました
Safari2ってJavaScript1.2なのか?ww
>>491 気をつけるも何も、そんな古いブラウザは完全に無視で構わないのでは。
古いNetscapeでは日本語1文字がString.lengthで2となるので一応気を付けて、
と同じレベルの助言だと思われ。
超初歩的なことを教えてください。 <form name="abc" 〜〜> formの各要素 </form> があって、formの各要素を操作するためには、そのスクリプトは、 formタグのあとに記述しないとダメなんでしょうか? ファイルの先頭から順次実行されていくということでしょうか?
>>494 超初歩というより超初期というべき。前提として今どきそんな
書き方しないしそのうち動かなくなるよ。
>>495 >前提として今どきそんな
>書き方しないしそのうち動かなくなるよ。
これはどういうことでしょう?
onloadとかを使うってことでしょうか?
俺って、頓珍漢?
497 :
Name_Not_Found :2008/11/21(金) 16:34:36 ID:oxkU/2Au
>>494 考え方自体は間違ってないよ。
JavaScriptはノード(大雑把に言うと要素、タグ)にアクセスして、
それらをゴニョゴニョするもの。だから、DOMにそのノードがぶら下がる
前ではどうにも出来ない。
んで、そのformのエレメントノードが生成されるのは</form>が読まれた後だから、</form>より後ろに書けばもちろんOK。
</form>より前でも、例えばwindow.onloadとか、なにかしらのイベントに
スクリプトの発動を任せることによって、目的のエレメントノードが生成
されるのを待つ、というのもよくある手段。
JavaScriptで、<input type="file"> で選んだローカルファイルの 絶対パスを調べることはできますか。 IEではvalue属性に絶対パスが入るそうですが、firefoxとsafariではファイル名のみが入ります。 絶対パスを調べる方法があれば教えてください。
Q16
>>499 できないということですね。ありがとうございました。
すみません、
>>498 の続きなんですけど、いいでしょうか。
やりたいこと:
1. あるフォームからサブウィンドウを表示させ、&l;tinput type="file"> を使ってローカルファイルを指定させる。
2. サブウィンドウで指定したファイルを、もとのウィンドウのフォームで送信する。
つまりサブウィンドウで複数のファイルを選択させ、それをメインウィンドウのフォームでまとめてアップロードするという仕様です。
こういうことって、
>>498 ができないと不可能なように思うのですが、なにかいい方法はありますか。
ActiveX
>>502 それはつまり、IE以外ではできないということでしょうか。残念です。
別ウィンドウにこだわらずに、同じウィンドウ内にボックスとしてフォームを表示してごまかすとか
505 :
Name_Not_Found :2008/11/22(土) 14:55:15 ID:Xs6hMzbT
一定時間でリンクとそれに使っている画像を変更することは出来ますか? 例えば <a href="11111.html"><img src="11111.gif"></a> 3秒後 <a href="22222.html"><img src="22222.gif"></a> 3秒後 <a href="33333.html"><img src="33333.gif"></a> 3秒後 <a href="11111.html"><img src="11111.gif"></a> … という具合にしたいです。 画像だけ変えたり背景色だけ変えるのは出来たのですが、リンクと画像をいっぺんに変えるのがどうも出来ません。 ご教示お願いします。
innerHTML
>>501 やりたいことって、こんな感じじゃないの?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
var count = 0;
function test() {
var a = document.getElementById('accum')
var b = document.getElementById('box')
var e = b.firstChild; b.removeChild(e);
a.appendChild(e); a.appendChild(document.createElement('br'));
b.innerHTML = "<input type='file' name='f" + (++count) + "'><\/div>";
}
</script>
</head><body>
<div id="box" style="border: solid blue 2px"><input type="file" name="f0"></div>
<div><button type="button" name="b0" onclick="test()">Add</button></div>
<div id="accum"></div>
</body></html>
>>505 var a = document.getElementById("hogehogelink");
var img = document.getElementById("hogehogeimg");
var hrefs = ["22222.html", "33333.html", "11111.html"];
var srcs = ["22222.gif", "33333.gif", "11111.gif"];
var i = 0;
setInterval(function() {
a.href = hrefs[i];
img.src = srcs[i];
i = (i+1) % 3;
}, 3000);
<a href="11111.html" id="hogehogelink"><img src="11111.gif" id="hogehogeimg"></a>
このようなjavascriptの記述があったとします。 var cf = new Crossfader( new Array('cf1','cf2','cf3','cf4'), 500, 2000 ); このcf1,cf2,cf3,cf4を毎回ランダムに並び替えて、 var cf = new Crossfader( new Array('cf3','cf2','cf1','cf4'), 500, 2000 );や var cf = new Crossfader( new Array('cf3','cf4','cf2','cf1'), 500, 2000 ); などのようにする方法はありますか。 変数とループを使って、 for (num=0;num<4;i++){ … … 'cf' + num … … } のような記述を理想としています。
510 :
509 :2008/11/22(土) 23:30:44 ID:???
forループの記述を間違えました。 ×for (num=0;num<4;i++){ ○for (num=0;num<4;num++){ です。
512 :
Name_Not_Found :2008/11/23(日) 16:22:07 ID:iwJeSzla
var length = 19; var num = Math.floor( Math.random() * length ); としたばあい、numには 0〜18の値がランダムで代入されますか?
うん
514 :
Name_Not_Found :2008/11/23(日) 23:46:06 ID:iwJeSzla
<div class="a0"> <a href="mountain.html"> mountain </a> </div> <div class="a1"> <a href="river.html"> river </a> </div> <div class="a2"> <a href="ocean.html"> ocean </a> </div> … のように、1行目は連続する数字を含む文字列、2行目はそれぞれ異なる文字列、3列目は全て同じ文字列 をjavascriptで書きたいと思っています。 --------------------------------------------------------------- for ( i=0; i<3; i++ ){ document.write( '<div class="a' + i + '">' ); //1行目 … //2行目 document.write( '</div>' ); //3行目 } --------------------------------------------------------------- ここまでは出来たのですが、2行目の記述がどうしても思いつきません。 どなたかご教示お願いいたします。 分かりにくい説明ですみません。
515 :
Name_Not_Found :2008/11/23(日) 23:47:22 ID:iwJeSzla
>>513 ご解答ありがとうございます
リロードしていませんでした。
>>514 あらかじめ2行目のURLとテキストを配列に格納しておく。
517 :
Name_Not_Found :2008/11/23(日) 23:58:18 ID:iwJeSzla
urlはテキストに.htmlをつければいいから格納する必要ない
javascriptの外部ファイル呼び出しで、パスに「~」が入っているとエラーが出てしまうのですが どうすればいいのでしょうか。
520 :
519 :2008/11/24(月) 01:25:43 ID:???
どうやら違ったみたいです。 <script…><!-- ****▼▼**** … … … … ****▲▲**** // --></script> こういう記述があって、****▼▼**** 〜 ****▲▲**** の部分を抜き取って function aaa(){ ****▼▼**** … … … … ****▲▲**** } このような外部ファイルを作り、これをサーバーにアップしてheadタグ内に呼び出し、 <script…><!-- aaa(); // --></script> このように記述すれば同じように動作するはずですよね? なぜかエラーが出てしまいます。
そらそうよ・・・
なんでそんな采配のアレを言われなあかんのじゃ!!
スコープという概念はどうでもいいんだな。
ああそれだなorz
526 :
520 :2008/11/24(月) 13:20:23 ID:???
え、ダメなんですか? もちろん****▼▼****このような記述は実際には書いてありません。 どうすればいいんですか???
527 :
Name_Not_Found :2008/11/24(月) 14:07:14 ID:y9QYlAKD
初歩的な質問かも知れませんが、 チェックボックスで現在選ばれている項目のvalueを知りたいのですが、 document.getElementsByName("hoge")[i].checked; をループで回して一致したところでvalueを取り出すという方法より簡単なやり方はありませんか?
>>526 元のソースはグローバルスコープ
君が書いたのは関数aaa内のローカルスコープ
プログラムによっては違いが出るかもね
ソースを全部読んでみないことには何とも言えない
>>527 valueを取り出すチェックボックスが一つでいいなら
全てのチェックボックスにイベントハンドラでも仕込むとか
529 :
Name_Not_Found :2008/11/24(月) 15:26:56 ID:y9QYlAKD
>>527 では、イベントハンドラでやってみようかと思います。
ありがとうございました。
530 :
Name_Not_Found :2008/11/24(月) 23:50:51 ID:Bvs2hz28
<a href="URL" target="_blank">hoge</a> を <a href="URL" target="_blank"><img src="URL"></a> というように innerHTML.replace で置換させたいのですが 正規表現をどのように書けばいいのか四苦八苦しています。 頭が固くて嫌になるのですが、教えていただけませんでしょうか?
replace(/<a href="(.*?)">.*?</a>/g,'<a href="$1"><img src="$1" /></a>') 今適当に書いたから動くかどうかは知らん
$1に余計なものまで取り込んでるね。動作には支障ないだろうけど。 あと検索部のスラッシュは要エスケープ。
ん?余計なものってなんだべ
'target="_blank' まで取り込んじゃってんじゃない? これがIMGタグの方にも移植されるね ただIMGタグにとっては無意味な属性値なのでブラウザは単に無視するだろう だから動作には支障はないだろう ってことかと
535 :
530 :2008/11/25(火) 14:24:21 ID:???
536 :
Name_Not_Found :2008/11/25(火) 14:46:35 ID:X85ESXNq
IE7 divの、 onmouseoverでフェードイン、 onmouseoutでフェードアウト、 を書いたんだけど、 そのdivの子divも同じイベントに反応してハンドラが動いちゃうんだけど、 なんで??? わけわかめ おねがいします・・・。
>>536 >>2 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。
そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!)
長い(1レスに入らない)場合はアップロードしてURIを貼る。
538 :
Name_Not_Found :2008/11/25(火) 15:20:29 ID:X85ESXNq
>>537 まとめた、
あとは頼むぜ
//html/////////////////////////////////////
<div id="relation_prpd_box">
<div>
<div id="relation_prod_header">
<div id="relation_prod_title"></div>
<div id="relation_prod_close"><img id="relation_prod_closebutton" src="132.jpg" alt="閉じる" width="71" height="21" border="0"></div>
</div>
</div>
</div>
//js/////////////////////////////////////
/*イベントハンドラ/フェードアウト・・・同様にフェードインも定義*/
function relationProdBoxFadeOut( evt ){
new Effect.Fade( $(_relationProdBox.targetId), {
from: 1.0,
to: 0.3,
afterFinishInternal: function(effect)
{
$(_relationProdBox.targetId).style.filter='alpha(opacity=30)';
$(_relationProdBox.targetId).style.mozOpacity=0.3;
$(_relationProdBox.targetId).style.opacity=0.3;
}
}
);
}
Event.observe( $(_relationProdBox.targetId), 'mouseover', relationProdBoxFadeIn, false );
Event.observe( $(_relationProdBox.targetId), 'mouseout', relationProdBoxFadeOut, false );
使ってるライブラリくらいちゃんと併記しろ
540 :
Name_Not_Found :2008/11/25(火) 15:58:35 ID:X85ESXNq
よよいのよい
なにこいつ?
544 :
536 :2008/11/25(火) 22:02:44 ID:???
自己解決しました
545 :
Name_Not_Found :2008/11/25(火) 23:09:05 ID:X85ESXNq
538です。
>>543 正常動作なのか・・・。
>>event.targetでも見て、子エレメントなら処理を行わないようにする
なるほどね
さんきゅー
<form name="aaa"> <input name="bbb" type="radio" onClick="showInTextArea('ひとつめ')" checked />ひとつめ <input name="bbb" type="radio" onClick="showInTextArea('ふたつめ')" />ふたつめ <input name="bbb" type="radio" onClick="showInTextArea('みっつめ')" />みっつめ <textarea name="ccc"></textarea> </form> <script type="text/javascript"> <!-- function showInTextArea(text) { ; /*なにしていいかわかんない*/ } // --> </script> こんな感じで、ラジオボタンのチェックを変えるとテキストエリア内の文字を動的に変更するような スクリプトを書きたいんですが、documentオブジェクトから要素の取得をするやり方は分かるのですが、 今回のように「挿入」する方法をわたしのチンパン脳では思いつけんのです。 諸兄のアドバイスを乞いたく存じます。
要素を取得まで出来るんなら textareaを取得して、それのvalueを書き換えれば良いよ 挿入に拘るんならinnerHTML こっちならtextareaを使う必要もなくなるからデザインとかに懲りたい向きにはこっち
548 :
546 :2008/11/26(水) 10:39:09 ID:???
<form name="aaa">
<input type="radio" name="bbb" onClick="showInTextArea('ひとつめ')" checked />ひとつめ<br />
<input type="radio" name="bbb" onClick="showInTextArea('ふたつめ')" />ふたつめ<br />
<input type="radio" name="bbb" onClick="showInTextArea('みっつめ')" />みっつめ<br />
</form>
<textarea name="ccc" id="ccc"></textarea>
</body>
</html>
<script type="text/javascript">
<!--
function showInTextArea(text) {
document.getElementById("ccc").value = text;
}
// -->
</script>
>>547 上記でほぼ思い通りに切り替わるようになりましたが、唯一…
あくまでinputのonClickでイベントを開始しているので、最初からチェックの入っている
「ひとつめ」だけは最初からテキストボックスに文字を入れることができませんでした。
(クリックしなおさないと文字が入らない)
ページをロードした瞬間チェックが入っているか否かを取得して関数のキックは無理でしょうか?
549 :
Name_Not_Found :2008/11/26(水) 11:06:35 ID:LHihruDV
>>548 onload時にinputを見ていってチェックが入ってればshowInTextArea()
を呼んでやったらいいのでは?
試してないから動くかどうかわかないけど
window.onload =function(){
for( var i =0; i < forms["aaa"].input["bbb"].length; i++){
if( forms["aaa"].input["bbb"][i].checked ) showInTextArea(forms["aaa"].input["bbb"][i].value)
}
}
なるほどonloadですか! かなりいけそうです。どうもありがとうございました。感謝します。
質問です。 対象ブラウザはIE7,Firefox3,Opera9で。 やりたいことは、appendChild の別名をプロトタイプで設定したいのです。 親.appendChild(子) => 親.add(子) ということ。 イメージとしては なんちゃら.prototype.add = function(element) { return this.appendChild(element); } こんな感じになるのかと漠然と思ってるんですが、「なんちゃら」の部分が 分からず探している状態です。 HTMLElement にしたら、いくつかのタグでは通ったんですが、select タグで通らず。 (「通らず」の挙動はブラウザでバラバラ) ここで行き詰ってしまいました。 今のところ、createElement と getElement の直後で element = document.createElement(tag); element.add = element.appendChild; ってなことやってるので、実現できてるって言えばできてるんですが、 どうも気持ち悪いので、分かる方にご教授願いたいです。
553 :
Name_Not_Found :2008/11/26(水) 23:55:22 ID:LHihruDV
var Nanchara =Class.create(); Nanchara.prototype ={ initialize: function( _parentElem ) { this.parentElem =_parentElem; }, add : function(element){ return this.parentElem.appendChild(element); } } new Nanchara( $('parent') ).add( $('child') ); ってことかな?
554 :
Name_Not_Found :2008/11/26(水) 23:59:45 ID:LHihruDV
( new Nanchara( $('parent') ) ).add( $('child') ); だったか・・・、
555 :
Name_Not_Found :2008/11/27(木) 00:15:38 ID:EVh5utMf
nanchara =new Nanchara( $('parent') ); nanchara.add($('child')).add($('Grandchild')).add('Great-grandchild').add(..... ってできるといいなぁ 誰か考えて。
556 :
Name_Not_Found :2008/11/27(木) 00:21:55 ID:EVh5utMf
これでいけるか、 var Nanchara =Class.create(); Nanchara.prototype ={ initialize: function( _parentElem ) { this.parentElem =_parentElem; }, add : function(element){ return ( ( new Nanchara( $('parent') ) ).add( element ) ); } }
557 :
Name_Not_Found :2008/11/27(木) 00:25:37 ID:EVh5utMf
うざいってか? var Nanchara =Class.create(); Nanchara.prototype ={ initialize: function( _parentElem ) { this.parentElem =_parentElem; }, _appendChild : function(element){ this.parentElem.appendChild(element); }, add : function(element){ return ( ( new Nanchara( $('parent') ) )._appendChild( element ) ); } }
途中の所失礼します 今まで、 document.getElementByTagName などを使ってページの書き換えスクリプト(繰り返し、ifなどがやや多い)を作って使用していました。 が、XPath対応ブラウザも増えてきたことですしこの際スクリプトもXPath対応にしたいと思うのですが、XPathのチュートリアルとリファレンスがあるようなサイトがありましたら教えていただけると幸いです。
560 :
551 :2008/11/27(木) 06:44:22 ID:???
>>552 レスありがとうございます。
>selectで動作が不安定なのは、
>DOMのHTMLSelectElementでaddというメソッドが規定されているから。
うあそれは全く知りませんでした。
それだとやめといた方が融通が効くかな…。
今の方法で納得しておきます。
561 :
551 :2008/11/27(木) 06:45:55 ID:???
って、書き込んだ直後に思いついた。 名前変えりゃいいじゃん俺。push とか…。 またちょっと試してきます。
ecmaの方から誘導されてきました。 ボタンA(キーコード53)を押すと自動で ボタンB(キーコード55)を押すスクリプトはどう書けばいいでしょうか。
ボタンBがへっこむってことだな? 「さすまた」みたいな道具で2ボタン同時押し。
>>562 ブラウザ上でキー出力はできない
Windows限定でよければWSH(JScript)使えばできるだろうけど、スレチ
すみません リンクをクリックした瞬間(またはクリックしたまま離さない状態)の時にも、 ステータスバーにリンク先を表示させないようにしたいのですが、Javascriptで可能でしょうか? もし出来るなら、教えていただきたいのですが・・・ onMouseOver="status='〜〜';return true"で、ステータスバーにリンク先でない別の文字列を表示させるところまでは出来るのですが リンクをクリックしたときにも全く表示させないようにしたいのです
>>566 誰がスパムサイトの幇助なんかするかwww
━━━本スレに書く事を許される者は以下の通り━━━━━ 一、ユーザに迷惑となるスクリプトを書かない者
>>567 >>568 すみません。社内用のホームページで利用したいのです
ソースみれば分かってしまうのは仕方ないとして、
出来る限りサーバーのフォルダ構造を見せたくないので・・・教えてもらえませんか?
しつけーよ
>>569 見られたら悪いフォルダ構造にするお前がおかしい
まぁ、スパムサイトだろうけどなwww
572 :
Name_Not_Found :2008/11/27(木) 21:13:33 ID:EVh5utMf
ふらっしゅ
>>569 マジレスすると人を殺すための知識を
私は善人で絶対悪用しないので教えてください!
っていう人間に教えるわけないよね
しかも社内サイトで比較的悪用される可能性が低いんだからさ
574 :
551 :2008/11/27(木) 21:53:36 ID:???
>>551 の件、HTMLElement.prototype.push として解決しました。
(OperaとFirefoxで確認。IEは無視ってか条件分けして元の処理のまま)
ありがとうございました。
>569 フォルダ構造を見られたくないだけなら、リンク先は常に固定にして、 「?page=ページ名」をサーバ側で解釈する方が確実ですね。
ひょっとしてJavaScriptとか全然関係なくて httpd.confの Options Indexes FollowSymlinks MultiViews を消せばいいだけの話なんじゃないかという気がしてきた
>>573 >>575 どうもすみません。ありがとうございます。
質問ばかりで申し訳ないのですが、
リンク先は常に固定して「?page=ページ名」の解釈というのは、どうやるんでしょう?
<a href="../xxx/○○.fp5">業務日報作成</a>
みたいな状態になってるんですが・・・
>>577 Apacheのmod_rewriteだろJK
お前、そんなに詳しくないなら、管理とかするな
>>577 ……見られたくないとか以前に、基本が丸っきり抜けてるんですけど。
いまのあなたは、サンダル履きで山歩きの経験皆無なのに、
「山奥でキノコ狩りするんで毒キノコの見分け方教えて」と言ってるよーなもんです。
危なくて何も言えないですよ。ヘタなこと言ったら、
どんな間違った使われ方するかわかったもんじゃない。
遭難して死ぬのがオチ。ヘタな操作でサーバのデータぶっ飛ばすのがオチ。
どうでもいいからjavascriptの話しろよ
ただ煽りたいだけのテンプレ厨の自演と思われ。
htmlのformを使って入力データをブラウザからサーバに送っています。 文字コードがhtmlはShift-JIS、サーバ側はEUC-JPのため、 <input type="button" value="送信" onclick="org=document.charset; document.charset='EUC-JP'; document.フォーム名.submit(); document.charset=org;"> という方法で送信ボタンクリック時に文字コードを変換しています。 実行ボタンを押して送信する場合はこれでうまくいくのですが、 フォームに入力してそのままエンターキーを押すという方法で送信した場合は、 このスクリプトが実行されないので望んだ結果になりません。 エンターキーを押して送信した場合でもこのスクリプトを実行させる方法はありますでしょうか。 onEnterのようなイベントハンドラがないかと思いさがしたのですが見つけられませんでした。 以上よろしくお願いします。
onSubmitとかダメなん
>>582 <form action="javascript:〜" method="post">
585 :
582 :2008/11/28(金) 02:46:05 ID:???
>>583 ありがとうございます。
<form onSubmit="org=document.charset; document.charset='EUC-JP';
return true; document.charset=org;">
で望む結果を得ることができました。
>>584 ありがとうございます。
<form action="javascript:org=document.charset; document.charset='EUC-JP';
document.フォーム名.action='
http:// 〜'; document.InForm.submit(); document.charset=org;
name="フォーム名" method="GET">
としてみましたが、文字コードは変換されませんでした。それとエンターキーを2回押さないと送信されなくなりました。
もう少しいろいろと試してみます。
お二方ともどうもありがとうございました。
Javascriptを使ってFlashコンテンツのボタンをクリックとかできるかね?
>>586 できるよ!
でも、Flash側(ActionScript)でも、JavaScript受け取る準備をしておかないといけない
588 :
Name_Not_Found :2008/11/28(金) 12:58:05 ID:Qe7lx2vO
すみません、 document.getElementsByTagName で取得するタグを複数してすることはできないんでしょうか? document.getElementsByTagName(img,input) document.getElementsByTagName(img|input) などいろいろやってみましたがダメでした。
>>587 やっぱりそうなるか。
じゃ既存のFlashコンテンツをJSで操作することは不可能なのか…。
>>588 なんで
document.getElementsByTagName(img)
document.getElementsByTagName(input)
と2行にわけるのがダメなのか
一緒に処理したいなら、2行で取った後にまとめればよいと思うのだけど何か理由あり?
>>590 説明不足ですみません。その方法でもいいのですが、とあるライブラリを
改造している為、最終的に1つの配列にまとめる必要があります。
どうやらdocument.getElementsByTagNameで取得したものは配列ではないようで、
concatで結合することができませんでした。
>>591 getElements〜で返ってくるのはNodeList。
んで
>最終的に1つの配列にまとめる必要があります
本当に配列でいいの?
一つのNodeListじゃなくて?
配列でいいんだったらNodeListを配列に変換すればいいだけだけど
一つずつ取り出して、配列に突っ込めばいいじゃん
>>592 勝手に混乱してました。。ごめんなさい。
最終的には1つのNodeListでした。
「NodeList 結合」などで検索しましたが、NodeList同士を結合する関数は
用意されていないんでしょうか?
595 :
592 :2008/11/28(金) 14:47:02 ID:???
>>594 うーんNodeListをまとめる方法ないんじゃないかなあ
少なくとも俺は知らないんで他の識者の皆さんに任せた
まず、getElementsByTagNameで取得したNodeListにすべて共通のclassを付加して その後に、getElementsByClassNameですべてのNodeListを取得すればいい getElementsByClassNameが実装されてないブラウザでは、ライブラリがあるからそれを利用すればいいよ
597 :
594 :2008/11/28(金) 15:09:26 ID:???
>>595 いろいりご指摘頂きありがとうございました!
>>596 ありがとうございます。
なるほど、一旦classを付けるんですね。
試してみます。
598 :
Name_Not_Found :2008/11/28(金) 15:14:27 ID:oS+ZctWs
>>597 >>593 の言うように順に取り出してまとめてやればいいんじゃないのかね
やっつけ仕事だけど
<html><body>
<form>
<input type="text" name="text1">
<input type="button" name="button1">
</form>
<a href="link1" name="link1">link1</a>
<a href="link2" name="link2">link2</a>
<a href="link3" name="link3">link3</a>
</body>
<script>
n1=document.getElementsByTagName("input").length;
n2=document.getElementsByTagName("a").length;
array1=new Array();
for(i=0;i<n1+n2;i++)
if(i<n1)array1[i]=document.getElementsByTagName("input")[i];
else array1[i]=document.getElementsByTagName("a")[i - n1];
for(i=0;i<array1.length;i++)alert(array1[i].name);
</script></html>
>>594 JavaScript 内だけで完結させるなら
NodeList を Array に変換すればいい
Array.prototype.slice.call を使ったり、ベタにやるなら
var elems = document.getElementsByTagName("div");
var nelems = elems.length;
var list = new Array(nelems);
for (var e = 0; e < nelems; e++) {
list[e] = elems[e];
}
で list を使う
>>596 の方法だと不要な class 属性値がつくことになるんで
思わぬところで副作用がでる可能性が…
>>599 >思わぬところで副作用がでる
というかNodeListではあるけどclass付与したときの静的キャッシュのような扱いになるから
それを理解して使わないとまずいよね
あと一時的に付与したclassを除去する関数もいるだろうな
>>596 ライブラリのgetElementsByClassNameって戻り値はNodeListじゃなくて配列じゃない?
OBJECTタグで読み込んだMFC ActiveXコントロールと、JavaScriptと連携して、 ActvieXコントロール側で保持している文字列を、サーバにPOSTしようとしています。 JavaScript側で、MFC ActiveXの保持している文字列を取得するには、 どういった方法があるのでしょうか。
>>601 実装による
ネイティブの getElementsByClassName がある場合、それを使うよう実装されている場合は NodeList をそのまま返すものが多い
ライブラリ内でエミュレートしているものはだいたい Array に検索結果を突っ込んでいるので、Array オブジェクトがそのまま返ってくる
要は、ライブラリがしっかりドキュメントなんかで「絶対 Array 返す」とうたっていない場合は返値のオブジェクトが何かわからんので注意しろ、ってこと
>>587 ActionScript → JavaScript は ExternalInterface.call で
可能とは知ってたけど、逆も出来るん?
元質問者とは違うけど、自分も教えて欲しいです。
606 :
Name_Not_Found :2008/11/29(土) 08:19:04 ID:burGaZI6
すいません JavaScriptで 「/」が文字列の中にあったらってどのように表記するのでしょうか? if ( document.form.com.value == '' ) { alert( "コメントを入力してください" ); document.form.poss.focus(); return(0); } で document.form.com.valueの中に/を含む文字列があったら↑の中のチェックで引っかかる ようにしたいんです、、、 ご助力いただけますとありがたいですっ
if ( document.form.com.value.indexOf("/") != -1 ) alert("'/' があるよ");
if (document.form.com.value.indexOf("/") >= 0)
>>605 flash.external.ExternalInterface.addCallback('hoge', this, moge);
のようになってるFLASHの場合、JSで hoge() を実行すると、
FLASHの moge() が実行される。
例えば0〜9999から重複しない値を得るには 重複してないか確認するとか 全数を配列に記憶しておくとか スマートじゃないのでw あらかじめ筋を立てておくといいんじゃないかな? 例えば 1桁は0〜9の10個の数字のArrayとする。 これを必要数の桁用意する。 各桁を任意の順にsortしておく この各桁毎に10数えるカウンタを用意する 後はこのカウンタごとにカウンタの示すArrayの要素の値を 与えていけば… コードで書けって?wだって今やっつけで書き込んでるだけだもん ていうか、どこのレス?wwwスルーしてヨシ!w
611 :
Name_Not_Found :2008/11/29(土) 21:23:51 ID:olu7+PcJ
f1というidのiframeがあったとして document.ElementById("f1")で取得したiframeのオブジェクトから そのiframe内に表示しているwindowオブジェクトを取得するには どうしたらいいですか?
612 :
611 :2008/11/29(土) 21:25:46 ID:olu7+PcJ
document.ElementById → document.getElementByIdでした
613 :
Name_Not_Found :2008/11/30(日) 00:37:01 ID:paqqJfOA
setTimeout()に0を指定して、()で囲んだ関数リテラルを渡してるスクリプトを 発見したんですが、この書き方のメリットって何でしょう?? setTimeout((function(){ //実行分 }), 0);
ない
>>613 JavaScript実行しっぱなしだとブラウザが動かなくなるっしょ
setTimoutとか使って一瞬でもJavaScript終了してやるとブラウザ固まらなくてユーザーの不満度が減る
この目的のためには第二引数は0ミリ秒指定でもオッケーなんだけど、それが各ブラウザの仕様として担保されてる事なのかどうかは俺は知らない
誤解を招きそうな書き方になったが訂正はしない
UI スレッドのキューに push してると考えればいいと思う var a = []; for (var i = 5; i--; ){ setTimeout(function() { a.push(i); }, 0); } 何ループにして何秒かかっても結果は全部 0 になる
618 :
Name_Not_Found :2008/11/30(日) 09:10:59 ID:paqqJfOA
>>615-617 ありがとうございます!!
ずっとsetTimeoutに渡された関数に気をとられてたんですが
setTimeout自体の動作に理解が足りてなかったです。。
めっちゃ助かりました。
皆さんが、1msecでもjavascriptの実行時間を早くするために心がけていることはありますか?
変な書き方をしないで、自分以外の人にも読んでもらいやすくする
例えば、imgエレメントにhref属性を付加するならsetAttributeですけど、onclickなどのイベントハンドラを付加するにはどうしたら良いのでしょう? (imgNode.onclick = "hogehoge();";みたいじゃない書き方を探しています)
Q13?
>>622 あ、テンプレにあったんですね
すみません
でも、Firefoxなんですよねぇ
>>619 信じられないくらいに遅いIEでの文字列連結を考え、
大量に文字列を連結する場合には、配列に入れてからjoinさせるという定番対策とか。
>>623 FFxなどDOM Eventに準拠したブラウザではaddHandler()、
IEはattacheEvent()。あとは検索すれ。
>>619 有名なプログラムの本の高速化の章に書いている言葉を送ろう
高速化しない。
>>625 > addHandler()
すまんがこれはどのインターフェイス? DOM2? DOM3?
>>626 そんなことが書いてあるのかw
だけど本当そうだよね、拘りすぎるとドツボにはまる。
音質に拘るのと似てる気がする。
>>628 実際JavaScriptネタでググってみると、
時代遅れの酷いコードが上位に来る事も頻繁にあるので、
もうちょっと考えてコードを書いて欲しいなとは思うね。
>>626 『プログラミング作法』にも書いてあったな、ソレ
否、高速化はするべきだ
iframeでhtmlのソース読み込めるんだな これでやりたい放題できそうだ
>>632 マジ?それ外部サイトのHTMLでは無理でしょ?それできたらマジすごいんだけど。
>>632 初耳だ。それをやろうとして挫折したので是非知りたい
どうやるんだ?あ、もちろんドメインは別で。
>>633 ,634
お前らはAjaxライブラリ群を知らんのかwwwざまぁ
>>635 ajaxライブラリに何を使おうが、ブラウザの制限なのだからサーバを介さない限り
外部サイトのHTMLはJSではアクセスできないでしょ? 何か勘違いしてないかい?
>>637 だからそれはサーバを介した中継プログラムを使っているんでしょう。
技術的に無理なんだって。本当に仕組みわかって話していますか?
>>638 javascriptだけで出来るのにwww
もしかしてjsonpのこといっているのかい?今話しているのはただのHTMLの ことだよ。それはできないと思う。
できたとしてもセキュリティホールだからなぁ…
生粋のjavascriptだけでw
約一名性格の悪い嘘つきがいるようだ。ソースも示せないのだから無視でいいよ。
自分が知らないと、嘘とするw 頑張って、prototype.jsと睨めっこしてなよ
嘘つきじゃなくて勘違いなんだろうね。
>>644 「自分が知らない」じゃなくて「世界中の人が知らない」だと思うw
647 :
632 :2008/11/30(日) 23:32:24 ID:???
一応言っておくけど、635ではないからな ローカルでしか試してない。たぶん無理だと思う 昨日からjs始めたばっかりで、よくわかってない iframeをelementCreateしてbodyあたりにappendChild onreadychangeで読み込み終了ならiframeのdocument.all[0].innerHTMLみたいな実装をした
635は今頃一生懸命弁解を考えているだろうな…。まぁ逃げるか。
>>635 は
SSIが使える鯖で、.htaccess使ってました><
こんなオチ?
急にレスが増えたと思ったらなんだこりゃ
ただのかわいそうな子
652 :
Name_Not_Found :2008/12/01(月) 02:22:47 ID:FN5hPgGj
>>652 jquery触ってないから何に使うのか良く分からんけど
とりあえずoperaとsafariでも増えるね
ライブラリが悪いのか使い方が悪いのか知らんが
654 :
Name_Not_Found :2008/12/01(月) 16:58:14 ID:Hy7eY5VA
初歩的かもしれないけどごめんなさい。
redirect Scriptなんですが、
var browser_type=navigator.appName
var browser_version=parseInt(navigator.appVersion)
if (browser_type=="Microsoft Internet Explorer"&&browser_version>=4)
window.location.replace("
http://hogehoge.com ")
else
window.location="
http://hoge.com "
って書いてしまうと、IE4以上のIEすべてがリダイレクトされますが、IE7を除外したい場合
だとか、IE6だけをリダイレクトしたいときにはどのように書けばいいんでしょうか?
browser_version>=4を書き換えればいいんじゃないですかね
セミコロンが無くてもなんか動作はしていたの気付きませんでした…
if (browser_type=="Microsoft Internet Explorer"&&browser_version<=6)
こんなんかな〜?とか思ったけど、
>>656 さんのやってみたら
バチリいけました、ありがとうございます。
セミコロンがないと、JavaScriptインタプリタが改行後にセミコロンがあると 解釈して勝手にセミコロンを入れるから実行はできるが、バグの元になるぞ
>>653 たしかに opera でもなりますねぇ。
一応説明では ajax の呼び出しが完了後に呼ばれるので
一回のみのはずなんですが。。。
もう少し調べてみます。
660 :
652 :2008/12/01(月) 19:16:46 ID:???
っていうか ajaxStart() 自体が複数回呼び出されてるみたいです
>>660 一回コレを呼ぶ必要があるんじゃない?
$("#result").unbind();
662 :
661 :2008/12/01(月) 20:53:41 ID:???
一回ってか毎回ね
663 :
652 :2008/12/01(月) 22:14:58 ID:???
>>661 おっしゃるとおりでした!
裏で何が起こってるのか分かりませんが、下記のコードで解決しました!
$("#result").ajaxStart(function(){
alert("通信を開始します");
});
$("#result").load("./sample.txt", function(data, stat){
alert(data);
});
$("#result").ajaxComplete(function(){
alert("complete");
$("#result").unbind();
});
ありがとうございます!
1画面の中に複数の<DIV>タグで区切られたinput Textがあります。 <DIV> <input type="text" id="TextBox1"> <input type="text" id="TextBox2"> <input type="submit" id="Button1"> </DIV> <DIV> <input type="text" id="TextBox3"> <input type="text" id="TextBox4"> </DIV> 2つ目のDIVタグの中にはボタンがなく、あるイベントで2つのテキストの内容をサーバーにPOSTしたいと思ってます。 1つ目のDIVタグはSubmitボタンがあるので、そっちに処理を任せるのですが、 2つ目のDIVタグ内の内容をサーバーにPOSTでsubmitするにはどのようなスクリプトになるでしょうか。 環境WindowsXP ブラウザIEのみ
665 :
664 :2008/12/02(火) 22:12:05 ID:???
自己解決しました DIVタグの周りにFORMタグをかぶせて、 document.formsのsubmit()でいけました。
function hoge(){ if(…)return true; return false;} <input type="submit" onclick="return hoge()" /> ラジオボタンで何も選択されてないとき次のページに飛ばないようにするための 書き方を探したらこんな風になっていたのですが、これのonclick="return hoge()"がいまいち理解出来ません。 onclick="hoge()"だったら返却値がfalseなら飛ばないんだろうなぁと思うのですが、return??
>onclick="hoge()"だったら返却値がfalseなら飛ばないんだろうなぁと思う のならonclick="true"やonclick="false"にすればどうなるか試してみればいいんじゃないかな
書籍スレが死んでるのでこちらで質問させてください。 まったくの初心者で一からJavaScriptについて学びたいので教本になるものを探しているのですが、 ・基礎 Ajax + JavaScript ・基礎からのJavaScript ・WebクリエイティブのためのDOM Scripting これらの中から選ぶならどれが良いでしょうか? また、他にもお勧めのテキストなどあれば教えてください。
>>668 他のプログラミング言語の経験はありますか?
670 :
668 :2008/12/03(水) 04:53:10 ID:???
>>669 まったくの初心者で他のプログラミング言語の経験もありません。
HTML+CSS手打ちでのサイト作成、DW操作ができる程度です。
全部読めばいいよ
ttp://www.html5.jp/library/graph_line.html ここのライブラリを使って折線グラフを書くことはできました。
書いた後にcanvasをまっしろにしたいのですができません。
(F5を押すと当然消えますが、プログラムで消すようにしたいです)
グラフは消えるのですが、文字はどうやっても消えません。。
DOMのappendChildで<DIV>を作ってるようなのですが、
どうすればいいのでしょうか?
obj=document.getElementById("canvas");
for(i=0; i<obj.childNodes.length; i++){
obj.removeChild(obj.childNodes[i]);
}
こんなことをいろいろやってます。
基礎からのJavaScriptしかないじゃん。
674 :
668 :2008/12/03(水) 10:05:13 ID:???
>>673 この3冊は書籍スレの過去レスから調べたものです。
基本は押さえていると思い挙げましたが、他にお勧めの本があるかと思い質問いたしました。
初心者はコレ読めば良いだろうなと感じたもので結構ですのでお教えください。
オレのオススメは 「JavaScript+Ajax プログラミング・テクニック」佐藤信正著 メディア・テック出版 これ読めばJavaScriptの各種リテラルとかオブジェクトの関係とかがよく分かると思う。 比較的情報が新しいし、JavaScript全体を見渡すという点では初心者でも読みやすいよ。 ただしもっと奥深く知りたい場合は、他の本の方がいいかも。 本当なら初心者だろうが何だろうが、サイ本読めと言いたいけどね。
contentEditableで、 <p><font size="1">1行目</font></p> [enter] をすると <p><font size="1">1行目</font></p> <p></p> となってその際に、 2行目をクリックして選択した時に、 selection.createRange().parentElement()をクリック時イベント等で取得すると、 カーソルが2行目にあるのに、 1行目のpタグが取得できるんですが、 どうしてでしょうか? mouseupイベントでsetInterval等で少し時間(500ms〜マシンスペック依存ぽい)を置いて、 もう一度parentElement調べると、 2行目が取れたりしててよくわかりません。
677 :
Name_Not_Found :2008/12/03(水) 16:33:33 ID:gwGRSZ+n
>>672 DOMを使ってDIV要素などの文字を格納した要素を生成し、
Canvasの領域上にうまく重なるように、
座標を指定した上で、その要素をappendする。
CANVAS使ってないんじゃね?
678 :
668 :2008/12/03(水) 17:08:44 ID:???
>>675 レスありがとうございます。
サイ本読むのが1番だとは思うのですが、最初にサイ本読むと
わけもわからずやる気が無くなりそうで恐れてます。
情報が新しいというのは良いですね。早速参考にさせていただきます。
getComputedStyle を高速化する方法って何かある? document.defaultView をキャッシュしても遅いもんは遅い DOM ツリー操作 → getComputedStyle → DOM ツリー操作 にならないよう気をつけてもダメなもんはダメ どうしたらいいか知ってる人……いる?
>>679 便乗だが、こういうパフォーマンスチューニングでこれは読んどけっていう
サイトや本ってないですか。
昔は、WEBページに動き・見た目を良くする為の1つの方法としてJavaScriptが 使われて来たと思いますが、現在はFlash / ShilverLight等の出現もあってJavaScriptに 需要も含め求められる事はかなり少なくなって来ている気がするのですが、 実際のところどうなんでしょうか? ・入力値チェック ・ブラウザの制御 ・Ajax
・ロマン
javascriptの歴史の中で今が最盛期
684 :
Name_Not_Found :2008/12/03(水) 22:52:29 ID:gwGRSZ+n
>>681 レスありがとうございます。
サイ本読むのが1番だとは思うのですが、最初にサイ本読むと
わけもわからずやる気が無くなりそうで恐れてます。
情報が新しいというのは良いですね。早速参考にさせていただきます。
あればテンプレ入りしてるんじゃないかな、うん
>>681 Flashは「四角い領域の中だけ」しか自由にならない。
「全ページがFlash」のページにする覚悟があるならいいけど。
Silverlightは言語JavaScriptじゃないの。もう1つあるらしいが。
>>684 初めてのJavaScriptの方読んでみたら?薄いからすぐ読めるし。
Ajax使えよ
behavior面白いな
690 :
Name_Not_Found :2008/12/04(木) 16:04:08 ID:s4MApLgV
>>686 Siliverlight1でJavaScript使えるけど、
Flashと同じような働きを期待するならSL2(C#)を使うしかない。
仕事でちょこっとだけやったけど、結構しんどかった。
すれ違いごめん。
691 :
Name_Not_Found :2008/12/04(木) 23:55:59 ID:fCeXxTmK
var a = function(){ /* 実行文 */ }; var b = (function(){ /* 実行文 */ }); のように関数リテラルを()で囲むのと囲まないのでは何が違うんでしょう? たとえばbの場合は実行速度が速いとかメリットがあるんでしょうか??
692 :
681 :2008/12/05(金) 00:15:00 ID:???
>>686 なる程、そういう捕らえ方もありますね。
因みにですがinnerHTMlを使って動的にFlashの表示位置を移動させる事とかってJavaScriptで
制御できますか?
WEBページ内の背景画像を固定する為に次のコードをhtmlページの中に直接記述したところ問題無く 読み込めるのですが、CSSを外出しにしたところなぜかWEBページに反映されません。 一体何が原因なのでしょうか? 【OKなパターン】 <style type="text/css"> body { background-image: url("img/sky46.jpg"); background-repeat: no-repeat; background-position: 50%; background-attachment:fixed; } </style> 【NGなパターン】 <LINK href="StyleSheet.css" type=text/css rel=stylesheet/> 【StyleSheet.cssの中身】 body { background-image: url("img/sky46.jpg"); background-repeat: no-repeat; background-position: 50%; background-attachment:fixed; }
object要素の動的リサイズについて教えてください。 function onResize() { 〜 } window.onload = onResize; window.onresize = onResize; 関数に入れるべきものが分かりません。 document.getElementById("test").width 等でサイズが変わらないので困っています。
>>693 5回ほど読んだがどこにJavaScriptが関係するのか分からない
>>693 ><LINK href="StyleSheet.css" type=text/css rel=stylesheet/>
ちげーよ
<link href="StyleSheet.css" type="text/css" rel="stylesheet" />
あほか
俺ルールではrel, type, hrefの順番で書かないと爆死する
>>692 innerHTMLでobject/embedを書き換えるなんて毎回最初から
始まってしまうので役に立たないだろ。位置だけ動かすなら
position:absoluteの要素に入れておいてJavaScriptでXY座標を
変更するのが定石。過去スレ全集に山のようにサンプルあるから。
>>694 断片だけ示されてもそこだけからは判断できない。
動かない最小限の完全な例を作って貼る。何か簡単なとこで勘違い
して間違えているんだと思うがそれが何かはESPじゃないので
予想できないね。
>>696 ありがとうございます。解決しました。
htmlの場合だと""で囲まなくてもWEBページは理解してくれるのに、
CSSの読み込みを宣言する際には囲まなくはならないのでしょうか?
ちょっと不思議です。
>>699 xhtmlは""で囲まなくてはいけない。
htmlでも最近は囲む人が増えてきている。
今のうちに癖をつけておいたほうがいいぞ。
>>699 XML, XHTMLでは「囲まないものは不正」
HTMLでは「何は囲まなければ不正か厳密に決まっている」
不正なのに囲まなかった結果がどうなるかは「運まかせ」
つまり自分の手元ではたまたま動いても公開したページを
見ている人のブラウザではだめかも知れない。そんなのは
Web制作者として論外。修行し直してこい。
702 :
679 :2008/12/05(金) 10:39:54 ID:???
>>679 でした質問なんだが
誰にもわからない、ということで FA?
>>702 「高速化」は難しそうだね。最初に1回だけgetComputedStyleを呼んで
あとは変形内容をもとに自前で変化を計算するとか。でも変更内容に
よっては自前で計算するのが困難な値もあるからね。
704 :
699 :2008/12/05(金) 12:27:47 ID:???
>>703 > でも変更内容によっては自前で計算するのが困難な値もあるからね
まさにそういう値を使わざるをえない状況なので、仕方ないのかー
Fx3 はマシだけど、Fx2 の getComputedStyle が遅すぎるので……
もう少しで Fx2 のサポート終わるから、シェアが落ちるのを気長に待つしかないのかな
var elt = document.getElementById('nanika'); var cs = getComputedStyle(elt, null); elt.styleの変更はcsで分かるから一緒に保存しとくのもだめ?
言っておくけど getComputedStyle で取得したオブジェクトのプロパティにアクセスした時に 反映待ちの DOM 操作が一気に開始されるんだぞ
708 :
699 :2008/12/05(金) 13:42:59 ID:???
>>706 返ってくるプロパティって live だっけ?
(値変更が発生したらプロパティへ即座に反映される)
>>707 のいうとおりなら live だから、もしかしたらダメかも
ただ、キャッシュしたらどうなるかは試してなかったから、ちょっとやってみる
分からないなら無理に高速化なんてせずに時が解決してくれるのを待ちなさい
googlemapのAPIキーを取得して複数のページに地図を表示しています。
当然ですが、現在は各ページのヘッダ部にAPIキーを記述しています。
今後似たようなページが100枚を越える予定です。
で、APIキーの部分が変更されたときメンテナンスが大変なので
この部分だけを呼び出すようにしたいのですが、よい方法があったら
教えてください。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Style-type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<script
src="
http://maps.google.com/maps?file=api&v=2.61&key= APIキー&datum=wgs84"
type="text/javascript" charset="utf-8"></script>
<title> </title>
</head>
CSS板で聞いたら親切な方が
「外部にjavascriptの配列でも作って参照したらいい」
と指摘され、あちこち調べてみたのですが掴み所がわかりません。
よろしくお願いします。
悪い、CSS板のほう質問の意図読み間違えてた
配列関係ないや
外部ファイルに↓みたいな関数つくって
function loadAPI(){
document.write('<script src="
http://maps.google.com/maps?file=api&v=2.61&key= ');
document.write('APIキー&datum=wgs84" type="text/javascript" charset="utf-8"></script>');
}
<head>
〜略
<script type="text/javascript" src="hoge.js"></script>
<script type="text/javascript"><!--
loadAPI();
//--></script>
</head>
みたいにしてヘッダに埋め込むのが簡単でいいと思うよ
>>711 イメージがつかめました。
本当にありがとうございます!!
>>711 712です。無事動きました。
メンテナンスが楽になります。
ありがとうございました。
一度作っちゃえば grep 置換で一発だと思うが
mootoolsの v1.11をダウンロードできるところはありますでしょうか? よろしくお願いします。
1つのHTML文書のp要素などを日本語と英語の両方並べて書いて、lang属性(enかja)によって 例えばボタンを押すなどで、すべての要素について日本語か英語の文どちらかを表示できるようにしたいのです 調べたところ表示・非表示はstyle.displayをblockかhideかで切り替えるようなのですが 「すべての要素」の「lang属性を指定」する方法がわかりません それともまったく別の賢いやり方があるのでしょうか(そもそも別ファイルにするとか)
>>717 IEサポートしないなら、
*[lang|="..."] { display: ... } とか書いた外部スタイルシートを2種類用意して、
document.styleSheets[n].disabledを切り替えるとか。
> そもそも別ファイルにする
俺ならこうします。
>>718 ありがとうございます
>> そもそも別ファイルにする
>俺ならこうします。
うーんそうですか
なにせファイル数が多い+文書中で日本語と英語共通(表示切替不要)の部分も多いため
なんとか1ファイルで切替ができれば、と思ったのですが
>>717 <script>
function langchange( gengo ) {
var tagname = document.body.getElementsByTagName("*");
for ( i = 0; i < tagname.length; i++ ) {
if ( tagname[i].lang ) {
if( tagname[i].lang == gengo ) { tagname[i].style.display = "block"; }
else { tagname[i].style.display = "none"; }
}
}
}
</script>
<h2 lang="en">My name is Obama.</h2>
<h2 lang="ja">私は小浜です。</h2>
<p lang="en">Yes, we can!</p>
<p lang="ja">俺たちは出来るんだぜ!</p>
<p><input type="button" value="日本語" onclick="langchange( 'ja' )" />
<input type="button" value="英語" onclick="langchange( 'en' )" /></p>
これではだめかい?
getElementByID() と document.all() どっちを使って要素にアクセス(innerHTMLの書き換え等)を行った方が良いのでしょうか?
上
W3C標準のほう
動く方
これは何でIEだけ表示出来ないのかわかる人いる?
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>hogehoge</title>
<script src="
http://maps.google.co.jp/maps?file=api&v=2&key= 1234hogehogehoge…"
type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(12.345670000000003, 123.456789), 16);
var point = new GLatLng(12.345670000000003, 123.456789);
var offset = new GSize(0, -20);
map.openInfoWindowHtml(point,'<a href="
http://www. hoge.jp/" target="_blank">hogehoge</a><br>なんれれすか<br> なんれれすかなんれれすか', offset)
})
}
}
//]]>
</script>
あ、もちろん表示させる部分には <body onload="load()" onunload="GUnload()"> <div id="map" style="width: 450px; height: 300px"></div> </body> な感じで入ってます。 オペラも見れないんだっけ?
>>720 あ、ありがとうございます・・・
見事望んでいた動作が実現できました
>>720 さま、本当にありがとうございました
728 :
721 :2008/12/07(日) 19:45:06 ID:???
>>722 ありがとうございます。今後は、getElementById()を使う事にします。
729 :
Name_Not_Found :2008/12/08(月) 09:19:40 ID:vh6OrxB2
Javascriptの関数一覧表があるサイトのURLを教えて下さい。
なんだ罠か
732 :
Name_Not_Found :2008/12/08(月) 09:52:28 ID:vh6OrxB2
よく分からないんですが var suuji= 100 hage = suuji.関数() のような記述がJavascriptによくありますが なんで変数と関数をドットで繋ぐのですか? 一般的なプログラムの場合は hage = 関数(suuji) となると思うのですが ドットで繋いだ場合は別の意味になるのでしょうか?
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
OOP を勉強してから出直しな
>>732 ドット演算子なんて一般的なプログラムのほとんどで使うと思うんだけども
長いですがすみません。 <HTML> <HEAD> <TITLE>test</TITLE> <SCRIPT SRC="jformat.js" LANGUAGE="JavaScript"></SCRIPT> <SCRIPT LANGUAGE="JavaScript"> <!-- // function Zprob(Z) { A = 0.000005383; B = 0.0000488906; C = 0.0000380036; D = 0.0032776263; E = 0.0211410061; F = 0.049867347; XZ =(((((Z*A+B)*Z+C)*Z+D)*Z+E)*Z+F)*Z+1; xxval=-16*Math.log(XZ); prob =Math.exp(xxval); if (prob>1) {prob=0}; return prob; } //
function tscore() { xsd=1; xmean=eval(document.tscorefrm.mean.value); xsd=eval(document.tscorefrm.sd.value); xdata=eval(document.tscorefrm.data.value); xzval=0; xtscore=50; if (xsd>0) { xzval=(xdata-xmean)/xsd; xtscore=xzval*10+50; } idz=0; if (xzval<0) {idz=1;xzval=Math.abs(xzval)} xpval=Zprob(xzval)*50; if (idz==1) {xpval=100-xpval} //
subwin=window.open("","output","toolbar=no,location=no,directobries=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=600,height=400"); if (navigator.appVersion.charAt(0)>=3) {subwin.opener=self}; with(subwin) { document.clear(); msg ="<HTML><HEAD><TITLE>分析結果</TITLE></HEAD>"; msg+='<BODY BGCOLOR="#ffffff" TEXT="#000000">'; msg+="<H3><TT>偏差値の計算<BR>"; msg+="--------------------------------<BR>"; msg+="平 均 値:"+xmean+"<BR>"; msg+="標準偏差:"+xsd+"<BR>"; msg+="<P>デ ー タ:"+xdata+"<BR>"; msg+="<P>z得点 :"+format(xzval,7,3)+"<BR>"; msg+="偏 差 値:"+format(xtscore,7,1)+"<BR>"; msg+="上位"+format(xpval,5,1)+"%内にいます。<BR>"; msg+="--------------------------------</TT></H3>"; msg+="</BODY></HTML>"; document.write(msg); document.close(); } if (navigator.appVersion.charAt(0)>=3) {subwin.focus()}; }
// function setfocus() { window.document.tscorefrm.mean.focus(); } // function msgDel() { if (confirm("入力データを消去します。")) { document.tscorefrm.mean.value=""; document.tscorefrm.sd.value=""; document.tscorefrm.data.value=""; setfocus(); } } // --> </SCRIPT> </HEAD> オブジェクトを指定してくださいエラーが出ます。すでに2か所ほどミスを 発見しなおしたのですが、まだエラーが出てしまいます。どこがおかしいのでしょうか? よろしくおねがいします。
それぞれの関数についてテストしてみたの?
741 :
Name_Not_Found :2008/12/08(月) 15:53:13 ID:zbU2kcRG
>>732 ドット演算子は「親から子、子から孫へ識別子を辿る」
と考えると分かりやすい。(かな?)
直接アクセスできる関数(オブジェクト)と
親から辿らないとアクセスできない子関数(メソッド)との違い。
742 :
Name_Not_Found :2008/12/08(月) 15:54:19 ID:zbU2kcRG
>>736 format関数が定義されていない。
参考にした原文には定義されてるはずだから探してみたら。
>>732 基本型には対応したオブジェクトクラスがあって、これらがラッパーになってる。
例えば数値(100とか)なら、指定されたプロパティやメソッドにアクセスすると
JavaScriptがその数値に対応したNumberラッパーオブジェクトを内部的に生成する。
そして、数値の代わりにこのNumberオブジェクトを使用する。
このオブジェクトにはプロパティやメソッドが定義されてるから、それらを使用できる。
ちなみにこの内部的に生成されるNumberオブジェクトは一時的なものだから、
プロパティやメソッドへのアクセスが終了すれば不要になるから、
自動的にシステムによって回収されてしまう。
この内部的な生成・破棄はJavaScriptの内部で勝手に行なわれるので
ユーザはいとも数値をオブジェクトのように扱うことができる。
それが気持ち悪いなら、下記のように数値オブジェクトを自分で生成して使ってみたら。
suuji = new Number(100);
744 :
Name_Not_Found :2008/12/08(月) 18:37:42 ID:A5kjxiVF
jQueryを使って、iframeの読み込まれる側から、親ウインドウの要素を 操作する事ってできますか?できるとしたら、どのようにするのでしょうか?
その@(改行が多すぎると弾かれてしまう為) なぜか次のCSSでテーブルの外枠に何も線(+色)が描画されません。 一体なぜでしょうか? 【HTML】 <table class="table_class"> <tr> <td class="AAA"> A </td> <td class="AAA_2"> B </td> </tr> </table>
そのA(改行が多すぎると弾かれてしまう為) 【CSS】 table.table_class { border-width:2px; border-color:red; } td.AAA { width: 200px; height: 17px; text-align: left; border: 2px blue solid; } td.AAA_2 { width: 400px; height: 17px; border: 2px blue solid; }
もうちょっと穏やかに煽れないのか?
750 :
Name_Not_Found :2008/12/09(火) 14:01:01 ID:jHOv9JTX
オライリーのjavascript第5版のhttp.jsのHTTP.get()で タイムアウト処理の時にもrequest.readyStateが4になるのはなぜ??? そんで options.errorHandler(request.status, request.statusText); の request.statusが0になって request.statusTextが空文字になって おまけに最後に timer()が実行される。。 ちなみにサーバサイドは 1 #!/usr/bin/python 2 #coding:utf-8 3 import cgi 4 import cgitb; cgitb.enable() 5 import time 6 7 form = cgi.FieldStorage() 8 p1 = form.getvalue("p1") 9 time.sleep(10) 10 11 print "Content-Type: text/plain;charset=utf-8" 12 print って感じで10秒停止させて、HTTP.get()は10秒未満の数値を指定。ブラウザはFx3。
「Firefox abort」でググればトップに出てくるけどな
752 :
Name_Not_Found :2008/12/10(水) 13:40:22 ID:QzCz+UV3
753 :
Name_Not_Found :2008/12/10(水) 16:43:45 ID:b8Z1dkjt
var len = 100; var num1 = Math.floor( Math.random() * len ); var num2 = Math.floor( Math.random() * len ); var num3 = Math.floor( Math.random() * len ); var num4 = Math.floor( Math.random() * len ); とすることで、num1 〜 num4に0〜99のランダムの値を代入できたのですが、 たまに重複してしまいます。 (num1とnum3両方に50が入るなど) これを避けるにはどうすれば良いでしょうか?
ifで判断してやり直したら?
クリックされたボタンやラジオボタンによって、読み込むcssを変更することは出来ますか。 例えばボタン1をクリックしたら「css1.css」を読み込んで、ボタン2がクリックされたら「css2.css」を読み込むなど。
>>753 var m = []; //比較対象を格納
function hoge(a) {
var n = 0;
var count = 0;
var flag = true;
m[m.length] = -1;
while (flag){
n = Math.floor( Math.random() * a );
for (var i = 0; i < m.length; i++) {
if (n == m[i]) {
flag = true; //比較対象に同じものがあればループを抜けない
break;
}
flag = false;
}
if (++count > 100) flag = false; //念のため回数上限100
}
m[m.length - 1] = n; //クリアした値を比較対象に格納
return n;
}
var len = 100;
var num1 = hoge(len);
var num2 = hoge(len);
var num3 = hoge(len);
var num4 = hoge(len);
こんな感じ。
<script type="text/javascript"><!-- function calc() { … … } calc(); //--></script> とすると、関数calcは正常に動作しますが、 <script type="text/javascript"><!-- function calc() { … … } document.write('<INPUT TYPE="button" VALUE="button" ONCLICK="calc();">'); //--></script> とすると、「button」をクリックしても関数calcが動作せずに、真っ白のページになってしまいます。 なぜでしょうか。 解決策を教えてください。
load(≒onload)についての質問です。 Operaで、1 ページAを表示 -> 2 ページBを表示 -> 3 ページAに「戻る」 -> 4 ページBに「進む」とした時、 4の時点でイベントを発生させる方法はあるのでしょうか。 --- 具体的には以下のような状態です。 ページA, Bにスクリプトを仕込んでいて、cookieにページの状態を保存しています。 状態はA, Bどちらにも共通のもので、どちらでも変更が可能です。 1 ページAを表示 → loadでcookie読んで状態を反映。 2 ページBに移動 → load(≒onload)でcookie読んで状態を反映。 2.5 ページBで状態を変更 このあと、3 ページAに「戻る」と、IEを除くブラウザではonloadが呼ばれず、 ページBでの状態変更がページAに反映されなかったので、 空の関数をunloadに仕込んで、ページAでもloadが呼ばれるようにしました。 ( ※ Firefoxはpageshowでもかまわなかったのですが、単に手間の問題です ) ここで 3.5 ページAで状態を変更したあと、4 ページBに「進む」と、 Operaのみ、loadが発生せず、変更をページBに反映させられません。 --- loadを発生させるか、あるいはFirefoxにおけるpageshowのようなものか、 その他何か適当な方法があるか教えて頂きたいのです。 よろしくお願いします。
戻る や 進む に依存した設計はバグの元って話
記憶が曖昧なんでアレだけど、Operaで進むや戻る使ったときって キャッシュを使うだけじゃなくてJavaScriptの状態も記憶しておいて それを再現するんじゃなかったかな?
764 :
763 :2008/12/11(木) 15:56:56 ID:???
765 :
761 :2008/12/11(木) 16:55:39 ID:???
回答ありがとうございます。 >763-764 >キャッシュ 要するにそういうことです。 Firefoxだとunloadをセットすればキャッシュは無効になるんですが、 Operaは「戻る」だとunloadが発生しないのでキャッシュがクリアされないんです。 で、URLの先のページでキャッシュ制御を見つけられました。 history.navigationMode = 'compatible'; ありがとうございました。 >762 依存て…(苦笑) 考えなしにそんなこと言われても。 むしろユーザーに「"戻る" "進む"は使うな」と言えるなら、 ページ移動したあと、必ずloadが発生するから、何も考えなくてもよかったんですけどね。 でも、ユーザーが「戻る」「進む」を使うのは普通に想定される話なので、 それに適切に対応する方法を探していた。それだけの話なんですよ。 「使われるかもしれない」に対応するのは当然ですよね?
766 :
763 :2008/12/11(木) 17:22:50 ID:???
>>765 まあ762の言う事もわからんではない
ブラウザの進むや戻るの動作を規定してる規格なんてないわけだし
今後新しいブラウザが出た場合にまた困る事があるかもしれない
その場合でも1秒に1回現在時刻をクッキーに記憶させて、
前回記録された時間が2秒以上前だったらページ遷移が行われたものとみなして
onloadの関数を実行するとか抜け道はありそう
ユーザーがSSD使ってるとひどい事になりそうだけど
767 :
763 :2008/12/11(木) 18:08:01 ID:???
というかクッキーじゃなくて変数でいいか
>>766 新しいブラウザはpageshowを実装して解決。
javascriptの実行状態を残すのに、pageshowに相当するイベントを
実装してない今のOperaが変なだけ。
でもOperaの方が実装早かったしー
Operaの強力なキャッシュ機能はモバイルとかで魅力的 つーか戻れば前の状態を維持してるしユーザーもそれを予想してるんだから 戻るたびに初期化イベントを走らせる設計はどうなの?ってのは少し同意できる 初期化ボタンを設けて必要なら初期化、の方が俺は好き ブラウザ間の足並みがそろわないのは何とかしてほしいが
designmodeにしたiframe内でonkeyupとかのイベントってどうやったら使えるの?
772 :
Name_Not_Found :2008/12/12(金) 09:20:01 ID:m9oz4Dqt
初心者です 質問したいのですが function a(){ window.botton.value="やったね"; } <input name=botton onmouseover="a()"> としてカーソルを合わせた時に、枠内に文字を表示させたのですが 同じページ内に別の枠を作ってそっちも同様にしたい場合は 新たに別の名前のfunctionを作って書くしかないのですか? a()を使い回せないでしょうか?表示させる文字は同じく“やったね”でいいです。 ※今は下記の様にしています。 function b(){ window.botton2.value="やったね"; } <input name=botton2 onmouseover="b()"> ※ボタンの名前(name=botton2)は変えたくないです。 よろしくお願いします
botton()笑
>>772 ボタンの名前をパラメタで渡す。一番素直なのはボタンそれぞれに
IDをつけて
function a(id) {
document.getElementById(id).value = '...';
}
とすることだと思うけどね。
function a(id) { document.getElementById(id).value = "やったね"; } <input onmouseover="a('botton')"> <input onmouseover="a('botton2')"> <div id="botton"></div> <div id="botton2"></div> こんな感じか。ぼっとん便所、なつかしいな。
関数使わなくてもいいって思った <input onmouseover="ここに直接書いてもいいんじゃね?value変えるだけなら。" onClick="クリックされたときの関数()">
未だにbuttonがなぜボタンなのか 納得いかない奴は多々いるはず
778 :
Name_Not_Found :2008/12/12(金) 13:52:04 ID:50TTQbtS
ブラウザの戻る動作したときに処理を行わせるために history.nextが存在すれば戻るを実行した、と判断して 処理を行わせようとしたのですが Permission denied to get property History.next とFirebugで表示されてうまく動作しません。 History.nextは直接アクセスできないのでしょうか?
ページ遷移をしたら、そのページのスクリプトは実行できないだろ
780 :
772 :2008/12/12(金) 14:10:21 ID:m9oz4Dqt
みなさんありがとうございました。 理解できました。 名前がbottonなのはネットで見つけたスクリプトを改造しただけだからです。
ボットンw
>>778 うん。Historyオブジェクトはセキュリティ的に微妙なため
アクセス制約が強く掛けられている。
783 :
778 :2008/12/12(金) 15:35:38 ID:50TTQbtS
>>782 回答ありがとう御座います。
なんかHistory使えないようなので
別のやり方考えてみます。
784 :
Name_Not_Found :2008/12/12(金) 22:07:07 ID:okwaYZ8K
>>783 CSSで a:link と a:visited のスタイルを適当に設定しておいて、
該当するリンク先をhref属性に持つa要素を作って、
ドキュメントにぶら下げて、
その色を見る、
ってのをやってうまくいったことがある。
nextかどうかはわからんが、historyに含まれているかどうかはわかる。
まだMacIEとかあった頃だし、最近のブラウザでも出来るかどうかは知らん。
質問と全く関係ないうえ最悪なマーケティング方法だな
>>784 っつーか、それ楽天がやってた方式だろ。
さも自分が考えたかのように書いちゃって、自慢したいお年頃?
787 :
Name_Not_Found :2008/12/12(金) 23:41:50 ID:WHLSXnXH
あいまいな質問で申し訳ないのですが Divタグを使ってスクロールしても画像が付いてこない問題を解決したいです 画像の上にある文字は普通にスクロールしますし、ためしに普通の画像をおいてみたら それもちゃんとスクロールしてたので何かしらJavaScriptで変なこと書いちゃったのだと思いますが… 最初に<div id="a"><img src="b.gif" name="c"></div>みたいな感じで1pxの画像を敷き詰めておいて、 サーバから取得した画像リストでswapImage、moveTo、showしてます。 あとはドラッグで特定エリアに動かせるようにSET_DHTML("hoge"+CURSOR_MOVE,〜)も使ってるのですが この辺の機能使うとdivタグでのスクロールが聞かないとかあるんでしょうか? ソースもだせなくてすみませんが、もし何か分かるようでしたらよろしくお願いします。
お前の使ってるライブラリが何かなんて知るかよ
swapImageってなんぞやと思ってググったら、 それっぽいのが見つかった気がしなくもない。 俺ができる精一杯のアドバイスは、使ってる関数を作ったとこに聞くか、 自分で挙動を全部調べて考えるか、2つに1つだ。 ここで適切なアドバイスを期待するのは無茶だ。
1pxの画像を敷き詰めるというのが何のためにやってるのか分からん。
アジャックスは必要ですか?
792 :
778 :2008/12/13(土) 13:50:50 ID:T6CDbLgn
タブブラウザでタブのフォーカスが別のタブに 移動した際に処理をさせたいのですが 何かやり方はないのでしょうか? window.onblurのイベントハンドラで処理をさせてみたのですが うまく動きませんでした。
アジャックスって2ちゃん用語?
アジャ?
796 :
Name_Not_Found :2008/12/14(日) 11:42:15 ID:3ofB3ntc
onload時にすべての a 要素にonclick属性を付加したいのですが その際に既存のonclickを上書きしないで新しい属性を付加する方法は ありますか? var list_a = document.getElementsByTagName('a'); for(var i = 0; i < list_a.length; i++){ var item = list_a.item(i); item.onclick = ohayou + item.onclick; } このように書いてみたのですがうまく動いてくれませんでした。
gugure kasu
>>796 どこぞに function ohayou(){ ... } があるんだな?
---
var list_a = document.getElementsByTagName('a');
for (var i = 0; i < list_a.length; i++)
{
if (typeof(list_a[i].onclick) == 'function')
{
list_a[i].onclick = (function(func)
{
return function(){ func(); ohayou(); };
})(list_a[i].onclick);
}
else
{
list_a[i].onclick = ohayou;
}
}
---
>>797 質問スレでそれは、>2-10読まないボケ共と内容同レベル。
addEventListener() attachEvent()
800 :
796 :2008/12/14(日) 18:03:34 ID:BASxjhoS
>>798 回答ありがとうございます。
そのコードを利用することで無事上書きせずに処理を追加することができました。
ありがとうございました。
>>799 ググってみたら、処理を追加する関数があったんですね。
教えてくださってありがとうございます。
すべての a 要素にonclick属性を付加するよりベターな方法はもうちょっと先かな
>>798 の回答レベルが低すぎだろ
-クロージャーを量産する愚
-ハンドラ内でthisをあてにするボケ共が多いんだからcall必須
-アホ外人が俗に言うイベントデリゲーションでやれ
>>802 イベントどころか意味そのものを分かってない>796が
作ってるプログラムが対象なんだぞ?
そんなもの検討せにゃならんと考えるお前の存在がむしろ不思議。
何も考えず、単純ベタベタでどんなバカブラウザでも
「この程度できて当たり前」な処理で済ませりゃ十分じゃねーか。
JavaScript内に入れるコメントについてお尋ねします。 通常のWindowsアプリ等のプログラム(VB.net / C#)の場合には コードの中にコメントを入れるのはごくごく普通だと思うのですが ことJavaScriptの場合には、ユーザに簡単にコメントが見られてしまうので入れない方が良いのでしょうか? ただ疑問に思うのは、別にコメントを入れたからといってそのコメントを足掛かりにしてユーザがWEBページを アップしているサーバに対して何がしかのアタックを掛けてくるとは思えないのですが。 WEB開発のベテランの方アドバイスをお願いします。 また、コメントをどうしても入れたいけど(メンテナンスのし易さの為)ユーザにみは見られたく無い という場合には、CGI(php/ ASP.net)側にコメントを残す方法しかないのでしょうか?
コメント読まれたぐらいで穴が見つかるようなシステムは糞だな。 セキュリティのためなら、開発者が理解しやすいコードにした方がよほど安全。 あとは読む人間の頭の程度に合わせればいいだけの話で、一般化できるもんでもない。
>>804 難読化しろ
コメントも取ってくれるから
>>804 コメントだけを問題にするなら、自動でコメント削除する
プログラム作れば済む話だと思うが。
コメント書いてる開発時のプログラムをそのまま使う必要なんてない。
もっと根本的な問題を指摘すると、
>>805 の言う通り、
コメント書いた程度で穴がバレるか怖がってるようなら、
どうせ書かなくても危ないのは変わらん。
プログラム自体、使うべきじゃない。
>>806 JavaScriptの難読化とはどうすれば良いのでしょうか?
難読化でググればいくらでもサービスでてくるから好きなの使って
>>807 それなら簡単に作れます。
公開前にコメントを全て削除するバッチ(*exe)でも作ろうかと思います。
それが一番手っ取りばやいかもしれませんね。
>>809 ちょっと疑問なのが「難読化」というのは100%コメントを見られない様にするのでは無くて
コメントを簡単には見られない様にする、という事ですよね?
とするとやはりリリース前にコメントをソースコードから削除するプログラムを作ってから
やった方が確実なのでしょうか?
>>810 難読化っていうのはソースコード全体を人間に読みにくくすること
コメントを削除するのはもちろん、
変数やオブジェクト名を機械的な名前に置き換えたり
コード自体を何を書いてるのか分からないような形にしたりする
100%の対策なんかじゃないけど、少なくともコメントを削除するだけよりかはよほど効果があるよ
なぜ、javascriptに知られてはいけないようなことを書くのかが分からない
は?
自意識過剰
>>812 分かるか分からないかはともかく需要があるから存在してるんだろ
>>815 javascriptって全部人に読まれる前提じゃないの?w
どれほどのコードか見てみたいからちょっと貼ってよここに。
>>818 みたいなコードを勝手に読んでああだこうだ指摘してくる親切でうっとうしい人対策として効果的
<list> <cap>参加リスト</cap> <koumoku> <namae>太郎</namae> <nenrei dataA="001">30</nenrei> <seibetu>男</seibetu> </koumoku> <koumoku> <namae>花子</namae> <nenrei dataA="002">28</nenrei> <seibetu>女</seibetu> </koumoku> </list> というXMLファイルがあったとして 「dataA」の要素を参照するにはどうすればよいのでしょうか。 var targetNames = XML_Data.getElementsByTagname('nenrei'); window.alert(targetNames[0].nodeValue); でnenreiタグの値を参照することができるのはわかるのですが その後に続く要素を参照するやり方がわかりません。
<nenrei dataA="001">30</nenrei> この書き方がおかしい
>>821 >その後に続く要素
「後に続く」が具体的に何を指しているのか分からんのだが。
<seibetu>のことだとしたら、nenreiを取る意味はない。
2番目の<seibetu>(=女)を表示するなら
var list_koumoku = XML_Data.getElementsByTagname('koumoku');
var seibetu = list_koumoku[1].getElementsByTagname('seibetu');
window.alert(seibetu[0].nodeValue);
とすりゃいい。
>>822 XMLファイルは例なんです。
今やろうとしていることは
ニコニコ動画のコメントファイル(XML)の解析なんですが
そのコメントファイルの中を見たところ
<chat anonymity="1" date="1229257940"…(省略)>
コメント
</chat>
となっていたのでこのXMLファイルの例を書いてみました。
>>823 すみません。書き方がわるかったです。
要は「dataA」の要素を参照するにはどうすればいいのか
ってことです。
>>825 HTMLやXMLでは「要素」というのは<名前>...</名前>で囲まれた
範囲のことなんだが、その用語づかいで合っているかね。
>>826 すみません。値っていう表現でよろしいでしょうか?
<nenrei dataA="001">
というdataAに格納されている値を参照したいのです。
828 :
Name_Not_Found :2008/12/15(月) 18:07:19 ID:MjrW5BF4
>>827 その場合、
「nenrei要素のdataA属性の値」
というのが正解。用語覚えんの大事だよ。
var nenrei = XMLData.getElementsByTagName("nenrei")[0];
dataA = nenrei.getAttribute("dataA");
--
<nenrei dataA="001">30</nenrei> → 要素(エレメントノード)
30 → 要素のノードバリュー
<nenrei dataA="001"> → 開始タグ
</nenrei> → 終了タグ
dataA="001" → 属性(名前“dataA”、値“001”)
829 :
827 :2008/12/15(月) 18:08:18 ID:MjrW5BF4
間違えた。 30はエレメントノードのchildNodes[0]のノードバリュー。
830 :
821 :2008/12/15(月) 19:05:41 ID:???
>>827 ありがとうございます。勉強になります。
さっそく頂いたスクリプトを組み込んでみましたが
結果「null」が帰ってきてしまいます。
何が原因だと考えられますか?
831 :
828 :2008/12/15(月) 22:20:17 ID:MjrW5BF4
おれ、828じゃん!
>>830 XMLDataってのは、そんな定数がある訳じゃなくて、
読み込んだXMLのデータのことだよ?
832 :
815 :2008/12/15(月) 22:33:19 ID:???
>>817 なぜ人にソースを見られたくないかと言うと、自分が苦労して辿りついたソース
に簡単に他人に見られてしまうと自分の労力が無駄になりますよね?
それがやーなのですよ。
>>819 良い人じゃないか。
>>832 自分は他人様のコードなど参考にしたことがないような物言いだね。
だったらJavaScriptで書くことが間違っていると思うな。
そのうち 「見られるのが普通だからスマートなコードを書こう」 って思えるようになるよ
835 :
821 :2008/12/15(月) 23:23:15 ID:???
>>828 すみません番号間違えました…orz
調べたところXMLファイルになぜか「dataA="001"」を追加したのに
なぜかlocalhostからXMLファイルをブラウザを通して見てみると
「dataA="001"」が無い状態になっていました。
改めてそのXMLファイルをテキストエディタで開くとちゃんと「dataA="001"」
が記述されていました。
何が原因なのかよくわかりません…。
>>833 他人に見せても構わない人が公開したコードを参考にしたからと言って
自分は隠してはいけないっていう論理が間違っていると思うな。
露出狂のチンコ見たんだからお前もマンコ見せろって言ってるようなもんだろ
837 :
835 :2008/12/15(月) 23:33:48 ID:???
すみません。解決しました。 ありがとうございました。
JavaScript の世界には露出狂しかいないけどな 隠すのはリンゴを食べちゃったおかしな人だけ
>>832 なぜ赤の他人にアドバイスしたくないかと言うと、自分が苦労して辿りついたノウハウ
を簡単に他人にまねされてしまうと自分の労力が無駄になりますよね?
それがやーなのですよ。
と、カキコを読んだ皆が感じたとオモタ。
840 :
815 :2008/12/16(火) 00:15:27 ID:???
>>833 自分は人のソースを参考にさせて貰ってるけど、
人には参考にさせたくないんだよ。
だからgoogleアドセンスの*jsファイルも難読化してるでしょ?
そんな理屈。
>>832 要は「オレって誰も知らねーこと知ってるぜ!」っていう自己満足を満喫してる、プログラマもどき
世界の誰もお前みてーなやつに媚びねーよwww
>>840 Googleのコードは難読化なんてしてない。
もし、お前が読めないのなら、それはお前が到底Googleの技量に及ばない証し。
そもそも隠したいならネットで公開しなければいいじゃない
Google のは難読化したいんじゃなくて byte 単位で転送量を減らしたいからだけどな
質問者とその後は別人のような気がするな その後の人はいろいろ残念な感じだ
>>838 その例えだとリンゴ派が後の主流になるんじゃないかなw
自分のプログラムを公開して 自分「こいつをどう思う?」 他人「すごく・・・汚いです・・・」 こう言われ続けて絶え間なく改善する気概を持った奴だけが まともなプログラムを書けるようになる。 非公開で自分しか見ないプログラムの経験しかない奴は 絶対におかしなクセを持ってるし、常識で済む処理を非常識に解決しようとする。
そうですか よかったっすね
こんな奴に何言っても意味ないだろw チャリ2列で走ってる厨房工房が車から見てどれだけ危険か、 本人に正確に教えられる奴なんていないんだから。 何でも自分で経験しなきゃ分からんし、こいつは経験するつもりもないだろ。
そうですか よかったっすね
1個のクッキーが4KBまでで同一ドメインならそれを20個まで使えるってことは 同一ページでも最大80KBまで保存可能ってことですか?
HTMLやJavaScriptコードのなんちゃって暗号化(難読化)を図っているサイトに限って 何故だかことごとくトホホ度全開のショボショボページなのはどうしてですか? ああいう人たちに限ってどうしてああ自意識過剰なんだぜ?
必死に女性専用車両探してるブスみたいな
しょぼいサイトを作ることで
>>854 のような攻撃的な人間を釣り
難読化を肯定する理由として利用するため
大したことのないスキルで満足してる奴に限ってオレはすごいことできると 思うんだろうな。逆にスキルが行くとこまで行ってる奴はこんなの誰でも できると思うだろ。隠すなんて発想もない。
GACは氏に増したか?
861 :
1/2 :2008/12/17(水) 11:05:01 ID:???
jqueryを使っています。 下記(親)のような、onload時に特定のdivにhtml(子)を読み込ませる処理をしています。 読み込まれた特定のspanをクリックすると何かしらのイベントが発生させるような$('ここ')の指定はどのようにすればいいのでしょうか? ※ 逆に、親に直書きしてみると思い通りの動作になります。(1の内容という文字列をクリックすると、「1の内容」というダイアログが表示される) なのでコード本体は問題なく、$('ここ')の指定方法が悪いんだろうなぁと思います。 よろしくお願いします。
862 :
2/2 :2008/12/17(水) 11:05:25 ID:JWcdRDQf
- 親 -- <html> <head> <title>テスト</title> jquery読み込み <script> $(function(){ // clickableBox-xをクリックしたときにどうにかなる処理 $('span.clickable-1').click(function(){ alert($('span.clickable-1').text()); }); }); window.onload = function(){ // onloadでreadableBoxに何か読ませる処理 $('#readableBox').load('なにがし'); } </script> </head> <body> <div id="readableBox" class="readableBox"></div> </body> </html> - 子(読み込まれるhtml) -- <span id="clickableBox-1" class="clickableBox-1">1の内容</span> <span id="clickableBox-2" class="clickableBox-2">2の内容</span> <span id="clickableBox-3" class="clickableBox-3">3の内容</span>
>>861 読みこんだ子のhtmlをどうやて親に組み込んでるのかが重要だと思うんだけど、
そこの部分はどうしてんの?
864 :
861 :2008/12/17(水) 14:28:26 ID:???
>>863 ちょっと例が悪かったです。
>>862 のwindow.onloadの処理は実際には
$('#readableBox').load('子(読み込まれるhtml));
となります。 これだけです。
>>864 あぁ、そういうことか。勘違いしてた。
単純にloadされるまえにclickハンドラの処理しちゃってるからでしょ。
load関数はcallbak関数指定できるから
load('読み込むhtml', function(){
// clickableBox-xをクリックしたときにどうにかなる処理
$('span.clickable-1').click(function(){
alert($('span.clickable-1').text());
});
})
ってやればよいんじゃね。
ってか、$(function(){})ってやってるのに、そのあとにwindow.onloadをやってる意味がよくわからないな。
$(function(){ $('divの#').load(上のやつ) })
でいいと思うけど。
866 :
861 :2008/12/17(水) 18:19:57 ID:???
>>865 ありがとうございます! 非常に助かりました。
イベントに起因させたい関数はコールバック関数で指定しないとイカンのですね。
> window.onloadをやってる意味
言い訳はしませぬ。
867 :
Name_Not_Found :2008/12/17(水) 19:31:17 ID:cOZZjn8x
子画面のwindow.close()で親画面がよく固まるだけどなんでかな?
オブジェクトリテラルでプロパティ名を指定するとき 識別子と文字列と両方指定できますが、何が違うんでしょうか? つまり { name: "hoge" } と { "name": "hoge" } は何が違うんですか?
>>869 こういう状況で必要。普通は気にしなくていい。
{ "a:b": "c" }
あの、読み出し専用プロパティに値を代入するとどうなるんですか?
872 :
869 :2008/12/18(木) 10:51:09 ID:???
>>870 なるほど、そんな使い方もあるんですね。
ありがとうございました。
>>871 何も起こらないかエラーになるか。ブラウザによって違うかもね。
874 :
Name_Not_Found :2008/12/18(木) 11:50:18 ID:WXdNe9oM
最近サクサクみていた動画共有サイトがあるのですが 突然先週末くらいから「インターネットサイト○○は開けません。操作は中断されました」 というエラーが出るようになり見れなくなりました。 使ってるブラウザはIE6なのですが、firefoxをインストールしたら、それでは見れました。 (でも重いので削除してIE6に戻したのですが・・) いろいろ調べて試行錯誤してみると、javascriptをオフにすると見れるようになったんです。 でも先週まではオフにしなくても見れたのに何故でしょうか。 また、ダウンロードの時間も長くなりました。原因は何ですか?
>>859 コメント込みで100KBのファイルが60KB程度になるから使っているけど、
他人にコードを読まれて評価されるのが怖いヘタレと、
圧縮しているのは転送量削減目的では無く、単にケチ臭い難読化だけの為だと思っているアホがいるとは困ったもんだね。
まあアホ避けとして、俺の所のようにヘッダ部分に未圧縮ファイルのURLを書くのをお勧め。
過ぎたことを蒸し返すやつは何なの アホなの?
アホなんだろ
var now = new Date(); var xday = new Date(2008, 12-1, 24); count = Math.ceil( (xday.getTime() - now.getTime()) / (24*60*60*1000) ); document.write("クリスマスイブまであと"); document.write(count); document.write("日!"); こういうものなんですが、countの部分をかっこ良さげな画像の数字を入れ替えていく というものにするにはどうしたら良さげ?
>>879 たぶんこんな感じ。
var count = "" + count;
var html = ""
for (var i = 0; i < count.length; i++) {
var num = count.charAt(0);
html += '<img src=\"./img/' + num + '.png\" alt=\"' + num + '\">';
}
document.write(html);
charAt(i)だった。
insertHTML を使用して、読み込み完了後に 背景画像を挿入しています。 しかし、もとのHTMLによっては、文字やエディットなどより手前に来てしまいます。 その背景画像の z-index 0 にしても効果ありません。 背景画像が手前に来ないようにするには、 他のものをすべて z-index の値を書き換えるか、 読み込みの段階で タグを挿入しておくしか方法がないのでしょうか?
>>882 背景画像の設定方法と使ってるブラウザとだめな具体例をplz。
z-index: -900 とかにすればいいんでナイノ
変数が宣言されているかどうかを調べる方法はありますか? 宣言されていない変数を書いたらエラーが出てしまいますし、無理でしょうか。
>>886 typeof(v) == "undefined"
未定義ならtrue、ただし宣言だけで中身がないvar v;もtrue
でもプロパティじゃなくて変数にチェックが必要なんてどういう状況?
あれ?javascriptって変数宣言しなくてもグローバルスコープになるだけでエラーでたりしなくない?
>>888 代入はそう。宣言もなにもしてない変数を読もうとするとエラー。
typeofは演算子だから例外。
>>889 そうだったんだ、ありがとう。一つ賢くなった。
891 :
Name_Not_Found :2008/12/20(土) 02:43:46 ID:zJxlXjcL
jsonとPHPを使って開発を行っています PHPに値を投げると、PHPで受け取った段階で日本語の値が文字化けしてしまいます。 投げる直前では化けていません。 jsonpというのを使っています。 値はGETで受け取っています。 化け方が見たことないような化け方で <81>??<86>| みたいな文字列になります。 URLエンコードは試してみてもだめでした。 今環境が手元になくて情報が少なく申し訳ないのですが、もし似たような経験おありの方いらっしゃいましたら、何か教えて頂けないでしょうか。 お願いします。
>>887-889 ありがとうございます。勉強になりました。
URLを読んでGETの引数を取得しているので、それを場合によって省略できるようにしようと考えていました。
<script type="text/javascript"> <!-- eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k= [function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp ('\\b'+e(c)+'\\b','g'),k[c])}}return p}('0("1 2!");',3,3,'alert|Hello|PHP'.split('|'),0,{})) // --> </script>
ぐぐれ化す
ググレカレー
HTMLコメント内に--を書くな
<embed src='./wav.wav' autostart="false" width="0" height="0" id="MUSIC"> <span onClick="javascript:MUSIC.autostart='true'">foo</span> と書いてみましたが、音楽が鳴りません。 idMUSICをembedにせず、 <bgsound id="MUSIC" src="" loop="1"> にしたら音楽が再生されるんですが、IEでしか動作しないんです。 どうしたらjavascriptでwavファイルを呼び出して再生できるんでしょうか?教えてください。
>>897 IDを指定して要素を取得するには「document.getElementById('ID名')」
が本来必要ではないかね。IE専をやめたいならそれなりに勉強するんでしょ。
>>898 document.getElementById('ID名')ですか。ありがとうございます。
なぜ、bgsound要素だと取得が不要なのでしょうか。なぞは深まるばかりです。
>>892 もしかしてevalぶち込んでパースなんてしてる?
>>899 bgsoundだからじゃない、IEだから。
IEは独自拡張でwindow["id名"]でも取得できて、それはwindow.id名と書いても同じ。
そしてwindowは省略可能だからid名で直接アクセスできる。
HTML5が流行るまではFlash使ったほうが賢明だと思うけど
突然すみません WMP(プレーヤー)埋込の再生するファイルをinputから書き換えたいのですが どのようにすればいいかヒントを教えてください。お願いします 一応PS3のブラウザで動かしたいと思っています
904 :
Name_Not_Found :2008/12/22(月) 14:06:05 ID:hhrrZLSs
質問させてください。
JavaScriptを使ったXSSなどの攻撃についてですが、
http://d.hatena.ne.jp/HiromitsuTakagi/20040427 ここでは、だいぶ前の記事ですが、NetScapeではdocument.cookieへの参照をオフにする機能が搭載されたと書いてあります。
FirefoxやIEの場合は、このような機能はないのでしょうか??
また、クライアント側でクッキーを掠め取られる可能性を考えなければいけないのは、JavaScriptだけでOKなのでしょうか??
他のスクリプトもブラウザで動いたりするのかなと・・
若干スレ違いっぽくて恐縮ですが、アドバイスいただけると嬉しいです。
>>904 クライアントサイドで動くのがjsだけだと思ってる池沼が沸いてるな
質問です wikipediaやブログなどである「B」ボタンを押すと<b></b>タグがテキストエリア出るというのをやりたいです できればマウス操作などで反転させたところを<b></b>で囲むというのがいいのですが、 単純にボタンを押したらタグをテキストエリアに出力するものでも、なんでもかまいません よろしくお願いします
ここは丸投げスレではありませんよ僕ちゃん
ついでにテキストエリアの背景がグラビアアイドルの水着になってランダム で変わるやつもできたら教えて。
>>908 まず画像をzipでうp、話はそれからだ!
910 :
Name_Not_Found :2008/12/22(月) 22:04:20 ID:/DsY0F1r
JavaScriptの途中でPHPのソースを実行したいのですがどのようにすればいいのでしょうか? function submit_on(){ if (confirm("データを登録しますか?")){ ここにPHPでINSERTしたい } } function submit_on(){ if (confirm("データを登録しますか?")){ <?php ココに書いてもOK? ?> } }
ごめん
>>910 > function submit_on(){
> if (confirm("データを登録しますか?")){
> <?php
> ココに書いてもOK?
> ?>
> }
> }
何ら問題はないんだが
ブラウザが受け取った時点で php は既に解釈・実行は終わってるんだよ
え?何ら問題はないの??
ココに書いてもOKじゃないしセキュリティもダメダメじゃん POSTをうまく使え
915 :
912 :2008/12/22(月) 22:50:25 ID:???
答え方に失敗した JavaScript 中に php を埋め込むことには問題はないが ご要望のことはできない
なにいってんだこいつら
>>910 javascript実行中にPHP処理したいってことならAjaxでがんばれ。
920 :
Name_Not_Found :2008/12/24(水) 11:36:22 ID:kU2lY9tn
配列aryに格納した値をstdという独自の関数で出力したいのですが うまくいきません どのようにしたらよろしいでしょうか? ary = new array(); ary[0] = 1; ary[1] = 2; function std(ary) { document.write($ary[0]); document.write("<br>"); document.write($ary[1]); } std(ary);
配列にすらなっていないと思われ
$ary[0] の $ は何だ!
923 :
Name_Not_Found :2008/12/24(水) 13:07:11 ID:DvJhAaVW
>>920 perlかなにかしらんけど勝手に別の言語の仕様を持ち込むなとw
「同じ漢字だから通じるよね」と中国人に向かって「手紙」
(訳:トイレットペーパー)と言ってるようなもんだ。全然通じてないから。
var ary = new Array();
ary[0] = 1;
function f(a) { alert(a[0]); }
f(ary);
>>923 これも文法レベルの問題。さきに答えを書くとget["id[0]"]
>get[id[0]]
var v = id[0];
var param = get[v];
と書き換えれば、なにやってるかわかるよね?
いちおう補足しておくと、r[0]の中身は"id[0]"というString。 location.searchはjavascript片じゃないただの文字列だから 変数名のつもりだろうと変数として扱われない。
iPod3みたいにPCを傾けても画像をいつも垂直に表示するようにできますか?
>>927 無理。HDDの対衝撃用センサーを利用して傾き検知する話は聞いたことあるけど
そんなニッチなもんブラウザから利用できない。
質問なのですがページを表示したときに インラインフレーム内の文字列をJAVASCRIPTで置換する場合は どうすればいいのでしょうか? インラインフレーム内のページは外部サイトなのでJAVASCRIPTを書き込むことは出来ません。 よってインラインフレームの外のページにJAVASCRIPTを書き込もうと思っています。 宜しくお願いします。
>>929 外部ドメインの別フレームには手出しできなかったはず
>>930 そうなんですか?
JavaScript:document.body.innerHTML=document.body.innerHTML.split('ー').join('━━━(゚∀゚)━━━');focus();
↑みたいなことをインラインフレーム内でも出来たらいいなと思って質問したのですが・・・やっぱりムリでしょうか・・
>>931 それできたらmixi.jpあたりをインラインフレームに表示して
cookieにあるセッションID盗むわw
933 :
927 :2008/12/25(木) 15:13:47 ID:???
>>928 そうですか。残念です。ご回答ありがとうございました。
っ 録画編集
>>931 無理。それを許すとWebセキュリティ崩壊。
「クロスドメインアクセス」でググれ
開かずに開けば万事解決
937 :
Name_Not_Found :2008/12/25(木) 17:53:06 ID:4zdACj0F
オブジェクトが、指定したクラスかどうかを確認することはできますか? (オブジェクト == クラス名) のようなかんじで… やりたいのは下のようなものです。 GEvent.addListener(map, "click", function(overlay, latlng) { if(overlay == GMarker){ //GMarkerはクラス overlay.hide(); } });
>>937 GMarker.prototypeをぶっ壊してなければ
overlay.constructor == GMarker
これわすれてた/(^o^)\ overlay instanceof GMarker
940 :
937 :2008/12/25(木) 19:03:22 ID:???
>>938 ,939
ありがとうございます!
おかげさまで解決しました!!
941 :
Name_Not_Found :2008/12/26(金) 06:24:13 ID:Nx3KOY24
<a href="foo.html" class="bar1" onClick="return false;"> と書いて、 ・javascriptが無効ならfoo.htmlに飛ぶリンク はできたんですが、 ・javascriptが有効ならclassの属性値をbar2→bar3→bar1と変更 というのを追加したいです。 ご教授くださいますようお願いいたします。
ほっす
>>942 onclick="chg(this); return false"
として関数chgは次のように。
function chg(e) {
if(e.className == 'bar1') e.className = 'bar2';
else if(e.className == 'bar2') e.className = 'bar3';
else e.className = 'bar1';
}
>>944 できました。ありがとうございます。
elseの構文を追加したり、減らしたりしたらbarの数値を大きくしたり小さくしたりできるんですね
助かりました。ありがとうございました。
946 :
Name_Not_Found :2008/12/26(金) 16:08:51 ID:pCIRs1bd
質問です
<!--
google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("
http://xxx.com/rss ");
feed.setNumEntries(10);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
container.innerHTML += "<a href='" + entry.link + "' target=_blank>" + entry.title + "</a>";
}
}
});
}
google.setOnLoadCallback(initialize);
//-->
この場合のrssの配列を逆にしたい(一番最後のエントリーから読み込みたい)のですが
ぐぐったらreverse()を使えば良いと言うのは分かったのですが
いろいろ試してみてもどこに組み込めば良いのか謎です
教えてください
var reverseEnteries = result.feed.entries.reverse(); であとはresult.feed.entriesを置き換えるか for (var i = result.feed.entries.length -1; i >= 0; i--) ループの回し方を逆方向にする。
948 :
Name_Not_Found :2008/12/26(金) 16:58:27 ID:BqyGXeyD
>>947 ありがとうございます。置き換えて動作させることが出来ました。
この場合、rssに存在する一番最後のエントリのみを表示させる事は無理っぽいですかね?
feed.setNumEntries(10)とかだと最新10の中からのリバースなので
feed.setNumEntries(100)みたいに取りあえず全部取り込んでおいて最後だけを表示するみたいな
>>948 できるけどさすがにそんな基本まで答え言いたくないw
[0,1,2,3,4,5]の配列から最後の要素を取り出してごらん。
やり方は二種類あって、ヒントは
・length-1
・「最後」=「逆順の最初」
やさしすぐる
この際だからpop()して
htmlに埋め込まれたswfがあってさ swfにはテキストボックスと、それにリンクする再生ボタンがあるんだけど、 htmlに書かれた開始を押すと、swfのテキストボックスに特定の文字入れて再生ボタンを押す、 みたいなことをjavascriptで、したいんだけど簡単? 何でぐぐったらいいかワード教えてくれ
他人が作ったswfなんだろ? 無理
仕様によるけど公開オプションあるなら
JW Player
http://www.longtailvideo.com/players/ を調べてるのですが、単純にローカルでflvを再生する事すら出来ません
同じフォルダにindex..htmlとswfobject.jsとplayer.swfとtest.flvを置いて
htmlの中身は
<div id="container">あ</div>
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
var s1 = new SWFObject("player.swf","ply","500","500","9");
s1.addParam("allowscriptaccess","always");
s1.addParam("flashvars","file=test.flv");
s1.write("container");
</script>
です。この状態でもプレーヤーが表示され、再生ボタンをクリックすると再生が始まります
この再生をjavascriptから実行したいのですが、出来ません
var player = document.getElementById('ply');
player.sendEvent("PLAY");
とすれば出来るよ!と
http://developer.longtailvideo.com/trac/wiki/FlashAPI に書いてありますが
「オブジェクトはそんなプロパティやメソッドサポートしてねーよ」と弾かれます
JW Playerを使いこなしている方、是非Javascriptからプレーヤーを操作する方法を教えて下さい
Flashのセキュリティの問題だったみたいです
>>955 は無かったことに
function addSelect(){ select = document.createElement('select'); select.setAttribute('name', 'select1'); for(var i=0; i<10; i++){ opt = document.createElement('option'); opt.innerHTML = i; opt.setAttribute('value', i) select.appendChild(opt) } document.body.appendChild(select); } IE7でname属性が反映されなくて困っています。 createElementメソッドでform要素を作成すると、 name属性の設定ができないバグがあることは知っています。 何か回避方法はあるでしょうか? ちなみに、追加したselect要素に対してすぐに他の処理(共通で使う関数を使用)を加える必要がある為、 DOMに反映されるタイミング保障されないinnerHTMLメソッドは使用したくありません。
959 :
Name_Not_Found :2008/12/27(土) 18:45:06 ID:m4W2RrNt
>>958 Q13 とはまったく関係ない質問をしているのですが・・・。
setAttributeメソッドでなくとも、
element.name = 'xxx' としてもJavascriptでname属性の参照が出来ない、
ということについての回避策が無いかを聞いているのですが。
960 :
Name_Not_Found :2008/12/27(土) 19:00:46 ID:m4W2RrNt
>>959 補足になりますが、name属性の参照は document.getElementsByNameメソッドを
使用するケースです。
firefox等では、createElementメソッドで追加を行うと、追加した要素の数が、lengthプロパティーで参照できますが、
IE6,7では常に0が返ってきます。
ちなみに、Q13 ですが、classに関する記述は間違いではないでしょうか?
以下のように記述すればsetAttributeメソッドでIE6,7でも反映できます。
(IE以外は'class'で指定する必要があるので、
element.className で記述を統一できるという意味ではあっているともいえますが)
element.setAttribute('className', 'aaa')
バグだって知ってるなら回避策も知ってていいと思うんだが
962 :
Name_Not_Found :2008/12/27(土) 19:34:16 ID:m4W2RrNt
>>961 innerHTMLメソッド(DOMに反映されるタイミングが保障されないので使いたくない)か、
IE6でしか有効でない回避策しか知らないので、その他に回避策が無いかここで聞いてみてるのです。
>>960 > 以下のように記述すればsetAttributeメソッドでIE6,7でも反映できます。
> element.setAttribute('className', 'aaa')
バグを回避するためにバグを利用するのはどうかな、と。
まあMac版のIE5のCSSハックとかも、バグを回避するためにバグを使うんだが MSはやくブラウザから撤退しないかなあw
965 :
Name_Not_Found :2008/12/27(土) 21:34:39 ID:m4W2RrNt
>>963 なるほど。
その通りですね。失礼しました。
>>963 しかしIE6,7でclass属性値を変更する方法がそれしかないのも事実
>>960 でも
>element.className で記述を統一できるという意味ではあっているともいえますが)
は完全に間違い
IE6,7だけ特別扱いするしかない、というのが現状かと
他のブラウザならclassで変更すればいい
IE8ではこの問題FIXされてるから
ん、HTMLならclassNameプロパティでええやん。仕様通りでIEでも動く。
968 :
966 :2008/12/28(日) 12:14:29 ID:???
>>967 あ、そっちのプロパティ? ならいいや
カンチガイ スマソ
969 :
Name_Not_Found :2008/12/30(火) 01:55:19 ID:JpQ8Ys2m
初めて書き込みします。 javascriptはライブラリを設置する程しかできませんので、 教えていただきたいのですが、 bodyの背景を3つくらい用意し、 それを一定時間でフェードイン・フェードアウトさせ、 自動的に切り替わるようにしたいのですが、 どういうスクリプトになるのでしょうか? (3つの背景をループさせて表示したい) 本とか見てるのですが、 全くチンプンカンプンで・・・泣きそうです。。 すみません、どなたか教えていただけないでしょうか? もしくはヒントだけでもお願いします・・・
諦めたら?
おい、<!-- //-->ってなによ? ぐぐってもでてこねぇよ 初心者基本サイトいっても説明されてねぇし突拍子にでてくるんだけどさ。 この間に書かれたとこはスクリプトの重要な部分ですよ、的な感じでおk?
あ、今適当にサイト巡回してたら書いてたわ すいませんでした
「 」 ←画像を配置したい場所
○×□△■… ←配置したい画像
・ ○×□△■…という画像をクリックすると、押した順番に画像を配置したい場所に左詰めで配置されていく。
・ 画像を2回押すと、その画像が、配置したい場所からなくなる。空いた部分は寄せて隙間をなくす。
・3回目に押すと一番右側に再配置する
というスクリプトをつくりたいのですが、”空いた部分は寄せて隙間をなくす。”の部分で困っています。
document.getElementById(imgy).src = document.getElementById(imgy2).src;
の部分で
document.getElementById(...)はnullまたはオブジェクトではありません
というエラーメッセージがでてきます。
ソースコードです。
http://w5.abcoroti.com/~trpg2maho/cgi-bin/up/source3/No_0383.txt よろしければ原因と解決法をご教授ください。
>>973 そのエラーが出る行の前で「i/y/imgy/imgy2」とった変数を、
alertやtextareaに出して確認するといい。恐らく存在しない
場所を参照してsrcを書き換えようとしている。
それと、img属性にvalue要素をつけて数字として参照する
方法は行儀悪いし、左に寄せる処理自体も怪しい。
複数のブラウザで確認したり、デバッグ機能を持った
アドオンを導入すると問題解決につながりやすいよ。
>>973 押した回数で判断するより
表示したい場所に画像があるかないかで判断したほうがよくない?
あれば削除なければ挿入って感じにすれば
勝手に左詰めになるし簡単だと思うよ
>>973 y に代入する値を間違えているんじゃない?
画像の id の番号を代入するべきだと思うけど、value の値を代入してる。
その為、for ループに入らないから変数 imgy2 は undefined のままで、
ループに続く最後の画像を消す為の行でエラーになる。
おまいら親切だなぁ
JavaScriptだと最高何年までの計算ができるのですか?たとえば、 西暦1256年の7月27日のことも求められますか。限界を教えてください。
981 :
973 :2008/12/30(火) 19:13:18 ID:???
>>974-6 お忙しい中ありがとうございます!
おかげ様でどうにか希望通りの動作をしてくれました。
>そのエラーが出る行の前で「i/y/imgy/imgy2」とった変数を、
>alertやtextareaに出して確認するといい。恐らく存在しない
>場所を参照してsrcを書き換えようとしている。
var imgy = "img"+ y + i;
の出力結果が「img(yi)」 //本当は「imag(y+i)がほしい」
var imgy2 = "img" + y+1+i;
の出力結果もどうようなミスが原因で参照できない値を書き換えようとしてました。
>それと、img属性にvalue要素をつけて数字として参照する
>方法は行儀悪いし、左に寄せる処理自体も怪しい。
行儀が悪い、とは具体的にはどういうことですか?
>押した回数で判断するより
>表示したい場所に画像があるかないかで判断したほうがよくない?
>あれば削除なければ挿入って感じにすれば
>勝手に左詰めになるし簡単だと思うよ
挿入する仕様より一番右側に新たに追加する仕様が希望だったので。
なんだか分からんが、
>>973 の仕様をもとに作ってみた。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
function push(n) {
var d = document.getElementById('d0'), i = document.getElementById('i'+n)
if(i) { d.removeChild(i); return; }
i = document.createElement('img')
i.id = 'i'+n; i.src = 't'+n+'.png'; d.appendChild(i);
}
</script>
</head><body>
<div id="d0" style="height: 40px"></div><div>
<button type="button" onclick="push(0)"><img src="t0.png"></button>
<button type="button" onclick="push(1)"><img src="t1.png"></button>
<button type="button" onclick="push(2)"><img src="t2.png"></button>
<button type="button" onclick="push(3)"><img src="t3.png"></button>
</div></body></html>
あれ、今日か?まだあけおめじゃないのか? でも一日ぐらいずれてもわかんなくね?普通。
>>984 なんだか元質問者の仕様が曖昧でよく分からんね。直してみたが。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
<script type="text/javascript">
var st = {}
function push(n) {
var d = document.getElementById('d0'), i = document.getElementById('i'+n)
if(i) { d.removeChild(i); return; }
i = document.createElement('img')
i.id = 'i'+n; i.src = 't'+n+'.png';
if(d.firstChild == null || (st[i] = !st[i])) d.appendChild(i);
else d.insertBefore(i, d.firstChild);
}
</script>
</head><body>
<div id="d0" style="height: 40px"></div><div>
<button type="button" onclick="push(0)"><img src="t0.png"></button>
<button type="button" onclick="push(1)"><img src="t1.png"></button>
<button type="button" onclick="push(2)"><img src="t2.png"></button>
<button type="button" onclick="push(3)"><img src="t3.png"></button>
</div></body></html>
いつもと違ってみんな優しいな。こういう時のスレは後日見直しても
気分良いし、ためになるから大好きだ。
>>981 >img属性にvalue要素をつけて数字として参照する方法は行儀悪い
・普通はimgにvalueは使われない
・valueに設定された「文字列」を「数字」として扱ってる
あたりが行儀悪いって言いたいのでは?
991 :
973 :2008/12/31(水) 10:24:19 ID:???
当然の事ではありますが、WEBシステムを作る場合には、CGI(perl / php …)側でのチェック処理を 必ずやらなくてはならないですよね? という事は、クライアント環境でいちいちJavaScriptなんかでチェックを行う必要ってあるんですか? ※唯一考えられるデメリットとしては、全くクライアント環境でチェックを行っていない場合には サーバへのアクセスが頻繁に発生してしまいパフォーマンスに影響が出るのでは無いかとは思いますが。 あと、矛盾するかもしれませんがクライアント環境でチェック処理を行う場合には通常は、JavaScriptを使いますが これをVBSにしVBS+PHPとかでWEBシステムを組む事は出来るんですか? ASPならVBS + VBという組み合わせで既存システムにはありますが、VBS+PHP(perl)とか聞いた事が無いです。
>>992 VBScript でも当然同等のことはできるけど、動作するのは IE のみ。
>>994 あざーす。
>>995 、、、まさかVBS+phpとかの組み合わせだとまずいとは知りませんでしたw
勉強になりました。
乙梅
999 :
Name_Not_Found :2008/12/31(水) 13:19:17 ID:5XVow6Nm
うめ
1000 :
Name_Not_Found :2008/12/31(水) 13:20:01 ID:5XVow6Nm
うめ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。