+ JavaScript の質問用スレッド vol.64 +
【質問を書く上で】 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']」は同じ意味です。
【FAQその2】 Q9. Aタグのonclickで動作指定してるのですが時々動きません… A9. 「onclick="...;return false"」としないとページ移動しちゃうから。 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。 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が置き換え前の文字列全体になります。
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
>>1-7 乙カレー様でした。FAQの追加が入り損なったけど
私ことスレ立て人に立てられなかったのでしょうがないよね。
とりあえず、前スレで出たFAQの追加提案を挙げておきます。
Q16. input type="file"の値を設定(参照)できないのですが…
A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
あとこれは提案だけあったのだけどよく出るのは確かだから。
Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A17. コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。
そして最大の課題は
>>1 をどう改訂するか。道場訓をやめる?
やめたとして、何をどう書く?
>>1 の代替案一式、求む…
あと、関連スレ
>>7 に次のものを入れた方が親切かと思いました。
○手取り足取りスレ
○WSHスレ
○bookmarklet (1行javascript)スレ
一方、「ぐぐれ」の解説なんか要らないよねー。参考サイトは
結局いいものがないんだよねー。
>>12 いいね。あと、常連(自称を含む)に釘を挿したいことがあれば今
提案してくれるといいと思うよ。スレの流れの中で喧嘩するより
今議論して合意しておく方が建設的でしょ。
発言が気に入らないとかいってネチこくそいつのIP晒してた「常連」(?)が いたな。スレどころか2chの存在理由に逆行してるだろ。そういうことがま かり通るスレにはなって欲しくない。
>>15 もちろんそれは当然だな。というか、常連の問題じゃなくそいつ
個人の問題でしょ。2ちゃんにキチガイはつきものだから。
で、テンプレにわざわざ書くようなもんでもないよね。普通の人は
分かっているしキチガイはテンプレに書いてあったってやめないから。
17 :
15 :2008/04/14(月) 14:18:13 ID:???
>>16 当然とは思わないな。それは一体誰の裁きなんだ?何事においても常に正
しい「常連」様が判定なさったものだから悲しくもIP晒された方はやられ
て当然という論理か。プログラミングでの発言の程度なんかタカが知れて
るだろ。深刻な問題に発展したらアク禁すりゃいいんだよ。
当然ってのは最後の文にかかってるんじゃないのか
15は読解力がないなぁ。 「プログラミングでの発言の程度なんか」とか言っちゃってるし。 こういう奴にテンプレ議論とか向かないよな。
まあ向く向かないとか解釈とかはさておき、ズバリこういう文章を テンプレに入れてはという具体的提案でどぞ。洩れはキチガイ対応な 記述は入れる必要なしと思っているけど、文案がよければ賛同者が増える かも知れないよ。
この雰囲気がJS終了を象徴している。クラや上司がFlexに示す反応は良好だからな。隙間でじっとしていないでASをやれ。おまえらには素養が十分すぎるほどあるのだから。
>>21 今後50年間(アンタが死ぬまで)言い続けてるといいよ。せいぜいがんばって。
しかしこのスレが始まったとき、64スレも続くと思った奴はいなかったろうなあ。
>>14 質問と回答、それにその質問から派生する話題や議論が行われるスレであって、
質問に対する煽りというか厨の小言は邪魔なだけなので、
煽るくらいならスルーするか適当なスレに誘導するなどをすべきだと思うね。
>>13 のゴタクは質問者に関する物だけで、回答者(実際は回答していないようだけど)側の姿勢が欠落しているのが痛い。
>>23 過去に何回も出た議論だが、初心者を甘やかすのは反対だし、
それにはスルーではなく何か言うというのがこのスレのスタンス
だと思うね。回答者に対するゴタクがないのは、現状のテンプレの
>>1 がそうだから。で、どういうことを入れる?
洩れとしては、「質問者の態度がなってない場合煽ってもいいが、
その場合でも書き込みには必ず回答、ヒント、誘導などが含まれること」
とかがいいんじゃないかと思うが。
そもそも回答者は
>>1 以外のテンプレも見てるわけだから、
>>5 などにちゃんと書けばいいんでないの。
ブラウザのテキストエリアにjacvascriptのソース貼ってそのまま動作確認できるページあったと思うんですけど 何処にあるか忘れてしまったので教えてください
それくらい自分で書けばいいだろ
28 :
Name_Not_Found :2008/04/14(月) 19:28:59 ID:XcAflklm
openWYSIWYGの質問です。
http://www.openwebware.com/products/openwysiwyg/ リッチテキスト内をクリックした時、アラートを出したいのですが、
うまくいきません。
wysiwyg.jsの375行目付近の
// Write the textarea's content into the iframe
doc.open();
doc.write(content);
doc.close();
辺りをいじればうまくいくのかと思いましたがうまくいきません。
doc.onclick=alert();
とかやってもダメみたいです。
iframe自体にはonclickが効かないので、iframe内のdocumentを取得して
それにonclickをセットするみたいなイメージなのですが・・・。
お時間のある方、教えてください。
Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが 「"...this..."」とか「function(){...this...}」ではうまく行きません。 A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。 「function(x){return function(){...x...};}(this)」のようにthisを別の変数に 束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中) 今まさにこれで詰まってるんで 是非解説お願いします 引数にthis入れて解決はしてるんですが メモリリークの問題ありっていうのが気になるんで
>>29 どうも最近のIEはスワップに記憶することで一応の解決を図っているんじゃないか?
ろくに確かめもせずに言っているので自分で確かめて逆に知らせてくれ。
俺個人はその問題に該当するようなコードを一切書かないからもう興味がない。
>>29 丁寧にリーク解消していくか、prototype.js のよう(ry
32 :
Name_Not_Found :2008/04/14(月) 20:33:26 ID:cliXB7ty
33 :
960 :2008/04/14(月) 21:58:45 ID:???
遅くなったけどスレ立て乙です。 まさか1日でPHP卒業しろと言われるとは思わなかったよ…
しょぼい質問で恐縮ですが こんな感じで表示している画像の位置を取得したいのですが どういう風にすれば取得できるでせうか? <DIV style=cursor:crosshair;> <IMG src="test.jpg" id="img1" > </div> 今現状の取得の仕方 var tmp = document.getElementById("img1"); document.getElementById("text_area09").innerHTML="pos:"+tmp.style.top+","+tmp.style.left; imgタグに <IMG src="test.jpg" id="img1" style="position: absolute; top:100px; left:100px;" > と書いてあれば取得できるのですが・・ またできれば画像の幅なども取得できる方法があればご教授願います
>>34 offseTop offsetLeft offsetWidth
おお! ありがとうございます!
37 :
960 :2008/04/14(月) 22:48:54 ID:???
今まで他の人に頼りすぎていたようだ・・・ これからはPHPとJavaScriptを駆使して自分のサイトのコンテンツは自分で作ろうと思う。 一言掲示板はちょっと更新するだけで書き込まれるというカスだったけど、 やっと「ページにアクセスすると数字が1増えて表示される」という世にいうカウンター的なものができたっぽい。
38 :
Name_Not_Found :2008/04/14(月) 23:02:18 ID:XcAflklm
age
37 - 960 < 0
41 :
960 :2008/04/14(月) 23:48:54 ID:???
>>39 前スレでの960を表わしてるからね。
Perlもやってみようかと思ったけど、ごちゃごちゃしてきそうでやめた。
でもifとかwhileとか結構似てるもんだね
>>41 普通の言語はほとんど一緒だぞ>ifとかwhile
Haskellとか純粋関数型言語でもifはあるな。whileはしらんけど。
46 :
28 :2008/04/15(火) 01:03:56 ID:IrMnQWXR
私もかまって頂けると嬉しいです
>>28 344のdesignMode=onをコメントアウト
>>47 いいね。
まずListing 5のリークだけど、window.onloadを抜けてobjがなくなるくせに、リークするってのが分からんな。
IEでよくあるのは、リロードボタン押していくとメモリがどんどん増えるってやつだけど、
これはそうではなく、onloadが終わってもメモリが解放されてないって意味だよな。
>>49 ああ、ごめん。3行目訂正。この例は要素のプロパティにぶっこんでるからか。
documentツリー自体はずっと存在してるもんな。
>>29 し〜ん。誰も説明できんがなww
タイマーはbind(「function(x){return function(){...x...};}(this)」)しても問題ない。
イベントはunloadとかremoveChild、innerHTMLのタイミングの直前で消せば、メモリーリークは起きないよ。
(つまり相互参照状態にしておいて、そのあと、イベントを切ることで相互参照を解除させる)
とりあえず、一般にメモリリークというと2つ問題があって、
ページ間リーク: リロードするたびにメモリが増える。(ブラウザを終了しない限り解放されない)
ページ内リーク: 操作しているとどんどんメモリが増える。
>>40 のIE8のホワイトペーパーとか
>>47 で出ているようなものは、後者の問題解決が書かれてある。
>>47 の後半の方とかは前者のことが書かれてある。
あと
>>47 のListing 5とか6はDripなどの検査ツールで結果が変わらないためサンプルが悪い。
本当は、innerFunction内でobjへの参照を持っていることが言いたいだけ。
(たとえinnerFunction内でobjを使っていなくても参照持っちゃって)
すまん。
×
>>47 の後半の方とかは前者のことが書かれてある。
○
>>40 の後半の方とかは前者のことが書かれてある。
誰も説明できんがなww 誰も説明できんがなww
メモリリークが気になるなんて、一体どんなものを作ろうってんだ!?
>>52 再度やりなおせこの初心者が。過去ログとかを無にするような出鱈目で上書きすんじゃねえよ馬鹿が。
再度やりなおせこの初心者が。過去ログとかを無にするような出鱈目で上書きすんじゃねえよ馬鹿が。
google作ってって言われるけどな。 googleを利用したサイトを作ってレベルなら問題ないんだけどな。
再度やりなおせこの初心者が。過去ログとかを無にするような出鱈目で上書きすんじゃねえよ馬鹿が。
JavaScriptのこれだっていうまとめサイト欲しいよね まだまだ発展途上だなあと感じる
初心者こと
>>52 です。以下のをDripで見てみて。
setTimeoutの行のうちどれかを有効にする。prototype.jsの関数は別途あるとして。
>>52 のうちの前半3行がまずいことの根拠が示せると思う。
これでFAQ14を書き直せるんじゃない。
(Dripのrefsの初期値はこちらは6だったけど、ブラウザのバージョンとかで違うかも)
<html><head><script>
window.onload = function(){
CLASS.M1();
};
function test1(){ alert("5秒経過"); };
CLASS = {
M1: function(){
var node = $("a");
// setTimeout(test1, 5000); //id=aのノードのrefsがずーと6のまま
// setTimeout(function(){ test1(); }, 5000);//ref2が5秒間だけ7になってその後6に戻る
// setTimeout(test1.bind(this), 5000);//id=aのノードのrefsがずーと6のまま
}
};
</script></head><body>
<div id="a">JS</div>
</body></html>
>>63 そりゃいいんだけど、どう書き直すのがいいってことかな?
ここにIEのリークのやつは、原因は書いてある(例によって日本語でおkだけど)
ttp://support.microsoft.com/kb/830555/ja ここには、
「ブラウザで新しい Web ページまたはいつブラウザ ウィンドウが閉じられるを開くと、このメモリ リークが終了します。」
「This memory leak will end when the browser opens a new Web page or when the browser window is closed. 」(英語)
とありますが、そのうち「the browser opens a new Web page」の部分が気になっています。
新しいWebページを開く(画面遷移のことだと思っています)動作をしたとしても、
メモリーリークは終了しないと考えていますが正しいでしょうか?
それとも、IE6とIE7で新しいWebページを開いたときにメモリーリークする・しないが変ったのでしょうか?
>>65 前に出てた議論では、(1)循環参照によるリークは画面遷移しても
終了しない(ブラウザを終わらせるしかな)、(2)新しいブラウザでは
循環参照があってもガベージコレクションできるようになる、
だったかな。具体的にどのブラウザなら直ってるのかとかは
出てなかった気がする。
MSのサポートページいつの間にこんなデザインに・・・
>>65 APPLIES TO
• Microsoft Internet Explorer (Programming) 6.0
• Microsoft Internet Explorer 5.5
• Microsoft Internet Explorer 5.01
とあるがXPIE6でそのページのサンプル実行しても再現しないな。
98のIE6で試してみたら確かにリークした。
もしかしてもう治療済みなの?教えてエロイ人!
var body = document.getElementsByName("body")[0]; var bodybefore = body.value.substring(0,body.start); var bodyafter = body.value.substring(body.start,body.value.length); body.value = bodybefore + emoji + bodyafter; body.focus(); .start ってこれであってますか?うまく動かないんですけど><
>>69 「うまく動かない」ではなく、まずこのコードが「どのように動作する
つもりであるか」「それに対してどのような(期待と異る)動作をするか」
を書く。あとJavaScriptエラーが出ていたらそれを報告する。
手足スレへ。
74 :
73 :2008/04/17(木) 15:47:59 ID:???
>>70 name="body" にしてたのですが変数名よくないですね^^;
>>71 すみませんありがとうございます><
.selectionStartというのが見つかりました。
>>74 その文章のうち、一番重要な文はこれかな。
all elements not still attached on unload are still leaked, along with the transitive closure over all references Javascript objects
unload時にイベント削除しないと未だにリークしてたって書いてあるの?
「transitive closure」ってのが何か分からないけど、普通のクロージャーのことだったら、
不完全どころか、何も変わっていないんじゃないの?
それともリロードしたときに増えているメモリの量が以前より少なくなったってことでしょうかね。
input type=fileについて質問です。 ファイルをアップロードする前にファイルサイズを知る方法はありますでしょうか? よろしくお願いします。
>>76 transitive closure = 「推移閉包」つまりあるものから直接/間接に
辿れる範囲のものすべて、という意味。関数クロージャとは別物。
一番重要な文の意味は「unload時にdocumentのどこにもくっついて
いないDOMオブジェクトとそこからたどれるもの全てはリークする」
だから対策としては、全部documentにくっつけて切り離さない
ようにするか、切り離すとしてもunload時にはどっかにくつつけ直す。
けれどしかし、この対策の入ったIE6と入ってないIE6が混在する
ことになるわけで、結局循環参照を避ける必要はあるんだろうな…
>>77 ない。だいたいがファイルの名前だけしか分からないとか
名前すら分からないブラウザが大多数だし。
>>78 なるほど。すごす。
prototype.jsがやってるようなやり方以外にも、
パッチがあたってることを前提にした場合、その方法が取れるわけですね。
Dripでrefsを見ていると、 画面をクリックするだけでHTMLやBODYの値が増えていきます。 これは、Dripが何かしているせいなのか、 何もしなくてもブラウザが増やしているのかをご存じでしょうか? __drip_hookedというプロパティが追加されているぐらいだから、何かしてると思われますが、 refsが増える原因がそのせいかどうかが分かりません。
83 :
77 :2008/04/18(金) 09:09:10 ID:ukCxpmDy
HTMLタグってイベント張ってもよいんですかね? MSDNのonclickなどのイベントのページを見てみると、 そのタグだけないので。 ちゃんとイベントは発動しているけども。
日本語でおk
function test1(){..} function test2(){..} のように定義した関数の一覧を取得したいと考えています。 (この場合、test1とtest2が欲しい) firefoxではfor/inでwindowオブジェクトを列挙すれば取得できましたが、 IEでは列挙されませんでした。IEで取得する方法を教えてください。
HTMLノードに対してattachEventを行っても問題ないでしょうか? 例えばMSDNのonclickの解説ページを見てみると、 そのイベントを設定することが出来るタグの一覧がありますが、 そこにHTMLノードは載っていませんでした。 しかし、実際に以下のようにonclickを設定してみると、発動はしました。 document.documentElement.onclick = function(){ alert("僕、アルバイト"); };
数値をブラウザ上に表示されないタグに埋め込んでDOM操作で参照したいんですが そういうふうに使えるタグはありませんか
>>88 ブラウザ上に表示されないタグ?
逆に表示されるタグって何?
>>88 input type=hidden もしくはCSSで不可視化
91 :
Name_Not_Found :2008/04/19(土) 06:13:23 ID:enNAGfgH
print("はろーわーるど"); ↑をCSSで飾ってhtmlで実行すると普通に表示されるんですがjsで保存して実行するとエラーになってしまいます。 jsだとだめなんですか?
JScript なんじゃないかとエスパー
>>91 JavaScriptでそれを表示するんだったら
alert('print("はろーわーるど");');
とかを実行するんじゃないの。画面に出力する機能の
呼び出し方とか種類とかは言語によって全部違うから。
自分のヤマカンで書いても動かないよ。入門書でも買って
ひととおり勉強するべきだと思うがね。
>>87 なんでbodyではだめでhtmlがいいの?
トップレヴェルのスーパータグだからでしょう。 確かそこは言語特性以外の記述は不可なのでは?
<canvas>タグに線やらを引いて その後に(あるいは前に)文字を document.write()とかdocument.body.innerHTML+="" で、追加するとcanvas内の線等が消えます。 IEではexcanvas.jsを使ってるんですが、何の問題もないのですが、 Firefoxだと、消えてしまいます。
事故解決しました。 スレ汚しすいまsねn
>>81 おお、まじだな。IE8 beta1でも4つともリークしていて、
document.bodyにくっつけるとリークしなくなった。
>>93 >>94 画面端の方をクリックするとbodyでは拾えないからです。
HTMLに張るのが問題なければ、そこで取りたいと思ったためです。
onclickの場合はバブルするので問題ありませんが、
バブル不可能なイベントをそれで取りたいなと。(キャプチャフェーズは使用しない前提)
>>97 つか、この問題8でも解決してないのかよw
ひどすぐるw
至る所で「8は神」みたいな風潮にあるが、所詮はIE。
>>88 参考にならない揚げ足取りはどうでもいい
>>90 どうもありがとうございます
はやくIEでaddEventListener使いてえ〜
104 :
Name_Not_Found :2008/04/19(土) 17:29:05 ID:NMIAkG+P
こんにちは。fromタグにnameが使えなくなるって聞いたんですがホントですか? これまでたくさん作ったのはどうなってしまうのでしょうか。
クラス継承図はどこを見ればorどういう処理をしたら分かりますか? たとえば、 HTMLDivElement→HTMLElement→Node→Object といったものです。
>>101 ありがとうございます。DOM2では、使用可能ということですね。
ちなみに、なぜIEが設定可能タグ一覧にHTMLをのせてないかの理由は分かりますか?
109 :
107 :2008/04/19(土) 22:20:51 ID:???
>>108 そういう違いがあるのですね。
そのような状況において、マニュアルに載せる載せないの選択肢があると思いますが、
MSは載せないという選択肢を選んだということでしょうかね。
古いIEでは、「DOMで操作不可能」なのでは?というのが気になっています。
>>109 おそらく、IE4とそれ以前は怪しいだろうけど、IE5
は大丈夫なんじゃないかな? IE4ユーザを想定するサイト
なんて今どき無いでしょ?
111 :
105 :2008/04/19(土) 23:18:07 ID:???
>>108 IDLですか。。。
JavaScript側で継承元のinterfaceを辿りたいのですが、その方法はないということですね。
112 :
Name_Not_Found :2008/04/20(日) 19:32:15 ID:N3uxyx7k
JavaScript→Ajax いえーい(^O^)/
>>112 KYな俺はどう反応すればいいか分からないからやめてくれorz
最近、JavaScriptというより日本語が不自由な質問多いな
結局、
addEventListener("DOMFocusIn", function(){}, false);
はいつ使えるの?
前スレではfirefox3で使えないというのが出てるし、
ttp://developer.mozilla.org/ja/docs/DOM_Events にはfirefox3のアイコンはないし。
でもネットで検索したら、3から使えるというのが引っ掛かるし。
ちなみに、手元のfirefox2だと動かなかった。指定が悪いんかいな。いえーい(^O^)/
下のボタンでテキストエリアに出力するにはどうしたらいいんですか? <script language="javascript"> <!-- function hiduke(d){ document.form.texta.value=hiduke(d); } //--> </script> <form name="form"> <input type="button" name="date1" value=" 日付を下に書き込み " onclick="hiduke('new Date()')"><br> <textarea cols="50" rows="10" name="texta"></textarea> </form>
>>117 その関数hidukeの中身(1行しかないけど)をどういう意図で書いているか
説明してみ。
<form action=""> <p><input type="button" value=" 日付を下に書き込み " onclick="this.form.elements['texta'}.value=new Date()"></p> <p><textarea cols="50" rows="10" name="texta"></textarea></p> </form>
120 :
117 :2008/04/21(月) 15:37:23 ID:???
このスレはこの程度か
>>120 このスレのレベルなら過去スレ全集を見れば分かるから。
ぼうや、再帰呼び出しって知ってるかい。皆あきれて
スルーしてるだけでしょ。
>>118 なんて親切なもんだぜ。
122 :
質問させて下さい :2008/04/21(月) 18:44:12 ID:XeqBLXIH
やりたいことなんですがランダムで画像を表示して画像をクリックすると指定したURLにとばしてあげる。 画像リンクの上にサイトのタイトルをテキスト+center表示させてあげたいです。 画像をクリックして指定したURLにとばすことは出来ましたが、どうすればサイトタイトルと画像(リンク先)を合わせることが できるのでしょうか? <script language="JavaScript" type="text/JavaScript"> <!-- var icnt = 2; var myDate = new Date(); var d = myDate.getSeconds(); var idx = d % icnt; var bnr=new Array(); var lnk =new Array(); bnr[0]="1.jpg"; lnk[0]="URL"; bnr[1]="2.jpg"; lnk[1]="URL"; document.write('<a href="' + lnk[idx] + '" target="_brank">'); document.write('<img src="' + bnr[idx] + '" border="0" alt="">'); document.write('</a>'); --> </script> アドバイスをお願いします。
123 :
質問させて下さい :2008/04/21(月) 18:51:26 ID:XeqBLXIH
次のようにしたんですが最後の記述がわかりませんでした;; abc=テキスト表示です。 <script language="JavaScript" type="text/JavaScript"> <!-- var icnt = 2; var myDate = new Date(); var d = myDate.getSeconds(); var idx = d % icnt; var abc=new Array(); var bnr=new Array(); var lnk =new Array(); abc[0]="あいうえお"; bnr[0]="1.jpg"; lnk[0]="URL"; abc[1]="かきくこけ"; bnr[1]="2.jpg"; lnk[1]="URL"; document.write(ここをどのように記述すればいいのでしょうか?); document.write('<a href="' + lnk[idx] + '" target="_brank">'); document.write('<img src="' + bnr[idx] + '" border="0" alt="">'); document.write('</a>'); --> </script> 何度も申し訳ありません。
117のフリしたらなんかおっさんが吠えてきたw
125 :
質問させて下さい :2008/04/21(月) 19:11:10 ID:XeqBLXIH
>>118 練習用にと思ってやってたんで引数は簡単に付けました↓
>>119 ありがとうございます、丁寧に教えてくれて。前に書いた117としばらく
睨めっこしてたらformの後に全角スペースが入ってるのに気がつきました;
こんなアホな間違いを(´Д`;)
ちなみに
>>120 は自分の書き込みじゃないです。
ご迷惑おかけしました。
>>116 まじっすか。
じゃぁ、
>>106 にあるのは、
「使えるかもしれない」リストなんですね。
「使える」リストがどこかにまとまってりしないかなぁ。
var a = new A(); と等価なコードが知りたくて、 var tmp = function(){}; tmp.prototype = A.prototype; A.call(tmp); var a = tmp; としてみたけど、全然ダメだわ。 もしかして、等価なコードって書けない?
ECMA262-3rdの15.4.5.1を参考に[[Put]]を実装しろ
>>128 new A == new A; // false
どうなったら全然ダメじゃないんだよ
言語のプリミティブと同等の動作が他の手段で実現できる 場合なんてむしろ少ないだろ。何がやりたいんだろう。
>>129 できればソースでお願いします。
>>130 new禁止
>>131 prototype.js内にあるnewという単語がなくなって、それでも今までどおり動けばおk
newがなくなるとどういう利点があるの
>>133 自分で考える気がないのならとっととよそへ行け。
しかしnewの替わりということだと、オブジェクトは
オブジェクトイニシャライザ {...} で作るとして、
prototypeをどうやって設定するかが問題だよねー。
洩れはnew以外の方法は無いと思っているのだけど、
何かアイデアある?
__proto__ & watch()
動くか知らんが function New(/* constructor [, arg1[, arg2[, ...]]] */) { var con = Array.prototype.shift.call(arguments); var tmp = con.prototype; con.apply(tmp, arguments); return tmp; } var a = New(A);
あ、やっぱりだめだ。prototype がぶっ壊れる かといってコピーすると継承できないしねぇ
139 :
Name_Not_Found :2008/04/22(火) 19:27:08 ID:CHLI8z4C
かなり初歩的な質問ですけど、 onChangeで関数を動かした結果を、特定の場所に出力する。 ということをしたいのですけど、 出力するところの処理が分かりません。 どのようにソースを書けばよろしいのでしょうか?
>>139 出したい場所のHTML要素にid振って
document.getElementById('ID名').innerHTML = '文字列';
>>140 そのようになるのですね。
ありがとうございました。
s
IEのメモリーリークで2つ質問。IE6以下はパッチあて済み前提。 1.documentツリーから切り離されているDOMオブジェクト同志が 相互参照している状態でリロードしてもメモリ増え続けない? 2.JSのオブジェクト同士が相互参照している状態でリロードしても メモリ増え続けない?
<link>タグのhrefのURLを動的に決定したいと思っています。 それを実現する処理を、JavaScriptで書けば簡単なのですが、 外部ファイルが非同期な読み込みになってしまいます。 (HTMLならファイルの読み込み完了まで待って、 次の行を読み込み始める動きをしてくれる(defer付与なしの場合)) JavaScriptでlinkノードを動的に追加するさいに、 同期で動かすためのオプションなどご存じではないでしょうか?
>>144 そんなものはない。linkの内容は何さ。スタイルシート?
もしそうなら、そのファイルの末尾にあるCSS記述がDOMから
取れるようになるまで20msec間隔でチェックするとか。
>>146 ECMAにはまさに「このメソッドは意図的に汎用にしてあるから
別のオブジェクトに対して呼んでもいいよ」みたいなことが
メソッド毎に書いてあったりする。というかこんなとこで
聞くより自分でECMAチェックした方が早いでしょ。和訳版もある。
(テンプレ参照)
>>145 CSSだね。
う〜ん。IEならonloadだかonreadystatechangeだかで読み込み完了の
イベントの検知は出来るからそれはやってる。
でも、その処理を入れること自体がいやで、ためしにnodeferとか
利かないかなと思ったんだけどダメでした。
FireFoxとかはCSS読み込み完了のイベント検知出来ないんだっけ?
149 :
Name_Not_Found :2008/04/23(水) 09:41:58 ID:wdo/MqPt
ぐぐれ化す
「○○なサイト知りませんか」とか「○○なサンプルありませんか」とか激しくスレ違い 脳みそがあるんだから考えてからレスしろよ
>>151 可愛い彼女を手軽に見つけられるサイトありませんか?
世の中には、教えてくれないことがいっぱいあるのです。 なんでも教えてくれるというふうに思い込んでいる頭を、 まず改めないといけません。 社会では、誰も何も教えてくれません。 教えてくれるようなことは、たいてい役に立たないものです。 本当に役立つことは、教えてくれないことの中にあるのです。 ―中谷 彰宏「自分で考える人が成功する 」―
楽天はやめとけ。自分のメールを探すのが大変だ。楽天の宣伝メールだらけ。
159 :
Name_Not_Found :2008/04/23(水) 19:38:28 ID:fLE4gTmP
No = selOBJ; if( No.match(/[^0-9]/g) ){ alert("数字以外が含まれてます"); } 取得したデータが数字かどうかを調べたいのですけど、 このようなソースを書いたらエラーになりました。 どこが間違ってるのでしょうか?
No = selOBJ; if( No.match(/[^0-9]/g) ){ あたり
161 :
Name_Not_Found :2008/04/23(水) 19:53:16 ID:fLE4gTmP
>>160 間違っては無いはずですよね?
だけど、実際にはエラーで止まるし、
Firebugでも
「No.match is not a function」
と出てきてしまうのですけど、
matchは文字列用のメソッドだから、 Noが文字列じゃない場合はエラーになるお
Dojoを使っているんですけど、Dijit.Textareaで問題が。
MML@L4b>b&b8cc.L4d<dみたいなテキストを入れると自動的にメールアドレスに変換されてしまい困っています。
扱っているデーターが特殊で、みたいに不等号や&などがあるため、
この結果、&&&&みたいな命令が消えてしまい、データーが化けてしまいます。
この自動変換機能を無効化する方法が知りたいのですけど、わかりませんか?
ソースコード見てもどこで変換しているのかよくわからないし。
http://trac.dojotoolkit.org/browser/dijit/trunk/form/Textarea.js って、JavaScriptのフレームワークの質問もここでいいのだろうか?
164 :
Name_Not_Found :2008/04/23(水) 20:26:37 ID:fLE4gTmP
>>162 なるほど。PHPやってたせいでごっちゃになってたみたいです。
ありがとうございました
<script language="JavaScript"> <!-- var hairetu=new Array('日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'); var myD =new Date(); var myDay=myD.getDay(); var hyouji='今日は'+hairetu[myDay]+'です。'; document.form.text.value=hyouji; } //--> </script> <form name="form"> <input type="text" name="text" size="60"> </form> これでonloadは使わないで曜日を表示するやり方ってありますか?
>>165 script要素を当該input要素より後に置く。
もういらないよな
なんで?
時の流れかな
>>170 時代錯誤甚だしいな。ケータイ厨がカモネギ状態で美味しい時代なのに、コメントアウトしなかったら、最悪だ。
ケータイはどうでもいいがそんなものを書いておくと豚でもない ことになる時代がすぐそこに来ているよね。
>>163 Dijit.Textareaはブラウザ組み込みのcontenteEditable使っていて、IEで見ると、勝手にリンクになる。
見た目だけなら対象の要素にのCSSに以下を設定すればごまかせるかもよ。
text-decoration: none;
color: black;
split(/\r?\n/)とすると、改行ごとに配列にしてくれますが、 連続した改行がまとまってしまいます。 splitにはあくまで正規表現を渡しつつ、 連続の改行がまとまらないようにする方法ってありますか?
>>64 A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。
「function bind(x){return function(){...x...};}」という別関数を用意して、
「bind(this)」のようにthisを別の変数に束縛しその変数を使って。
メモリリークは書くとしても別項目でよいかなぁと。
>>171 すまんが、ケータイってソース見えるの?
>>171 ケータイ相手に無駄スクリプトまで送ってパケ浪費させるとか
それこそ時代錯誤だろ。外部に置けよ。
ケータイ中継サーバーが削除してくれるんじゃないの?
>>167 あとこれもな。language="JavaScript"
divに設定されているスクロールバーをスクリプトで移動させる方法はありませんか scrollToやscrollByはwindowのメソッドでつかえないみたいなんですが
181 :
小5 :2008/04/24(木) 03:14:41 ID:yfY3kTgw
js をテキストでコピーしたりして、自分で一部追加機能をつくってみたりした時は キャラセットとかいろいろ、えと、どういう保存のしかたすればいいんでしか? ふつうに.jsて拡張子つければいいの?エロイ人教えてください
182 :
180 :2008/04/24(木) 03:51:37 ID:???
事故解決しました scrollTop若しくはscrollLeftプロパティーに値を入れる事でスクロールできました
>>166 どもです!
ジャバスクって何気に奥が深くって難しいっすねorz
184 :
Name_Not_Found :2008/04/24(木) 05:55:23 ID:odH156OE
youtube見ようと思ったら見られなくなりました。 フラッシュプレイヤーを入れるかジャバスクリプトをオンにしてくださいと出ました フラッシュは確実に入ってるので、ジャバをなんかやらかしたみたいです。 どこを見ればオンに出来るのでしょうか?
>>184 ここはJavaScriptプログラムを開発する人の質問スレ。
というかそもそもここはWeb制作板なんだから板違い。氏ね。
>>181 文字コードはメインページの文字コードに合わせておくのが
いいんだと思うけどな。そういう話じゃないの?さすが消防で
質問の趣旨が非常に分かりづらいのであしからず。
ソース内にある「?」 って何なんですか?
ハア??? もしかして「3項演算子」のこと? z = (x > y) ? 0 : 1; // x>yなら0、そうでなければ1をzに入れる
手取り足取りスレが、長いソースを貼ってこれを理解しろ的な流れで、 こっちのスレが初心者用スレとなっているという不思議。
もういいよ教えなくて
スタイルシート span{font-weight:bold;} div{margin-left:20px;display:block;} スクリプト var expires = new Date(); expires.setDate(expires.getDate() + 30); function setCookie(name,value,expires){ var cookieStr = name + "=" + encodeURIComponent(value);cookieStr += expires ? " ;expires=" + expires.toGMTString() : ""; return cookieStr; }function getCookie(name){ var value; var cookies = document.cookie.split(" ;"); for(i=0;i<cookies.length;i++){ value = cookies[i].split("=");if(value[0] == name){return decodeURIComponent(value[1]);}}return null; }function menuFold(id,cookie){ var type,node = document.getElementById(id); if(node.style.display == "block"){node.style.display = "none";type = "false";} else{node.style.display = "block";type = "true";} setCookie(cookie,type,expires); }function loadFold(id,cookie){ var c = getCookie(cookie),node = document.getElementById(id); if(c == "false"){node.style.display = "none";} } HTML <body onload="loadFold('menu1','Mc1');loadFold('menu2','Mc2')"> <span onclick="menuFold('menu1','Mc1')" onselectstart="return false">メニュー1</span> <div id="menu1">メニュー1-1<br>メニュー1-2</div><br> <span onclick="menuFold('menu2','Mc2')" onselectstart="return false">メニュー2</span> <div id="menu2">メニュー2-1<br>メニュー2-2</div> こんな感じで記憶機能のあるメニュー折りたたみを作ってるのですが記憶できません。 どうすればいいでしょうか?
すいません、自己解決しました。 Cookieに書き込むのを忘れてました…(document.cookieをreturnにしてしまっていた)
document.cookie.split(" ;"); でいいのか?
("; ")ですね…
コメントアウトをきちんと整理できてるのって、俺以外だと国内に10人もいないからな、たぶん。
だから、馬鹿どもがすぐに否定し始める。
>>172 ケータイがどうでもいいとか、もう究極のアホだな。むしろJSの方がどうでもいい、大差でな。
>>177 外部に置け?置けない時の対処法だろ。置けるならすぐ置くわな。そもそもこの板でrootやsudoで何でもやってる奴はほとんどいない。
>>196 アンタがエラソーに言えば正しくなるわけじゃないだろ。
まあ2ちゃんだから煽るなとは言わないけどね。おつかれ。
>>174 をよろしく。
"a\r\n\nb".split(何か).lengthが3になってほしい。\rを削りつつ。
IEのバグだから無理
>>196 X|HTMLの仕様すら読んでないことだけはよく分かった。
とても初歩的な質問なのですが 現在当方のJavaScriptがOFF状態になっているのですが これをONにするには、どう操作すればよいのでしょうか?
>>200 まずreplaceで\rを削除し、その後で\nでsplitしたらどうかな。
>>204 ワロタ。自分と世界が完全に一体化しているな。
IE にそんなバグがあったのか 1文字ずつ検索しなきゃならんな
211 :
Name_Not_Found :2008/04/26(土) 07:21:02 ID:5Z58ufLR
フォームに最初に「文字を入れる」と入力されていて、 フォームにクリックするとその文字が消える仕組みにしたいんですけど、知識ないですけど、そのやり方を教えてください。 確か <INPUT TYPE="text" name="?" value="文字を入れる"> の後ろに何か加える?(onclick?)ようなやり方だったと思うんですけど。
論外
<INPUT TYPE="text" name="?" value="文字を入れる" onclick="this.value=''">
(X?HTML)
216 :
211 :2008/04/26(土) 13:04:26 ID:5Z58ufLR
('X?HTML','i')
>>216 <input type="text" name="?" value="文字を入れる" onclick="if(this.value==this.defaultValue){this.value='';}">
クリックすると、との条件で質問しているが、ふつうfocusだろ。
>>219 >>2 (6)
双方に理があるんでは? 少なくとも
>>211 は自分の仕様を脳外にはっき
りと明記して
>>2 (6)のルールを守っているわけだし、「ふつうは」など
と意味不明の「常識」で他人をどうこういうべき領域でもない希ガス。
いや、ここはfocusだろ
>>220 おまえが意味不明。focusでより広範囲のアクションをカバーできる。
いや。意味不明とか言われても・・・。おれ、見てて思ったんだ。そし
て、思い出した。
>>2 (6)のこと。仕様って個のものだと思うんだ、結
局のところ。個のベンダーがユーザとしての個を培養しているだけの
ことでさ。だから自分のよいと思うイベントをデザインした人間はそ
れが理想的なイベントでいいのじゃないか、って。ま、どう批判しよ
うと自由ではあるんだけどさ。そういうことだから、別に。
Web系の画面を設計するときに、イベントはよく間違えるよな。 click、mousedown、focus。 これは机上だけだと思っていた仕様と違ってるって気づきにくい。
「キース・ジャレットのゴルトベルク変奏曲聴きたいんだけど…どこに売ってるかな?」 「あそこの○○レコードで売ってたよ」 「ありがと。行ってくる」 「そこはグレン・グールドだろ常考」 …本人がわざわざキースを指名してんのにこういう押し付けがましい輩はどこにでも居る。 まぁあえて好意的に解釈するなら、 「本人はグールドを知っていてキースを選んだのではなく、そもそもグールドを知らないのではないか。 知ってたらそっちを選ぶかもな。知っておいて損はあるまい」 という親切心からかもしれない。
A「 新宿から有楽町まで山手線で行きたいのですが、何番線ホームで乗れば良いのですか?」
B「それなら中央線で神田まで行って、そこから山手線に乗り換えた方が速いよ。」
Aが観光やらで山手線を利用する必要があるなら別だけど、
Bの提案に問題があるとは思えないね。
しかし
>>225 は、ジャズがお笑いのネタとして使われる理由の一端が判るレスだよ。
素直に南蛮船ホームで乗るかを答えるのも 問題なっしんぐ 一番親切なのは とりあえず質問に答えた上で 質問の意図を汲んで提案してみるってことで
228 :
225 :2008/04/27(日) 02:15:14 ID:???
ちなみに俺自身はグールドの55年版で聴いてるよ。JAZZは聴かん。貶めるつもりもないけど。 ただ、一部のいわゆるクラヲタの“俺の1番が世界の1番、他はみんなクソ”的押し付けがましさ には端から見ているだけでもほとほと辟易してるんで。 スレ違いスマソ。
痛い流れだな
230 :
225 :2008/04/27(日) 02:36:08 ID:???
> ただ、一部のいわゆるクラヲタの“俺の1番が世界の1番、他はみんなクソ”的押し付けがましさ > には端から見ているだけでもほとほと辟易してるんで。 あーこの部分については純粋に(一部の)クラヲタについての独立した感想で、 このスレのfocus提案者を例えているつもりは無い。 気分を害したなら申し訳無い。どこまでもスレ違いスマソ。
これが真性のヲタってやつだな。
そうでもないか
>>211 は早い段階で
>>219 にレスをつけるべきだったな
それはともかく、
> 後ろに何か加える?(onclick?)ようなやり方だったと思うんですけど。
onfocus を知らないということが読み取れる。
>>226 のAは観光目的ではなかったわけだな
ちゃんと質問を読もうぜ
しつこいよ
235 :
279 :2008/04/27(日) 11:49:09 ID:4fylHKUh
テキストボックスの内容が変更された瞬間に、 javascriptを実行するにはどうすればいいのでしょうか? onchange= だと、別の場所にフォーカスを移さないと実行されず、 onkeydown= だと、内容が変更される直前に実行されてしまいます。
こいつよし
237 :
Name_Not_Found :2008/04/27(日) 12:49:51 ID:y3ZbfC5e
(235-279)<0
フォーカスが当たってから0.1秒毎に監視しとけ
変更された瞬間とは?これって大問題だよね。banana!=bananをエンジンに どう判断しろというのか。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html><head><title>???</title> <script type="text/javascript"> var tid = 0, str = '', elt; function set(){elt=document.getElementById('t0');tid=setInterval(chk,100);} function unset() { if(tid) clearInterval(tid); } function chk() { if(str == elt.value) return; document.getElementById('d0').innerHTML = str + '->' + elt.value; str = elt.value; } </script> </head><body> <div><input id="t0" type="text" onfocus="set()" onblur="unset()"></div> <div id="d0"></div></body></html>
>>235 DOM操作によるデータ変更では無く、ユーザーのキー入力による変更を反映したいなら、
onkeyup。
キーを離す前に(押しっぱなしで連続入力している最中など)に、
tabやクリックで入力フォーカスが移った場合には、
onkeyupイベントが発生しないので、onblurと組み合わせて使うとか。
onkeyupは日本語IMEがからんでいるとうまく行かないよ。
なので
>>240 。
>>242 WinXP(IME2002)上のFirefox2とIE7
Win2k(IME2000)上のFirefox2とIE6
どちらの環境でも、IEでは日本語入力時でも毎回keyupイベントが発行されるが、
Firefox2では日本語入力が確定した時にだけkeyupイベントが発行される。
その他に問題があったっけ?
しかしてっきり
>>240 は一種のジョークかと思ったがマジレスだったとは。
setInterval って JavaScript の最終手段だよね クロスブラウザって大変!
onclick指定はそこまで読んだ末のことだったのか脱ハット
ある日突然ニコニコやなんとか動画その他もろもろ動画サイトで動画が見れなくなってしまいました。 「java scriptを実行許可にしてください」と出るのですが、その辺は一切弄ってないし インターネットオプションで確認しても有効になってました。 java、J2SEを再インストールしても状況は変わりません。 心覚えがあるとしたら、前スパイウェアに侵入され、スパイウェアを駆除するソフトを使ったのですが、 PCを起動した際に重要なレジストリの変更を・・・と出てきたので遮断としてしまいました。 OS再インス以外で解決策があればお願いします。
>>247 JAVA関連で問題が起きているのになぜセキュリティ?
すみません、テンプレよく読んで無かったです 無かったことにしてください
250 :
Name_Not_Found :2008/04/27(日) 19:49:33 ID:otfhk5pv
YouTube での "JavaScript を On にしてくれ" 関連の質問があるようだけど, あれは script 中のタイプミスが原因だったそうな. で, 現在は修正されているはず. すれ違いだけど, この前から しばしば見かけるので.
フォーム入力チェック用のライブラリっていくつかあるみたいだけどどれがいいんだろうねえ
よくある下記の記述ですが、IE6だとOKですがFireFox2だと表示されません。 onmouseover="status='ホニャララ';return true" onmouseout="status=' '" ググッたりして調べてみたのですが、理由が解らなかったのですが、何が 原因なのでしょうか? あとPC上でローカルに表示させた時は、IE6でも表示されないので、それが普通 だと思ってましたが、何故か下記のだと FireFox2 でも使える上にPC上でも利き ました。 onmouseover="this.style.border='1px solid #000000'" onmouseout="this.style.border='1px solid #ffffff'" これが何故PC上でのみIE6だと利かないのか、やはりググッたりしてみても 解りませんでした。理由や対策が解れば教えて頂けますか?
>>252 まずstatusじゃなくwindow.statusと書いた方がいいかも。手前に
statusという変数がある場合があるかも知れないし。で、window.status
をJavaScriptから書き換え可能かどうかはブラウザ毎に、さらに実行環境
(ローカル、サーバ)毎に、設定できたような気がするんで、その設定に
よるんじゃないのかなー。
IEでthis.style.borderへの設定がローカルの場合だけできないという
のは理由がよく分からないね。ともかく、Web制作なんだからサーバ
に置いた場合前提で開発するのがいいんじゃないかな。
動的にチェックされたチェックボックスを生成したいと思い以下のコードを書きました。 FireFox2ではチェック済みのチェックボックスがtestdivに生成されましたが IE6ではチェックされていないチェックボックスが生成されました IEでもチェック済みのチェックボックスを生成する方法をご存知でしたらご教示ください <html> <head> <script langueage="JavaScript"><!-- function $(id){ return document.getElementById(id); } window.onload=function(){ newInput=document.createElement("input"); newInput.setAttribute("type","checkbox"); newInput.setAttribute("checked",true); $("testdiv").appendChild(newInput); } // --></script> </head> <body> <div id="testdiv"></div> </body> </html>
255 :
254 :2008/04/28(月) 12:40:56 ID:???
すいません自己解決しました チェックボックスにidを設定して newInput.setAttribute("id","hoge"); appendChildした後にcheckedをtrueにしたら $("hoge").setAttribute("checked",true); IEでもチェック済みになりました
>>254-255 HTMLタグでいうcheckedはDOMでは「defaultChecked」だけど、
そのsetAttributeはどっちをセットしてるんだろうねー。
やっぱりsetAttributeを使わない方が無難だと思うがどうよ。
>>253 レスサンクスです。
じつわ window.status に関しては、PCローカルで既に試してたのですが、IE6
でもFireFox2でも駄目でした。(ネット上では未確認です。)
因みにPCの環境はWindowsXPsp2の最新状態です。IE6とFireFox2も同じく最新
状態です。
確かにネット上で全てオケなので、あまり気にする必要は無い訳ですが、status
の件だけなら、「まあそんなものか。」と思ってたのですが、this.style.border
で逆みたいな現象が出たので、不思議に思った次第です。
で、もしかしたら記述方法とかで、PC上でも自由に動作確認可能に出来るなら、
便利だなと思って質問した次第ですが、どうも環境設定の問題だと厄介そうで
すね。
>>257 しまった!!!
status に関しては ネット上でも FireFox2 だと駄目だったんだ。
で、window.status に変更したモノをネットにアップして試したところ、
IE6だとOKでFireFox2だと駄目なのは、全く一緒でした。orz
因みにFireFox2 だと下部バー上には「完了」という文字が出たままになります。
環境設定だけの問題だと、使ってるプロバイダのサーバー環境のせいなら対処が
困難で困るのですが、自分のPC環境のせいなら他のユーザーは支障なく見れる筈
ですが、このあたりはどうなんでしょう?
設定
>>258 そもそも自分のFFx2の設定の「JavaScriptでステータスバー変更を許す」
をチェックしているのかいないのか。チェックしているのにできないのなら
さすがにバグでしょ?
バグでもなんでもそもそもそこはそういうものを表示するところ じゃないし、近い将来FFやIEでそれができなくなっても不思議で はない。
もちろん自分はうるさいのでスクリプトでstatusを変更するのは 不許可にしているけどね。
>>259-262 レスどもです。
どうやらFireFox自体に許可/非許可の設定があり、フィッシング等のURL偽装
の問題の為に、デフォルトで非許可、又は今後この機能自体を無くしていく
方向みたいですね。
このスレで出た未決の問題のうち重要そうなものをまとめてみた。
>>82 Dripのrefsの数値の謎について
>>86 IEでトップレベル関数の列挙方法
>>127 addEventListenerの「使える」イベント一覧
>>143 IEのメモリーリーク
>>148 FireFoxでタイマーを使用する以外での外部ファイル読み込み完了検知方法
>>261 >そもそもそこはそういうものを表示するところじゃゃない
いやいや、そういうものを表示するところだよ。
デフォルトの動作(たとえばIE7ならhref属性値やaction属性値の絶対URI表現を見せること) を残して、その隙間をぬってページ独自の何かを便利な形で見せるのが面倒くさいだけ。だから普通はやらないが、使えるコスト次第では凝ってみる価値はある。
>>265 ステータスバーの本来の役割は、現在の状態や機能を説明するなど、補助的な情報を表示する為に使われる。
が、ブラウザでのステータスバーは、ユーザーとしてはリンク先が表示されるという事を前提としている為、
リンク先を隠匿する目的などに悪用されるのを防ぐ為、現在ではスクリプトによる変更が制限されるのが一般的。
これを知らないとは10年くらい冬眠していたとか?
<script type="text/javascript"> <!-- function chk(){ for(i=0;i<3;i++){ if(document.form.fruit[i].checked){ var fruitA=document.form.fruit[i].value; } } alert('あなたは'+fruitA+'が好きですね。'); } --> </script> <p>好きな食べ物を入力してください。</p> <form name="form"> <input type="radio" name="fruit" value="りんご" >りんご<br> <input type="radio" name="fruit" value="みかん" >みかん<br> <input type="radio" name="fruit" value="いちご" >いちご<br> <p><input type="button" name="button" value="ボタン" onclick="chk();"></p> </form> これでラジオボタンが入力されていないときアラートで入力されてません って表示するにはどうしたらいいんですか…?(・・)
>>267 fruitAがundefinedになるべ。
ループ抜けた後に if(typeof fruitA =="undefined"){alert("入力されていません");} でいけると思う
<script type="text/javascript"> <!-- function chk() { var radio = document.forms['form'].elements['fruit']; for (var i = 0, len = radio.length; i < len; i++) { if (radio[i].checked) { alert('あなたは ' + radio[i].value + ' が好きですね。'); return; } } alert('入力されてません'); } // --> </script> <p>好きな食べ物を入力してください。</p> <form name="form" action=""> <input type="radio" name="fruit" value="りんご">りんご<br> <input type="radio" name="fruit" value="みかん">みかん<br> <input type="radio" name="fruit" value="いちご">いちご<br> <p><input type="button" name="button" value="ボタン" onclick="chk();"></p> </form>
>>266 でもググッたりしても、この手の情報がなかなか見つからない程度にしか、普及
してない?知識なのも事実では?
英語のQ&Aみたいな掲示板なんかの方が、良く見つかったりしたし、FireFoxの普及
度合いが日本で低いせいかもしれんけど。
単に日本のソフトウェア技術って先進国中で最低だから 流通しているまっとうな情報の量も少ないとかじゃないのかなー まあともかく、ここのスレでは嘘は嘘だと厳しく指摘してもらえるので。
>>268 色々試してたら何とかundefinedが消せました!ありがとうございました。
>>269 ありがとうございます!試してみたけたけど読み込んだ瞬間にアラートが
表示されるようになりました↓
>>270 やってみたら出来ました!入力されてませんアラートを表示するだけなの
に結構大変なんですね;ソースを見て勉強します(`・ω・´)
>>264 >>148 CSSをXMLHttpRequestで取ってきて、evalするのはどう?
eval自体は同期で実行されるからいいんじゃね。
よーし、おじさんも同期、非同期の質問しちゃうぞ。 element.click()とすると、すぐには実行されずに、JavaScriptの処理が終了した後、 IEがclickイベントを発動します。 JavaScriptの処理が終了せずに、clickイベントを実行させる (キャプチャーフェーズ→バブリングフェーズ→デフォルト動作を実行後、関数が戻ってくるイメージ) ことは出来ないのでしょうか?
正規表現オブジェクトに誤ったパターン("*"など)を渡すとエラーになってしまうため 事前にパターンの正しさをチェックしたいのですが チェックするための手段(関数等)は標準で用意されているのでしょうか? もしあれば教えてください。よろしくお願いします
try...catchでいいんぢゃないか
>>277 click()した後の処理すべてをsetTimeout(関数, 0);の中でやる
ように直せばいいんじゃないの。試してないけど。
>>276 CSSをeval()する方法ってどうするの。サンプルキボン。
つか、evalじゃなくて、innerHTMLじゃないか。 通信も同期を指定すれば、いいかなと。 むりやりevalしたきゃ、JSでの処理もそのCSSのなかに書いとく。
>>281 だからeval()でもinnerHTMLでもいいんだけど、サンプルキボン。
JavaScriptコードを評価するのにeval()、HTMLを突っ込むのに
innerHTMLというのは当り前だから分かるんだけど、CSSを
1発で適用する方法というのは知らないので知りたい。
283 :
Name_Not_Found :2008/05/01(木) 11:38:59 ID:GpZvn/5z
>>281-282 わざと知らんぷりしてるのかも知れないけど,
eval() も innerHTML も使う必要はないんだよねぇ.
document.body.cssText='~';
もしくは element : elm だとして
elm.cssText='~';
そもそも .css は ただの text-file なんだし...
>>283 それはそのエレメントに特定じゃん。そうじゃなくてさまざまな
要素(セレクタ)の指定がまざったCSS全体を一括して突っ込みたい場合は?
だいたいHTMLだって.jsだって「ただのテキスト」ですぜ。
つ text/javascript、 text/html。
285 :
Name_Not_Found :2008/05/01(木) 11:52:58 ID:GpZvn/5z
またまた 恥ずかしい失敗を...
document.body.style.cssText='~';
elm.style.cssText='~';
>>284 しっつ礼しやした.
まあ, そういった問題はあるけれど,
body を対象に しただけでも それなりの効果は期待できると...
>>285 そのレスすら話題からどんどん離れてる件
バカは黙ってればいいよ
287 :
Name_Not_Found :2008/05/01(木) 13:15:28 ID:ql0nI7Yy
function a(arg){hoghoge}; a = function(arg){hogehoge}; のように、 関数、無名関数の最後には ; が必要なのでしょうか?
>>287 ちゃんと自分で文法を読めるようになれ。
1行目は無名関数なのか?もしそうなら、それを何に使うつもりなのか?
2行目の最後の「;」は代入式文の最後の「;」であって無名関数とは無関係。
a = 0; の最後の「;」と同じ。
>>288 >関数、無名関数の
って書いてあるんだから1行目は無名関数として書いてないだろw
それぐらい読み取れよ・・・低レベルだな
290 :
Name_Not_Found :2008/05/01(木) 14:08:17 ID:ql0nI7Yy
>1行目は無名関数なのか? 誰もそんな事言ってないと思いますが… >何に使うつもりなのか? 知りません。例文にあったので、必要なのか質問しただけです。 何故そんな事を聞かれるのか解りません。 >無名関数とは無関係 しかし、次の行に他の分があっても、この場合の ; は外しても動くようです。 必ず付けないといけない物なのでしょうか?
>>290 >>287 の 1 行目は「関数宣言」といって、行末のセミコロンは不要
2 行目は「関数式」といって、式なので行末に改行かセミコロンが必要
ありがとうございます。 今後 ; を付ける事にします。
>>290 JavaScriptでは行末のすべての「;」は省略可能だ。だから
外しても動くのは当り前。
そもそも「自分のブラウザで試してみて文法の適否を調べる」
なんて無意味。その処理系にバグがあったら勘違い野郎に成り下がる
だけだろ。地道に文法を勉強しろ。
俺「行末に改行」ってアホなこと言ったなorz
295 :
Name_Not_Found :2008/05/01(木) 18:18:37 ID:s+mmErJG
質問させていただきます。 ホームページで、メニューのところを、CSSで、フレーム風にし、スクロールできるようにします。 通常のフレームでは、スクロールして、ある項目をクリックした場合 スクロールした状態が保たれますが、CSSのフレーム風では スクロールした状態が保たれません。 これをJavaScriptでスクロールした状態を保つことはできますでしょうか? もしできるのならば、やり方、もしくは、参考サイトを教えていただけないでしょうか。 どのようなキーワードで検索すればいいのかも分かりません。 どうぞよろしくお願いいたします。
>>295 何かを次のページに引き継ぐには Cookie か location.search と相場が決まってる
最終的にブロック要素をスクロールさせるには element.scrollTop = x;
297 :
Name_Not_Found :2008/05/01(木) 18:40:34 ID:PlHgci7T
意外に親切な回答が... (がっかり)
298 :
295 :2008/05/01(木) 19:27:59 ID:s+mmErJG
>>296 どうもありがとうございます。
element.scrollTop = x; で検索してみましたが、よく分からないです・・
<div id="HOGE" style="height:100px;overflow:scroll;"> <p>1 行目</p> <p>2 行目</p> <p>3 行目</p> <p>4 行目</p> <p>5 行目</p> <p>6 行目</p> <p>7 行目</p> <p>8 行目</p> </div> <p><button onclick="document.getElementById('HOGE').scrollTop+=10">scroll</button></p>
300 :
295 :2008/05/01(木) 20:36:16 ID:s+mmErJG
>>299 ありがとうございます。
<p>8 行目</p> を<p><a href="./index.html">8 行目</a></p>で試してみましたがスクロールが戻ってしまいます・・
301 :
295 :2008/05/01(木) 20:41:19 ID:s+mmErJG
<a href="./index.html" onclick="document.getElementById('HOGE').scrollTop+=10">テスト</a> こういうふにもしてみましたがダメですね・・
Cookieなどを使えというレスがあるようだが読んで試してないのか。
>>300 ふざけてんの?
scrollTop の使い方が分からないというからその部分のサンプルを貼ったんだ
>>296 を100回音読しても意味が分からなければあきらめろ
304 :
295 :2008/05/01(木) 21:07:45 ID:s+mmErJG
すみませんでした! Cookieですね。 Cookieの意味は分かるのですが、Cookieとメニューのonclick="document.getElementById('HOGE').scrollTop+=10"を どのようにして結びつけるのか謎ですね・・。 何というキーワードで検索すればよろしいでしょうか?
次の方、質問どうぞ〜♪
>>280 それはさすがに難しいね。
本来非同期じゃなければならない処理を、
なんとか同期で処理したいという話題なので、タイマーは避けたい所です。
>>282 element.innerHTML = "<style>" + str + "</style>";
で、strが通信でもらってきたCSSが書かれた文字列。
>>285 cssTextは要素を特定しないといけないから、個人的につらい。
addRule/insertRuleなら文字列指定でセレクタとその値を突っ込める。
>>293 ECMAではでは「;」は必須みたい。
ただ、JavaScriptの実装のほとんどは改行でよいけどね。
ECMAの仕様だけみて、改行を全部削ってみたら動かなくなったw
エー、7.9.1 自動セミコロン挿入規則ってあるやん
へぇ〜、なんと。 A 文法要約 (Grammar Summary) を元に作成した構文解析を作ったんだけど、 そこで通らなかったからてっきり。 事前に「;」を入れる処理が別途必要なのね。
>>306 Mozでやってみたけど動作しませんでした。どんな要素に
対してやればいいのですか?<style>要素って<head>の中に
入れますよね、ふつう。
>>304 このスレ的には十分な回答がなされているので、あなたがそれで
分からないなら自分で勉強するか手取り足取りスレでも逝ってください。
>>310 おれは逆にFireFoxでしか動かなかったぞ。
なんかIEとかSafariだと防がれてるみたいなんだが。
313 :
312 :2008/05/01(木) 23:14:20 ID:???
とりあえず、こっちのコードを投稿しとく。 IEはd.firstChildが作成されなかった。 SafariはStyleノードは作成されて、documentツリーにぶら下げることもできたけど画面に反映がされなかった。 OperaとFireFoxでは問題なく動作した。 ------------------------------------------------- <html><head> <script> function setCSS(str){ var d = document.createElement("div"); d.innerHTML = "<style>" + str + "</style>"; document.body.appendChild(d.firstChild); } function test1(){ setCSS("body { background-color: lightblue; }"); } </script> </head><body> <div onclick="test1()">ここをくりっく(・∀・)</div> </body></html>
つうか、CRUDのRが含まれる処理はもう普通にページ遷移させようや。今時、「超高アクセスサイトを除いて」、大概のウェブサーバシステムは余力十分だろ。
>>314 だからページ遷移させたときにスクロール位置が先頭に戻る
のを何とか元の位置に保ちたいという質問だったんじゃねの?
>>313 divの中にstyleってvalidなHTMLじゃないよね?
body に含まれてはいけないようだよ
setCSSを以下のように修正するとSafariでは動作するようになったよ。IEはダメだったけど。 function setCSS(str){ var d = document.createElement("div"); d.innerHTML = "<style>" + str + "</style>"; document.getElementsByTagName("head")[0].appendChild(d.firstChild); } あとはIEで動く方法が見つかればいいね。 validなHTMLかどうかはあまりこだわらずに、動くコードを見つけて行きたい。
320 :
Name_Not_Found :2008/05/02(金) 09:40:46 ID:ZiOgF6gn
UTF-8のページでJavaScriptを書いたら他の規格で見ている人の ブラウザではヘンなことになりますか? だとするとプログラムの統一性ってどういうことになるんでしょうか。
ひとつのコードでIEとIE以外とを同時に対応させるのは難しいね。 function setCSS(str) { var style = document.createElement('style'); try { // IEでエラー style.appendChild(document.createTextNode(str)); } catch (e) {} document.getElementsByTagName('head')[0].appendChild(style); if (style.styleSheet) style.styleSheet.cssText = str; }
>>321 GJ! これはすごい。感動した。
>>320 別にならないでしょ。JavaScriptとそれを入れているページの
文字コードを合わせておけばいいんだし。1つのJavaScriptファイル
を色々な文字コードのページに入れたいということなら、日本語を
直に書くのはやめて、全部「\uXXXX」で書けばいい。面倒だけど。
> ひとつのコードでIEとIE以外とを同時に対応させるのは難しいね。 別に特別難しくないのでは、 if( document.all ) { //IE用の処理 } else { //それ以外のブラウザ用の処理 }
document.all は判定には使えないかと
>>323 if (document.all) {
// IE, Opera, Safari
} else {
// それ以外
}
ん、手元のSafari3.1は if (document.all) はfalse判定のようだが。 Firefoxでは、if (document.all)はfalseだが、Boolean(document.all)はtrueとな。
そもそもIEかどうかを判定して動作を変えようと思うのが間違ってる オブジェクト、メソッドの有無とかで動作を変えるべき
>>328 条件コンパイルの利点を全て殺す最悪の例
せっかくだから聞くけど、ブラウザの判定で最良の方法は?
>>332 洩れも
>>329 に賛成。document.styleSheetsを操作したいのなら
if(document.styleSheets)で判定する、とかいうふうに使う。
そうすればそれが次のバージョンでなくなってもそこを通らなく
なるからエラーはまぬがれるし。
いや。
>>329 はそれで正しい振り分けができた時代があったから
間違いとはいえない。今になってみれば、ということだろ。
それはコードを書く人間のレベルが低すぎるという苺に尽きる。
>>327 スマソ、Firefoxは恐らくレンダリングモードによって変わることを今発見した。
>>335 レンダリングモードって標準モード、互換モードってやつかい?
互換モードだとサポートしてるってことでよいかな。
>>333 >>335 プロパティで判別が基本だとしても、
どうしてもブラウザで判定しないといけないこともある。(opacityとか)
とりあえず、
>>12 にある有名なフレームワークで比較しようか。長文すまそ。
Prototype.js
IE: !!(window.attachEvent && !window.opera),
Opera: !!window.opera,
WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
jQuery
safari: /webkit/.test( userAgent ),
opera: /opera/.test( userAgent ),
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
Yahoo UI
このライブラリは、複数のユーティリティの集合だけど、
個々のユーティリティがそれぞれで判断していた模様。
でも今はなるべくYAHOO.env.uaってのを使おうとしているっぽい。
で、そのYAHOO.env.uaは、navigator.userAgentを正規表現で判定。
Mootools
if (window.ActiveXObject) window.ie = window[window.XMLHttpRequest ? 'ie7' : 'ie6'] = true;
else if (document.childNodes && !document.all && !navigator.taintEnabled) window.webkit = window[window.xpath ? 'webkit420' : 'webkit419'] = true;
else if (document.getBoxObjectFor != null) window.gecko = true;
338 :
337 :2008/05/02(金) 22:38:54 ID:???
で、自分の意見。 なるべく、ユーザ申告を信じるライブラリが多いようですね(YUI、jQuery)。 Prototype.jsがプロパティ判別とnavigator.userAgentを混ぜて判別している理由はなぜだろう? YahooUIは、各ユーティリティ側で細かいバージョンが必要なこともあるらしく、 そのための情報を得る手段としてnavigator.userAgentをメインの判定として利用しているように見えた。 mootoolsだけが、navigator.userAgentを見ていませんが、その理由は、 それとも処理を軽くするために文字列判定を入れていないのか、 ユーザを信じる方針なのかよく分からなかった。 Note欄の「We dont sniff.」ってどういう意味か分かる方いますか?
>>321 そんな所にもstyleSheetオブジェクトってぶら下がってたのね。
てっきり、document.styleSheetsにしかいないと思ってたよ。
>>338 var Browser = new Hash({
Engine: {name: 'unknown', version: ''},
Platform: {name: (navigator.platform.match(/mac|win|linux|nix/i) || ['other'])[0].toLowerCase()},
Features: {xhr: !!(window.XMLHttpRequest), xpath: !!(document.evaluate), air: !!(window.runtime)}
});
if (window.opera) Browser.Engine.name = 'presto';
else if (window.ActiveXObject) Browser.Engine = {name: 'trident', version: (Browser.Features.xhr) ? 5 : 4};
else if (!navigator.taintEnabled) Browser.Engine = {name: 'webkit', version: (Browser.Features.xpath) ? 420 : 419};
else if (document.getBoxObjectFor != null) Browser.Engine.name = 'gecko';
Mootools1.12β2ではこのようになっているから、
UA名での判定は完全に捨てて、それぞれのレンダリングエンジン毎に特徴のある機能を元に判定を行う方針の模様。
識別名としてIEやFirefoxでは無く、tridentやgeckoのようなエンジン名を使っているぐらいだしね。
「We dont sniff」は、判定はオブジェクトのチェックだけで行い、その他のチェックは一々やらないぐらいの意味では。
>>338 それは感想であって意見じゃないだろw
結局自分ではどれがいいと思うのさ
>>336 うん。Firefoxは後方互換モードだと、document.allが存在する(使える)が、
if (document.all) は false で、
Boolean(document.all) は true で、
typeof(document.all) は 'undefined' で、
if (document.all instanceof Object) は true みたいよどうやら。
>>341 レンダリングエンジンの特徴で判別!なんてマニアで甘美な響き。
すごくモットー(mootools)を感じる。
やっぱり、UAなんて不安定なものを使うなんて信じられないしね。
でも、tridentなんて名前を知っている人はココには結構いるかもしれないけど、現場ではおそらく少ない。
なので、mootoolsのようなオブジェクトベースの判定をしつつ、プロパティ名は
IEとかFFとかSafariとかがいいと思ってるよ。
>>342 なんか、すごい後方互換モードだな。
そんなプロパティがあるんだかないんだかよく分からないのは、
IEのwindowオブジェクトだけかと思ってたよw
if (document.all) は falseなのは
>>323 みたいなユーザを考慮してるのか。
345 :
Name_Not_Found :2008/05/03(土) 05:36:07 ID:SjtB5wcI
今更だけど... ここ見てると新しい発見がある ! 今まで いろいろ学ばせてもらいます他 (感謝)
たとえばどんなこと?
正直、FFxでdocument.allが存在していても if(document.all)がfalseに枝分かれするというのは 知らんかった。普段そういうコード書かないから。
348 :
Name_Not_Found :2008/05/03(土) 12:56:11 ID:SjtB5wcI
>>346 WaMCom(Mozilla 1.31相等) で
confirm(document.styleSheets.length);
とやったら きちんとした結果が返って来た.
正直, 涙腺がゆるんでしまった.
なぜって 2003年が最終 update の代物なのに...
xmlhttpでutf-8以外のページをロードすると文字化けしますが これはecl.jsを使えば回避できるんでしょうか?
350 :
Name_Not_Found :2008/05/03(土) 17:08:48 ID:trMn5YpK
自分のJavaScriptがどれくらいのレベルか試してみたいのですが、 何か問題を出していただけませんか。
>>349 AJAXリクエストに対するサーバーからのレスポンスヘッダで、
Content-Type: text/html; charset=Shift-JIS
のように文字コードを指定すれば、現在の多くのブラウザでは問題無く処理されるはずだけど。
>>350 FireFoxのArray.prototype.filterと同等の関数を作成してみて。
353 :
Name_Not_Found :2008/05/03(土) 17:20:29 ID:emON9KxP
2パターン置換したいときに、 xxx.replace(/%E3%80%80/g, "+").replace(/%22/g, ""); でちゃんと動いたんだけど、replaceを2個並べる以外に賢い記述方法ある?
354 :
350 :2008/05/03(土) 17:28:45 ID:trMn5YpK
はい。(/%E3%80%80|%22/g,"")とやればよいと思います。 これで何級程度でしょうか。僕はできる方ですか?
えっと、 %E3%80%80は "+"に、 %22は ""にしてください。
356 :
Name_Not_Found :2008/05/03(土) 17:33:39 ID:YbvTmraf
ワロタ
357 :
349 :2008/05/03(土) 18:22:05 ID:???
>>351 responseTextで取得したのが化けている場合は
サーバ側のcharset指定がおかしいということですか?
htaで第三者のサーバのファイルを取得したいので
ヘッダはいじれないです。
この場合の対処方法は何かありますか?
ADODB.Stream使えば文字コード変換できることは確認できたんですが
レジストリをいじるのでできれば避けたいです。
>>357 //低スキル回答者を相手にしておちょくってるだろw
responseBody, nodeTypedValueなら使ったことがあるっつうか、数日前にも仕事上のデータ処理で使った。
MSXMLのnodeTypedValueのヘルプページに例示があるが、そのまま。
出来上がるバイト列をUTF-8に変換した。
エンコードを変換するスクリプトは自分で書いた。
たしか、このスレにも数年前にShift_JISからUTF-8に変換するものを貼ったが、出来自体は良くない。
俺にとってはShift_JISとEUC-JPだけで十分だから自分で書く気になるが、あらゆる変換を書くとしたら、アホらしゅうてやっとれんわなw
もう気付いていると思うが、これの欠点は、変換前後双方のエンコーディングを知っておかなければならないこと。
変換後は知っていて当然だが、返還前が任意のURIからのレスポンスだったら、スニッフするのが面倒臭い。
まあ、バイト列に%を挿んで、そのecl.jsをうまく使えば、意外とあっさり出来そうではあるな。
逆に、ADODBがレジストリどうこう、という発言について詳しくデメリットを聞きたい。
数十万レコードのCSV自動処理用でADODBを毎日使ってるが、俺は何かとんでもない不作法をやらかしてるのか?w
ぢおんてst
うぇるかm きせ烏賊い所
おれは、XMLHttpRequestでデータを取得した場合に、 サーバからUTF-8で返却されない場合は、 JS側のどこかで変換をかける必要があると思ってる。 (XMLHttpRequestが内部で変換してくれる機能がないため) 普通のネット上で公開するHPでやる場合は、JS側で変換テーブルを作ってやってる。 (ecl.jsを使えばテーブルを自作する必要はなさそうだね。)
>>358 ADODB.Streamってブラウザからの利用だとセキュリティにひっかかって、
通常だと使えないから、使えるようにするためにレジストリをいじるってことを言ってるんじゃないの。
>>358 >>361 マジレス/釣り/煽りなのか判らんけれど。
(いつものアホな
>>21 >>196 あたりによる暇つぶしだろうと予想)
ttp://www.w3.org/TR/XMLHttpRequest/ >Return the result of decoding the response entity body using charset.
要するにresponseTextは、
1. Content-Typeでcharsetが指定されていればその文字コード、
2. 指定されていなければUTF-32,16,8のいずれかであるとして判定を行う、
3. それでも不明であるならUTF-8とする。
4. 上記で確定した文字コードでresponseTextのデコードを行う。
364 :
Name_Not_Found :2008/05/03(土) 22:26:19 ID:OiyLLZwl
質問お願いします。 -- フォームのname:aaa 部品のname:bbb -- ↑でオブジェクトを指定する際に document.aaa.bbbと記述すると思いますが、 bbbの部分を変数で指定するようなことは可能なのでしょうか? ccc = "bbb"; document.aaa.ccc ↑これでは出来なかったのですが、これと同じようなことができるなら教えてくださいm(__)m
テンプレ FAQ 読めばいいと思うよ
>>364 FAQ
>>3 のQ8/A8。だがFAQを読めない奴には2度と来て欲しくないな。
>>364 そんな書き方をどこで覚えたの?当てずっぽうにあっちこっちやって
もムリだよ。ちゃんと勉強した方がいいと思う。そうすると覚えるし。
余談だけど、「質問お願いします。」 っておかしいよね。
document.aaa[ccc](笑)
(爆)。これで
>>368 の言ってることの信憑性は全部吹っ飛んだな。
< ̄`ヽ、 / ̄> ゝ、 \ /⌒ヽ,ノ /´ ゝ、 `( ´・ω・)/ 371のバーカ! > ,ノ ∠_,,,/´””
かわいいなw
羽の先がずれてるのが残念
>>369-374 このスレも他の2chスレと同様にアホ満載なGWっぽい展開だね。
>>353 2パターンぐらいならreplace2つでも別に良いのではと思うけど。
変換候補が多いなら、
var repl = {'%E3%80%80':'+','%22':''};
var keyArray = [];
for ( var prop in repl )
keyArray.push( prop.replace(/([.?*+\-^$\\|!=\(\)\[\]{}])/g,'\\$1') );
var orgStr = '%E3%80%80%a2%22%E3%80%80%0a%0d%22';
var newStr = (keyArray.length>0 ? orgStr.replace( new RegExp('('+keyArray.join('|')+')','g'), function(str) {return (repl[str]!=undefined?repl[str]:str)} ) : orgStr);
とか。
>>363 ちなみに、IE6はXMLHttpRequestを持ってないから代わりに
ActiveXObject使うと思うけど、そいつも対応してるかどうか
ご存知でしょうか?
クリップボードの内容をJavaScriptで取得しようとすると 警告が出てしまいます。 しかし、なんとか利用者に気づかれないまま、 盗み取りたいと考えています。 何か良い案がありませんでしょうか?(不要な煽りは止めてね) 今考えている案としては、 Dijit.Textareaのようなものを作ったと言って公開する→ 誰かがブラウザ上でコピー&ペーストする→ でも実はコピーしても書き換わっておらずかつ貼り付け内容はOSクリップボードってパターンです。
>>377 ActiveXおすすめ。
Microsoftの書名つけとけば、たいていいけるよ。
>>369-374 とりあえず、document.aaa[ccc]でも動くジャン。
記述量を少なくすることが重要な場合、その書き方でよいと思ったが、何か悪い点があるの?
>>379 動いた?おめでと。だからなんなの。動くだけでいいんならいくつでも
invalidな例を書いてもいいけど、もう寝るわ。
>>380 invalidな例でよいので短く書きたいと考えています。
>>378 それは良い案ですね。ActiveXコントロールをインストールさせる方法。
M$の署名にしておくってことですね。
ですが、ここはJavaScriptのスレなので、JavaScriptで何とかしたいと思っています。
特に今現在、狙い目だと考えているのが、最近のブラウザで実装され始めた
onbeforecopyやoncopyなどです。
そのタイミングで範囲選択をうまく制御したり、focusを移動させたりすれば
実はなんとかなるんじゃないかと思っています。
>>380 本当にinvalidなら全く機能しないはずなので、
とりあえず現状の多くのブラウザで機能するならdeprecated。
自分の書いたコードを批判されるのが怖いからか、
煽るだけのチキン(このスレ的には"常連"だっけか?)ばかりなので、
とりあえず"invalid"で良いから
>>353 に対する一例を出して欲しいね。
>>382 何とかなることが分かったとたんにそれはセキュリティホール
と認定されて潰されると思われ。(だからどっちかといえば
何ともならない可能性が高いと思うな。)
>>384 そう考えるのが普通だとは思っています。
では、なぜ
>>378 のような案が出てくるのでしょうか?これを防げばよいはずですよね?
当然、綺麗に盗める場合は防がれてしまうでしょう。(かつてのclipboardDataのように)
目指したい「何とかなる」内容としては、
一定の問題点が存在したとしても
「クリップボード警告よりユーザに意識をさせない」レベルで取れてしまう方法です。
(”一定の問題点”とは、上記ActiveXの場合は、
インストールするかどうかをユーザが選択しないといけないという問題がある)
洩れの感想ではヴェンダ側の連中はSHについては良くわかっていると思う。
世界中からのフィードバックも受けてるからね。すべての脆弱性について
改善するよりは悪用される可能性のある優先順位で当面のパッチを当てて
いるはず。したがってそういう悪性のあるいは無意識下でユーザのPCか
ら盗み出す手法は顕在化した時点で潰される可能性が大。長期にわたって
そのトラップを維持するのはまず無理でマルチ商法のようにやるなら最初
にサッとやって収穫を確定することだ。だが、
>>1 .の・ユーザーに迷惑と
なるスクリプトを書く者にアドバイスすること自体このスレのモットーに
反している。
同感。なので
>>385 にはお帰りいただきたいね。ここではこれ以上
何も得られないと思うよ。(アホなActiveXを騙して入れさせるという
のが唯一の解だろうが、もちろんダイアログは出るに決まってる。)
まあ「ユーザーに迷惑となるスクリプト」を顕在化させて、ベンダ側に対策を 促す、って感じでなら、その方法を非具体的に明らかにするのは良いのでは? 「クロサギ」みたいに手法を世間に流布するのは、そんなに悪い事ではないで しょ。
技術的に探求するのは別に構わないと思うけど、上に書いたような わけで穴はそう簡単には見つからない気がするね。
>>389 正論だけどそれを語るのにここよりもふさわしい場所があるんじゃないか。
セキュ板とかBugtraqとか。
>>375 ありがとうございます!
今の知識ではちんぷんかんぷん。
すいません。 input要素のファイル選択タイプのvalueプロパティが書き換えられないのは仕様でしょうか? valueでは読み込みしかできないようなんです。 value = "○○" はどうも無視されるようなんですが。。。
input type="file" ならセキュリティ上問題になるからできんよ
FAQもいいとこ
やはりFAQ追加は正解だったみたいだな
399 :
Name_Not_Found :2008/05/06(火) 14:42:23 ID:unmLFKfL
こんにちは。画像が10枚ほどあるのですがプリロードは必要ですか。 あとどんなときにプリロードするのでしょうか。重いといっても軽い のですが。
すいません教えてください。 JAVA(TM)6 Update2 JAVA(TM)6 Update3 JAVA(TM)6 Update5ってあるんですけど、サイズでかいんで 削除して1つにしていいんですか?
ィ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;゙t, 彡;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ヽ イ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;r''ソ~ヾ:;;;;;;゙i, t;;;;;;;リ~`゙ヾ、;;;;;;;;;;;;;;;;;;;;ノ i,;;;;;;! ゙i,;;;;t ヾ-‐''"~´_,,.ィ"゙ ヾ;;f^! / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ト.;;;;;》 =ニー-彡ニ''"~´,,...,,. レ')l. < おまえは何を言っているんだ t゙ヾ;l __,, .. ,,_ ,.テ:ro=r''"゙ !.f'l. \____________ ヽ.ヽ ー=rtσフ= ; ('"^'=''′ リノ ,,.. -‐ゝ.>、 `゙゙゙゙´ ,' ヽ . : :! / ~´ : : : : : `ヽ:. ,rf :. . :.: j 、 . : : ト、.、 : : : : : : : : : : ヽ、 /. .゙ー:、_,.r'゙: :ヽ. : :/ ヽ\、 :f: r: : : : : : : : !丶 r-、=一=''チ^ ,/ !:: : :`丶、_ : /: : : : : : : : :! ヽ、 ゙ ''' ''¨´ / ,i: : : l!: : : : :`ヽ、 〃: :j: : : : : : : ゙i `ヽ、..,,__,, :ィ":: ,ノ:: : : : : : : : : : : :\ ノ: : : : : : : : : : :丶 : : ::::::::: : : : /: : : : : : : : : : : : : : : :\
403 :
Name_Not_Found :2008/05/06(火) 17:29:01 ID:1/SIu4Qz
オンマウス時に文字を変更するというのはどうすればいいのですか? 調べても画像変更しかなくて・・・。
>>403 マジ?約 8,970 件もヒットしたけどな。
405 :
403 :2008/05/06(火) 18:55:08 ID:1/SIu4Qz
>>404 ヒットはするけど内容は¥文字色を変える等だったけど?
できればどのサイトでもいいからURLを書いてください。
407 :
403 :2008/05/06(火) 19:33:25 ID:1/SIu4Qz
409 :
400 :2008/05/06(火) 21:42:45 ID:???
ネタか?GWも終わりだしそろそろマトモな人間が帰京するだろ。 それにしても「ありがとう」というのは傲慢な言い方だね。人に 何がしか教えてもらったら「ありがとうございました」だろ。
>>380 のinvalid君は予想通り逃亡か。
代わりに馬鹿の同類っぽい
>>410 さんお願いします。
>>399 最初に画像を入れ替えたときにさっと変わらないので
イライラするようならプリロードするんでしょうね。そういう問題が
見ている人にとって起きないのならわざわざ複雑にする必要なし。
>>410 JSは終わって1年以上経過している。マトモな人間はASに流れて超多忙だよ。
>>413 (ボクのばやい)JSは終わって1年以上経過している。
>>413 馬鹿が遂に自演を始めるようになったか。
洩れは
>>410 でも
>>380 でもないけど、やっぱり
document.forms.フォーム名.elements.部品名.value
と書くことを勧めるし自分でもそうするね。理由としては
「document.フォーム名.部品名.value」だと(1)標準に
書かれてない機能は将来的に/ブラウザによって保証され
ないかもしれない、(2)標準のプロパティ名との衝突の危険、
(3)コードとしての読みやすさを損なう、かな。
さて。
1.これは問題にならんと確信してるなあ 今更下位互換切る根性があるブラウザがあるかなあ。PDA方面とか? 放置サイトの情報量も無視できないし。 今ん所その利点はベンダ自体にはなさげな気が。 2.これは同意。衝突する可能性ありありだしなー。 3.これはどうだろ。。w3c非推奨な書き方ではなくとも、読み易くないかどうかで言うと意見別れるんじゃねえか。 - - - ところでこの場合でgetElementById("フォームや要素のID")を薦めない理由はなに
>>418 今後3,4年ならまだ多くのブラウザでサポートされるだろうけど、
廃止される予定の仕様を今現在わざわざ使う理由も無いと思うね。
getElementByIdでは、全てのエレメントが対象であり、
戻り値のオブジェクトがHTMLFormElementである保証も無いが、
document.formsの場合には、フォームエレメントだけを対象とし、
当然戻り値もHTMLFormElementであると期待出来るから。
では?
しかし
>>364 は単にJavaScript文法の質問(変数に格納した文字列をプロパティ名として使用する方法)だったようだけど、
流れが生産的な方向に脱線するのも面白いね。
オブジェクトが多数存在する場合 getElementByIdとdocument.formsでは document.formsの方が良いってことかね?
>>418 洩れは
○質問者が「document.フォーム名.部品名.value」を使って
いる場合はdocument.forms.フォーム名.elements.部品名.value
を紹介し、
○それ以外の場合はdocument.getElementsById()を紹介
しているなー。特定要素を参照する方法をまだ知らない人に教える
のなら覚えることが1つで済む方法の方がいいかなと思って。
JSの能力をもっと上げるために何をすべきですか?
>>422 過去スレ全集を見ながら出て来た質問の回答例を全部書いて
みる。実際に出された回答と比べて自分より優れているものは
取り入れる。これ最強。
426 :
422 :2008/05/07(水) 14:51:36 ID:thVr5nk5
423〜425さん。 ありがとうございます。425さんのアドバイスは100年かかってもできそう にありません。参考書を読むのもやっとな状態です。地道に取り組んで行き たいと思います。親身なご回答ありがとうございました。 (前回ageずに質問してしまいました。申し訳ありません)
どこかに予約語の一覧はございませんでしょうか。
ネットにございます。ググりもしなかった?
430 :
Name_Not_Found :2008/05/07(水) 18:20:16 ID:RC3gAfrK
>>425 そのアイディアいただき !
(根気が続くかどうかが最大の問題)
>>425 今からこれをやろうとしてるそこの君!
1問ずつ質問と回答を抽出もしくは別解したのを掲載して
1サイト立ち上げてくれたらおじさん泣いて喜んじゃうぞ!
432 :
Name_Not_Found :2008/05/07(水) 19:58:34 ID:RC3gAfrK
"過去スレ" の初期の部分(2000年) に目を通してみると... う〜ん, window.open(), frame 関連... 時代の流れを強く感じます. すべて完全に拾い上げてサンプル化するのは現実的ではなさそう. 結局, 独断と偏見で取捨選択せざるを得ない...
そんなことよりひたすら良い回答をキボン 最近document.allに就いて交わされた議論からわかるように昔の なんか掘り出しても今は環境がちがう。openspecのサイトと同 じで有害でこそあれ使いものにならないですぜ、旦那。
あとトホホもね。
435 :
Name_Not_Found :2008/05/07(水) 20:25:23 ID:RC3gAfrK
DOM 1 についての回答が (すでに) ちらほら. まったく無意味という訳でもなさそうだけど, 大部分はばっさり切り捨てなければならないだろう. 編集過程に個人的な偏見が入り込むのが最大の問題だろうなぁ. しかし, 物作りが好きな人間に取っては興味深いテーマだ.
とりあえずsageろ
玉石混淆な過去スレを見るのも得るものはあるだろうけど、
>>12 のいずれかのFrameworkのソースを読んだ方が、
より簡単に現状の環境で有効な手法が判るのでは。
>>437 個人的に "手法" よりも "サンプル作り" に興味があるので,
よくある質問の頻度を調べるだけでも意味があると思ってます.
そんな暇があったらFlexやれ。 いつまで終了言語のJSで遊んでんだよ、馬鹿かおまえら。 貧弱貧相なJSはJScriptで社内の色んな処理を書く以外には使途が無いと早く気付こうな。
>>439 いつもの馬鹿はAdobe AIRも知らない様子。さすがだね。
>>432 vol.1からやろうとするんじゃなくて
vol.63からある程度まで逆に辿っていけばいいんじゃない?
JS終わった君 乙
>>438 誰の為にサンプルを作っているのかは知らないが、本末転倒のような気も。
まあどこかのスレでのように、指摘されて発狂するような事にならないように頑張っておくれ。
>>441 スレの中で2割がかろうじて質問だとして1000 * 0.2 = 200 ね、
vol63からさかのぼったとしてまあどんな奴でもvol58くらいで空しさ
に堪えかねるだろうな。
Prototype.jsはイベント設定時に element._eventIDをくっつけていますが、 この方式で何を実現したいのか分かりませんでした。 利点と欠点が分かる方教えてください。 どうでもいいけど、getEventIDを見るに、 eventIdというよりむしろelementIdだと感じています。
Arrayどうかを知りたい場合(でもargumentsやnodeListは弾きたい) ・arr instanceof Array ・arr.constructor == Array どちらを使用されていますか? YahooUIなどでも、1つのソースに上記の2つのパターンが混じっていました。
firefox3でfirebugは使えていますか? DOMインスペクタは動きますが、breakpointがなぜか効きません。1.2 alphaですが。。
>>446 Arrayの場合は[]でもnew Array()でもどちらもtrueだけど、
var testStr = new String( 'foo' );
alert( testStr instanceof String ); // true
testStr = 'bar';
alert( testStr instanceof String ); // false
となるので、記述の統一という意味で形判定にはconstructorを使っているね。
流れぶった切って申し訳ないです.
これ以降 ROM 專に戻りますので許してつかぁさい.
>>441 なるほど... 参考にさせていただきます.
>>443 遠い昔, サンプルを漁ったことがあります.
長ったらしい説明の後の肝心のサンプルは動作不良なんてのがほとんど.
"まずは動作確認が先でしょ ? " と強く思ったものでした.
きちんと動作するサンプルって意外に少なかったり...
>指摘されて発狂するような事にならないように
う〜ん, あれは指摘されたのではなく, 指摘したんですが...
(だけど,そのように見えるのなら あえて弁解するつもりはありません)
既出だったらすまん。 他人のコード見てたら、変数に関数ぶっこんでるのが結構あるんだが、 俺的にはfunctionで始まらない関数は、すごい違和感を感じる。 こういう使い方ってJavaScript的になんかメリットあるの?
>>450 あんたの違和感のために言語が設計されているわけじゃ
ないから。具体的にどういうコードはどう書いた方が
「違和感」なくていいと思うのか貼ってみてよ。
>>448 「文字列オブジェクト」と「文字列値」は別ものなんだが。
それを一緒という判定にしたいのならそうするんだろうけどね。
>>452 それだ!ありがとう!ちょっと勉強してみる。
>>451 違和感あるから「悪い」、とは言ってない。
自分の持ってる知識が古すぎ&独学で、関数はfunctionで始まるもの、
としか認識してなかった。
自分が知らないことでも、なにかメリットがあるなら、取り入れたいと思ってた。
ただ、無名関数って単語すら知らんかったから、ググりようも無かった。
がんがれ その辺慣れたら、JavaScriptの柔軟さとお手軽さを一層楽しめるようになるですよ
SELECTの任意の項目を選択させる場合って、 document.forms[0].hoge.options[0].selected = true; しか方法ないのでしょうか? options[0]のような位置指定ではなく、VALUEの中身を検索して 見つかったら選択のような処理がしたいのですが。
>>455 valueの中身をループしながら調べるしかないね。
と、いうことはOPTIONのVALUEを調べて位置を割り出すことは可能ですか?
あ、わかりました。 for(i=0;i<MAX;i++){ if(document.forms[0].hoge.options[i].value == "are"){ index = i; } } こうですか?ちょっとやってみます
艶情事さーん、おばたせしました。先生が診てくださるそうですよ。
>>446 オブジェクトのconstructorは書き換え可能だから
あんまりconstructorで判別しようとは思わないなぁ
JavaScript1.1以下 constructor 読み専 instanceof なし isPrototypeOf() なし JavaScript1.3以下 instanceof なし isPrototypeOf() なし こういう歴史を知っていれば、いまさらconstructorを使わないわな。 使われていたら、プロトタイプチェインを知りたいのではなく、目的は他にあるのだろう。
sage
それぞれのライブラリで出てくる回数。 constractorは比較のみ抽出されるように、「\.constructor[ \t]*[\!=]=」で検索 フォーマットはconstractor/instanceof/isPrototypeOf/typeof。 prototype 1.602 0/2/0/10 jQuery 1.2.3 20/0/0/19 YahooUI 2.5.1 34/175/0/169 (*-debug.jsのみ対象) mootools 1.2b2 0/0/0/16 ExtJS 2.02 5/47/0/346 (もちろんsourceディレクトリのみ対象) Dojo 1.1 8/197/0/622 (compressされたやつは除く。dojoxとdijit、utilは含む。面倒なのでtestsも含む)
465 :
464 :2008/05/09(金) 01:22:27 ID:???
で、自分の意見。 isPrototypeOfは誰も使ってないので、危険そうだ。 ほとんどはtypeofで済ませて、Array、RegExpはinstanceof。 constractorは早くしたい時に使うのがよさそうだ。
>>445 をよろしく。
prototype.jsのイベントモデルについて語りませんか?
>>445 Event.cacheからelementに追加されたハンドラを検索するためのキーのようだね。
だめ?ざっとコード読むだけでは解らんような思想とかが知りたいのかな?
あほらしいと言えばあほらしいメモリリーク対策
>>467 あんまりコードもじっくりは見てないよ。で、今見てみると、
element._eventIDを割り振っている理由は、そのときのサーチを高速化するためだと思いましたが、
意識は合っていますか?
別に、element._eventIDを割り振らなくても、
elementに追加されたハンドラが何かは分かると思っています。
>>468 それは、Event.cacheを持てば実現できることであって、
elementに_eventIDを割り振らなくても実現出来ると思っています。
余談でかつ拘る積りもないが、 × prototype.js ○ Prototype.js
JavaScriptで信長の命日(本能寺の変)を求めたら水曜日って出たんですが、 これあってますか?シーザーの暗殺された日の曜日も求めたいのですが。
474 :
472 :2008/05/09(金) 14:14:18 ID:???
>>473 ご回答ありがとう御座います。歴史の話ではなくてJavaScriptのことな
んです。よろしくお願いします。
>>474 歴史の話だっつーの。
本能寺の変が1582年6月21日だとすると西洋では月曜だが、日本に西洋の暦は入ってきてない。
シーザー暗殺のときにはグレゴリオ暦はない。
暗殺が紀元前44年3月15日だとしても、閏日が適当にはいってるんだから、それだけじゃ曜日なんてわからん。
となると、安息日なんかから割り出すわけになる。これは完全に歴史の範疇。
>>472 スクリプトの正否を知りたいなら
そのスクリプトを貼らないとわからんでしょ
>>475 計算してみた
本能寺の変があったのは天正10年6月2日だから、グレゴリオ暦になおすと1582年7月1日の木曜日
ユリウス暦だと西暦1582年6月21日の土曜日
じゃね?
とまぁ、曜日なんてのは使ってる暦や計算方法でバラバラになるんだ。 それを1つに定めるのは歴史研究家じゃないとムリ。
479 :
472 :2008/05/09(金) 18:34:47 ID:???
473-478(特475,477)さん そうなんですか。JavaScriptと暦って奥が深いですね。水曜日でも ないのですか。もっと精進します。ありがとうございました。 みなさん、どうぞ良い週末を!
>>469 > サーチを高速化するためだと思いましたが、
何と比べて高速化なのかわからんけど、配列を検索したりするよりは速いわねきっと。
>>481 配列の検索です。
できれば、elementに_eventIDなどというプロパティは追加したくないと思っています。
ですが、
1.「IEのメモリーリーク対策」
2.「イベント削除の簡易化(要素のみ指定すれば、ひもずくハンドラを全て削除)」
の機能は欲しいと思っています。
で、2番を実施するにあたって、
必要以上にコストのかかる処理にならないようにしたいとも思っています。
elementに_eventIDを追加しない方法だと、配列になってしまうと考えています。
何とかelementに_eventIDを追加しない方法で上記を実現出来ないか、知恵はございませんか?
ブラウザによってはelementごとに独自のIDを割り振ったものがあったと思いますが、
上記機能を実現するにあたりその機能を使えると思いますか?
>>482 IDは使わないで、エレメントオブジェクトをそのままキー
として表を作ることはできるんじゃないの。試してないけど、
var tbl = {};
...
if(!tbl[element]) tbl[element] = [];
tbl[element].push(handler);
みたいな…で、削除するときは
for(element in tbl) {
for(handler in tbl[element]) {
elementからhandlerを削除する;
}
}
>>483 それだとキーは element.toString() になる
エレメントをキーにするやつは便利そうだからちょっと書いてみる
1次元配列から、ハッシュと配列の組み合わせに変えれば多少早くはなるかも。 ハッシュのキーには、element.toStringした文字列だけではなく、 idとかclassNameとかも含めて、キーにする手があるけど、 documentやwindowオブジェクトだと無理だね。
storage の一覧取得でコケて elements なんて作ってしまった
>>482 の 2 番だけならそうでもないけど、1 番は少し重いかも
どんどん突っ込んでくれるとありがたい
var Event = {
storage: (function() {
var elements = [];
var f = function(element, handler) {
var prev = f.now;
if (element === undefined) return elements;
if (handler === undefined) return prev(element);
f.now = function(elem) {
if (elem !== element) return prev(elem);
var a = prev(elem) || [];
a.push(handler);
return a;
};
elements.push(element);
};
f.now = function() {
return undefined;
};
return f;
})(),
observe: function(element, name, observer, useCapture) {
useCapture = !!useCapture;
if (element.addEventListener) {
this.storage(element, [name, observer, useCapture]);
element.addEventListener(name, observer, useCapture);
} else if (element.attachEvent) {
this.storage(element, [name, observer, useCapture]);
element.attachEvent('on' + name, observer);
} }, stopObserving: function(element, name, observer, useCapture) { useCapture = !!useCapture; if (element.removeEventListener) { element.removeEventListener(name, observer, useCapture); } else if (element.detachEvent) { try { element.detachEvent('on' + name, observer); } catch (e) {} } }, destroyObservers: function(element) { var a = this.storage(element); if (!a) return; for (var i = 0, len = a.length; i < len; i++) { this.stopObserving.apply(Event, [element].concat(a[i])); } }, destroyLeak: function() { var elements = this.storage(); for (var i = 0, len = elements.length; i < len; i++) { Event.destroyObservers(elements[i]); } } }; if (window.attachEvent) window.attachEvent('unload', Event.destroyLeak);
こうだった if (window.attachEvent) window.attachEvent('onunload', Event.destroyLeak); ↑
あるidをもつタグを選択状態にしたいのですがfocus()やselect()を 使ってもうまくできません。 function selectElem(id) { document.getElementById(id).focus(); document.getElementById(id).select(); } ↑できないです。 どうすればよいのでしょうか?
>>482 uniqueID のことなら、IEのシェア分だけカバーできちゃうから、非常に有効な手段だな。
特に、要素オブジェクト周りのリークはIEの話なわけだから、
他のブラウザ用には、遠慮ないコードを書けばいい。
>>486 Eventだのelementだのと、ホストオブジェクト名を我が物にするのが好きなんだな。
そういうのがどうでもいいと思えるほどの上級者なんて、俺を入れて世界に10人くらいしかいないぞ。
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>490 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
492 :
482 :2008/05/10(土) 22:43:34 ID:???
>>486 scopeを利用した、疑似配列を作成といったところですね。
すばらしい。そのような方法があるとは思いつきませんでした。
しかし、結局prevが呼ばれる回数が配列にしたときと同じであることが気になっています。
むしろ、通常配列の方が関数呼び出しよりもはやいのではないかと思っています。
また、上記の動作であるため、observeの呼び出し回数が、
destroyObserversの性能に大きく影響してしまうと思っています。
prototype.jsではそうなっていないと思っています。
493 :
482 :2008/05/10(土) 22:49:45 ID:???
>>490 そのuniqueIDで気になっていることとして、
例えば、removeChildして、appendChildしても同じ値になりますか?保証されますか?
また、cloneNodeしたときはどうなりますか?
まぁ、cloneNodeしたときはprototype.jsも考慮はしている作りにはなっていませんが。
>>482 の1番は2番が実施出来るようにすれば実現できることだと思っているため、
2番の処理をいかに早く出来るかだと思っています。
>>489 input type=textとかじゃないと、selectメソッド持ってなかったと思った。
それ以外の部分を選択状態にしたければ、
ノードをrengeオブジェクトに変換して、それのselectメソッドを呼べばいいと思う。
495 :
482 :2008/05/11(日) 00:09:06 ID:???
observの呼び出し回数によるdestroyObserversへの影響の こちらが望むオーダーを書いておきます。 スクリプトでやる場合はlog(N)以下にしたいと思っています。(理想は1ですが) ちなみに、prototype.jsはelementのサーチが1のオーダーで、 その後のハンドラのサーチがNのオーダーだと思っています。 なんとかelementのサーチをlog(N)に出来ないかと思っています。 (母数のNはelementとハンドラでユニークになるので、それがNでもよいし、 prototype.jsのようにelementのみでNでもよいです)
496 :
Name_Not_Found :2008/05/11(日) 09:15:43 ID:mHzlIR0Q
function Hoge() { this.count = 0; } function Hoge_start() { setInteraval(this.run, 1000); } Hoge.prototype.start = Hoge_start; function Hoge_run() { alert(this.count); //thisがHogeではなくwindow this.count++; } Hoge.prototype.run = Hoge_run; オブジェクト指向JavaScriptで↑のようなことをしたいのだけど テンプレのA14のやり方だとどう書けばよいでしょうか?
Q14 についての便乗質問: <blockquote> Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが "...this..." とか function(){...this...} ではうまく行きません </blockquote> ん ? なんか変だな〜 " function(){this.〜} " 使いまくってるけど問題ないと思うけど... できたてのサンプルがあるから とりあえず見て見て : homepage2.nifty.com/alter/samples/table_background2/exam.html
>>496 function Hoge_start() {
setInterval(function(t){ return function(){ t.run(); } }(this), 1000);
}
>>497 サンプル見た。Q14で言っているthisはHogeクラスのthis。
サンプルでのthisは対象Elementを指している。
クラスベースで作成した場合、それでは困るケースがほとんど。
>>498 回答有難う.
OOP 表記については 今だに 理解してないけど
function f(){this.~} の場合は f() 自身を指すことは理解してます
ところが僕のサンプルでは
あたかも onclick="f(this)" を後から追加したように働く.
で, Q14 の Q では 質問者が指し示す this が
何を指しているのかが明確でないのではないかと.
>>499 fではなく、fが所属するオブジェクトを指したいのが通常。 Q14のthisはfが所属するクラスインスタンス。 それはOOPを理解すれば明示的に書かなくてもわかる。
オーダーなら有料だろな
>>495 しばらく考えてみたけどやっぱり _eventID がいちばん効率的じゃないかと思った
せめて直接汚染するのは避けようと思って element.toString に生やしてみたら cloneNode でコピーされた;
503 :
496 :2008/05/11(日) 16:22:18 ID:mHzlIR0Q
>>498 の方法でいけました。
ありがとうございました。
更に質問ですがJavaのようにpublicメソッドからprivate変数、privateメソッド
にアクセスすることはできないのでしょうか?
実質ローカル変数以外はほとんどpublicにするしかない?
function Hoge() {
var privateVar = 1;
function privateMethod() { ... }
}
function Hoge_publicMethod() {
var x = priavteMethod();
return x + privateVar;
}
Hoge.prototype.publicMethod = Hoge_publicMethod;
function Hoge() { var privateVar = 1; this.Hoge_publicMethod = function() { var x = priavteMethod(); return x + privateVar; }; function privateMethod() { ... } }
505 :
496 :2008/05/11(日) 17:03:14 ID:???
特権メソッド?では、インスタンス各々がpublicMethodのポインタをもつ事になり効率が悪いのでは?
JavaScript には private という概念は無く、そういうのは常にクロージャで代替する
>>504 では Hoge_publicMethod がインスタンスが生成されたときの環境を保存したクロージャになってる
507 :
Name_Not_Found :2008/05/11(日) 22:17:46 ID:YBuCkc1l
JavaScriptにWebページ上のある場所の座標を指定して クリックと同様の操作を行えるメソッドや機能はありますでしょうか? click()というメソッドはあったのですが、これはクリックの対象となる オブジェクトを指定してやらないとクリックができないので座標が使えないのです。
>>507 すべての要素について順次その位置を調べて該当座標上
にあるものを探す必要があるかもね。
>>507 あれ?最近新しくできたんじゃなかったっけ?
なんとかFromPoint(x, y)ってやつ。
>>505 お、きみスジいいね。今度おじさんと一緒にや・ら・な・い・か?
おっしゃる通り、インスタンスごとにメソッド持つことになって、
IE6とかだとセッタ・ゲッタ両方作ってたら参照でも2倍ぐらい重くなるし、ソートなんて数倍重くなるよ。
だから、おじさんはプライベートなメンバを作ることなんてそうそうないよ。
>>502 そりゃ残念。
toStringはさすがにダメそうだから、
nodeNameとか、nodeTypeでもやってみたけどなぜかダメだったよ。
element.nodeType["_eventID"] = 10;
one of the 国内の10人
>>196 one of the 世界の10人
>>490 どちらも何の役にも立ってない件についてw
じゃぁ俺は宇宙の10人だな\(^o^)/
514 :
507 :2008/05/12(月) 01:01:23 ID:???
>>508 ないんですか orz
>>509 確かにそれで出来そうですが、効率悪すぎますよね・・・
>>510 FromPointで検索してみましたが、目ぼしいものにはヒットしませんでした。
どこからの情報だかご存知ですか?
>>510 >>514 elementFromPoint()か
あれはIE拡張→CSSOM(View Module)で標準化の流れで
Fx3b, Opera9.5b, Safari3.1も実装してるね
実際普通に使えるようになるのはもうちょっと後になると思うけど
elementFromPoint()使うんだったら、それで要素取得して
(要素がclick()持ってれば)click()呼ぶか
fireEvent()かdispatchEvent()でclickイベント発生させるかでできるね
>>515 おお、それか。すっげぇ〜。
動的にvisibilityとかいじったり、ノード投入した直後とかでも正しく判定してくれるのか、
border edgeで判定してくれるのか、floatもOKなのか、
それらがブラウザ間で統一されているのか今からwktk中だお( ^ω^)
google翻訳で翻訳した後に「翻訳を改善する」をクリックすると、スライドしながら隠れたメニューが表示されるんですけど、あれってどうやってるんでしょう。 <div>タグのstyle.display を "none"か空にすれば表示、非表示の切り替えはできるんですが、スライドの方法が思いつかないです。 ソースみてもかなり複雑だったし。。
>>517 position: absolute;
タイマーで top|bottom|left|right を変更
>>516 んなもんflexで作れって。アホか。JSなんて使い所がないんだよ。終わってんだから。
頑張るな flexもjsも欠かせない俺には趣旨が良く判らん
基地外の発言に趣旨なんてないだろ
>>517 「翻訳を改善する」の場合は、
overflow:hiddenを設定し、heightを変更だね。
Firebugを使えば、どんなスタイルが適用されているのかが簡単に判って便利。
こんばんは。いつも参考にさせていただいております。夜分遅くすみません。 さて、早速質問なのですがjQueryである要素のCSSの初期化(無効化)を行いたいのですがどのようにすればよいのでしょうか? アドバイス等ご教授いただければ幸いです。
divの中にdom操作でテーブルを作って その結果のHTMLソースを得たいんですが IEならinnerHTMLを使って source=$("tablediv").innerHTML とすれば変数にHTMLソースを得られますが IE以外で同様の事をしたいのです 方法をご存知でしたらご教示ください
>>525 IE以外でもinnerHTMLでできます(よほど古い/マイナーな
ブラウザでない限り)。
>>526 どうもありがとうございます
何かでie固有のプロパティーみたいなのを読んで勘違いしていました
このウインドウ内の、個々のレスのID:xxxxxxxxの ID:の後ろxxxxxxxx部分を置換したいんですけど、なんか良い方法ありますか? あ、開いてるブラウザのアドレスに貼って実行しようと思ってます。 下のみたいなのを、xxxxxxxxに対してやりたいと思って・・・ JavaScript:document.body.innerHTML=document.body.innerHTML.replace(/ID:/g,'糞ID:');focus();
>>528 おたくが書いた方法でできるんじゃないの。何が問題?
530 :
Name_Not_Found :2008/05/13(火) 10:39:51 ID:/2VeZciO
jQueryで、<select>の値が n の場合は、小窓を開くという処理を 書いたのですが、WinIE7のポップアップブロッカーでブロックされて しまいます。 普通に、onClickなりのクリック動作だとブロックはされないのですが…。 $('#select').change(function(){ if($('#select').val() == n){ window.open('komado.html', 'KomadoWindow', 'scrollbars=yes,resizable=yes,width=300,height=400' ); return false; } }); どうしたらブロックされずに開くことができるでしょうか?
>>530 ポップアップブロッカーの仕事がJavaScriptから開かれる
小窓をブロックすることである以上、それはユーザの選択であり
回避できない(回避できたらブロッカーのバグとしてすぐ修正される)
と思われ。あきらめれ。
>>530 そんな細工が迷惑なのでブロックツールが人気なわけでしょ。
洩れも使ってる。
>>524 状況がわからないな。どんなことやろうとしてるの?
小窓に見えるDiv要素を表示すればいいのでは?
ブラウザのアドレス欄に貼って実行する類の処理を 他の方法で出来ませんかね?
>>535 自分が見るだけだったらProxomitronとかその他ローカルに
加工してから表示するツールがあるんじゃないかな。
Javascriptで画像を表示させるにはどうすればいいですか?
var tNode = document.getElementById("hoge"); var cNode = document.createElement("img"); cNode.src = "./hoge.png"; tNode.appendChild(cNode);
∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
>>538 ( \ / _ノ | |
.\ “ /__| |
\ /___ /
541 :
517 :2008/05/13(火) 22:47:48 ID:???
ありがとう。 ちょっとやってみます。
cloneNodeしたときに、付与したハンドラやプロパティも一緒に コピーされるかどうかについて、質問です。 ・IE/FireFox/Safari/Operaがどのような動作をするのか? ・DOMの仕様はどうなっているのか? 上記について、ご存知の方教えてください。
>>538 var canvas = document.getElementById('cvs');
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = "image1.gif";
ctx.drawImage(img, 0, 0);
544 :
542 :2008/05/13(火) 23:36:32 ID:???
>>543 canvasノードをcloneNodeしてみたけど、
canvasに書き込んだ内容はコピー出来なかった(´・ω・`)
canvasの内容ごとcloneしたいんだけど方法ありましたら、教えてください。
>>544 当たり前。
cloneNode して変形して描画するをセットで行う。
どの立場から見て当たり前なんだかw まあ、とっくに過去の遺物だからどーでもええけどw
>>546 その「当り前」という意味は、cloneNodeはDOMツリーの
構造をコピーするものだから、canvasで描画したときに
描画内容がDOMツリーとして構築されて行くのでない以上
コピーされるわけはない、という意味じゃないかなー。
>>542 例えばElementに対するcloneNode()のコピー対象は
属性と属性値(、deepがtrueなら内容も)なので
内部的に属性として扱われるようなものなどでない限りは
プロパティはコピーされないと考えてください
DOMの仕様上ではハンドラ(リスナ)は基本的にコピーされない
(DOM 2 Eventsの1.3.1のEventListenerと1.3.2を参照。
ただsetAttribute(イベント属性, FunctionBody)で付加したものは属性扱いなので
真っ当な実装ならコピーされるでしょう。IEは駄目だけど)
canvasはtoDataURL()経由でコピーすればいいんじゃないですかね
549 :
548 :2008/05/14(水) 08:26:45 ID:???
×canvasはtoDataURL()経由でコピー ○canvasの描画内容はtoDataURL()経由でコピー
普通にdrawImageの引数にcanvas要素を取れるよ どんなブラウザでもいけるかは知らないけど
クロスドメイン制限がどうしても越えられません。 どうにかして違うドメインのページにJavaScriptを適用する方法はないものでしょうか。
あるわけない。よからぬことを企んでいるとしか思えないから。
>>551 できたらあっという間に何千万も儲けられる(犯罪で)。金の
ためなら労力を厭わない頭の切れる犯罪者がゴマンといるのに
できていない。それをできるんじゃないかと思うアンタはアホだな。
初歩的なことで申し訳ないのですが、HTMLタグ内に直接JSを埋めて実行する場合、 onClick="this.style〜" と言った感じでthisオブジェクトが利用できますが、関数を呼び出して実行する場合に同様に機能させる方法はありますでしょうか。 具体的には、 <div id="hoge" onClick="hello()">AAA</div> funciton hello(){ var test = document.getelementById("hoge") test.style = 〜 } をId名など一切定義せずにその時関数が呼び出された呼び出し元に随時効果を適応させる記述方法を探しています。
>>554 スローな結果は否めないとしてidを定義するのがイヤなら順番で取得
しかないのではないかな。
それとthisはオブジェクトなの?知らなかったお。
>>554 onclick="hello(this)"
function hello(elt) { ... elt.style = ... }
>>556 thisは擬変数でthisが指しているものはオブジェクトでしょ。
隔離スレがポシャったから(健全化したともいう :-) nullがまたこっちに来るようになったんじゃないか?
あれぇ、おらのがっこではthisはチーワードって習ったんだがや。 チーワードの日本語訳は擬変数っちゅうのでいいのがや?
>>559 キーワード(予約語)というのは字句/構文上の問題。
だったらifやwhileもキーワードだがthisはifやwhileと
同じようなものだと言われて納得するかい?
擬変数(pseudovariable)というプログラミング言語用語を
知らないのなら勉強すりゃいいじゃん。
インチキ変数てなわけですか。偽変数。
562 :
null :2008/05/14(水) 17:26:22 ID:???
ん ? 誰かに呼ばれたような... ちなみに "隔離スレもどき" は無数にあるのよね. んで,正直に白状すると最近やる気なし. 問題は IE の分裂 ( 5,6 だけでもウンザリなのに, 7,8... まで発生 ) 付き合い切れません !
FF限定でスクリプト組める仕事してる俺は勝ち組!
分裂して困るようなコードを最初から書かなければいい。
そうだそうだ!
>>562 サポート打ち切られた OS を使い続けているせいで
使える web-browser も限られてしまう.
それでも Mozilla 系 (残念ながら FF も使えない) なら問題ないはず.
しかし, 念のため IE 5.17 (唯一使える IE) で動作チェックするとドボ〜ン.
最近作ったり改良したサンプルが 2 品とも動作不良.
(デバッグで引っかからないので CSS か他の原因と予想)
5.17 で問題を起こすのなら他のバージョンでも同様と考えるべき(はぁ)
OS 乗り換えれば良さそうなものだけど
MS も Apple も謎 OS ばかり出してやがる !
(こうなったら Linux 系... いろいろ調べるも先に進めず)
(さっさと糞ブラ捨てろ的な意味で)待望の IE8 だと思うんだがなぁ
ごちゃごちゃ言ってないで、早急にAS3をやれ。JSは終わってるって言ってるだろ。おまえらさあ、いつまで能力の無駄遣いやってんだよ。
どうも不思議だな。「JavaScriptに怨みがある」というのは どういうシチュエーションなんだろう。昔書いていたけど ヘタを打ってからかわれて怨むようになったとか?
洩れには、JS終わったと再三喚いてる奴がなんでこのスレにいるのかが ナゾだな。中学生が小学校の校舎でウロウロしているようなもんだろ。 ね、JS終わった君。
アンチAS工作だろ ASにコンプレックスを持ってるJS使いとか ASのスキル持った奴が増えて単価が落ちないように企ててるAS使いとか
そりゃ全然わからないな。JS使いはFlashやASに関心ないだろ。 ブラウザに直で組み込まれてるからこそ色々やって遊べるんだし。
同じECMAScript系のJavaScriptとActionScriptだけど、 その利用用途はかなり異なっているのだから、 どちらか一方しかやらないというのは勿体無いね。 いつもの煽りのように、アホ過ぎて片方しか覚えられないというなら仕方無いけれど。
>>548 thx。こっちは実装を調べてみた。
//DOM/IE/FFコピー有無状況
//DOM対応はこちらが勝手に想像した仕様。
//@: ×/○/×
$("XXX1").test1= "1";
//A: ○/○/○
$("XXX2").setAttribute("test2", "2");
//B: ○/△/○(IEの△とはプロパティのコピーはされるが、
//そもそもリスナとして登録されない。)
$("XXX3").setAttribute("onmouseover", "test3();");
//C: ×/×/×
$("XXX4").onclick = function(){ alert(4); };
//D: ×/○/×
$("XXX5").addEventListener("click", function(){ alert(5); }, false); //IEはattachEvent
577 :
576 :2008/05/15(木) 00:13:20 ID:???
で、自分が何を言いたいかというと、
IE含めたクロスブラウザ対応のcloneNodeを作成したいと思っていて、
その仕様をどうすればよいかについて検討したいと思っています。
elementにプロパティを付与することは実際の実装上で必要になることはおそらく少ない。
(注意点として
>>502 にあるようにプロパティを付与しないと解決出来ない問題もある)
しかし、イベントを付与することは普通に行うことでしょう。(特にIEのattachEvent)。
そのような状況においてどうすればいいと考えますか?
バブルするイベントタイプを要素オブジェクトで監視しねえよタコ。 そのmouseoverをdocumentで監視して、かつ、mouseoutを使わずに、一つのリスナーで処理できるようになってから出直せ雑魚。
>>578 上の文面を見てそのような些細なことが気になるなんて頭おかしいんじゃないの?
>>550 ああ、そうか。失念してました
>>576 >@ >B
そういえばIEのelement.setAttribute(prop, value)はelement[prop]=valueの別表記でしたっけ
>>577 イベントリスナやユーザが独自に付加したプロパティを含めてコピーする
クロスブラウザ対応のcloneNode()をつくりたいということですか?
>>580 ブラウザ間で統一していれば、どちらでもよいです。
ですが、とりあえず、IEをDOMの仕様に合わせる方向の方が楽&良いのではないですかね。
(出来れば、オプションでどちらか指定できるとよいですが)
その場合、Dの対策のためにイベントを削除する必要があって、
cloneしているものだから、コピー前とコピー後の要素が
どこかで同じものだという認識をする必要があると思っています。
@の対策は結構難しい気がしています。
Iあるプロパティが@方式かA方式のどちらで指定されたのかを検知する方法ありますかね?
丸付きの数字って機種依存文字ってやつじゃないの?
うん。避けたほうがよいかもね
jQuery みたいにラッパーで操作すればラクだとおも 3 と 4 は論外として、毎回 [sg]etAttribute するようにして 1 も切り捨てれば案外簡単にできそうだが
丸付きの数字はマズイなネットを使う人間には基礎の基礎なんだが
50年もすればいたるところUnicodeでどうでもよくなってるよ。 今はdatファイルはShift_JISだったっけ?
>>586 Unicodeとジジイ・ババアだな、いたるところ。
50年はさすがに待てないわ
チェックが入ってたら送信できるようにするにはどうしたらいいですか? <script type="text/javascript"> <!-- function check(theform){ //性別が入力されているか for(i=0;i<=1;i++){ if(theform.sei[i].checked==false){ alert('性別をチェックしてください') return false; } } return true } //--> </script> <form name="form" onsubmit="return check(this)"> 性別<input type="radio" name="sei" value="male">男 <input type="radio" name="sei" value="male">女 <p><input type="submit" name="submit" value="送信"></p> </form>
>>590 ロジックがおかしいだろ。「checkedがtrueであるものの個数」を
数えて、最終的にその個数が1ならtrue、それ以外falseを返すとか
考えたらどうだろう。
return theform.sei[0].checked || theform.sei[1].checked;
>>591 formのテキストでは入力チェックの処理が簡単にできたのですが
ラジオボタンだと結構苦戦してしまいました;助言ありがとうございました!
>>592 どうもです!
参考に作ってみたらこれで動きました!
<script type="text/javascript">
<!--
function check(theform){
//性別が入力されているか
if((theform.sei[0].checked==false) && (theform.sei[1].checked==false)){
alert('性別をチェックしてください');
return false;
}
return true
}
//-->
</script>
<form name="form" onsubmit="return check(this)">
性別<input type="radio" name="sei" value="male">男
<input type="radio" name="sei" value="female">女
<p><input type="submit" name="submit" value="送信"></p>
</form>
594 :
Name_Not_Found :2008/05/15(木) 22:06:51 ID:IFEqkfAJ
firefox用のgreasemonkeyについて 自分で作った関数を実行するようなリンクはgreasemonkey上ではどのようにしてつくればいいんでしょう?
いつも通りでおk
wrappedJSObject
>>584 まぁ、何らかのラッパーにはするとして、
jQueryはinnerHTMLで回避しようとしているけど、
参照型のプロパティ付けたやつはどうだろうと思って、
参照型はそもそもcloneNodeしてもコピーされないんだな。
それだとinnerHTMLでもほぼ同じ結果になりそうだと思ってる。
598 :
Name_Not_Found :2008/05/15(木) 23:01:07 ID:IFEqkfAJ
>>595 いつもどおり、javascript:関数名 にリンクをはっても
greasemonkey内の関数は読まないのか関数が定義されていない。とエラーがでます。
>>598 unsafeWindowのプロパティにするとかしろよ。つうかここで訊いてる時間で説明書読め。
>>597 innerHTML まで真似しろとは言ってないよ
たとえば
ext.$('elem1').setAttribute('hoge', function() {}); でラッパー側に蓄積していって
ext.$('elem1').cloneNode(true); ですべてのコピーが保証されるってのはどうだろうか
elem1 の同一性チェックには
>>486 の storage を応用して、
というか相性よさそうだからひとつのライブラリにしちゃえば _eventID 問題も解決、と
602 :
Name_Not_Found :2008/05/15(木) 23:22:18 ID:IFEqkfAJ
>>599 >>600 ありがとうございました。やりたいことができました。
今回javascriptをすっとばしてはじめて触るものでなにからなにまで1からなので苦労しています。
バブルする==>アホ外人が俗に言うイベントデリゲーション バブルしない==>HTMLのイベント属性 以上。要らんもんこねくりまわすよりどれだけシンプルか。
event delegation to obligate functions to another as agent or deputies on events.
605 :
Name_Not_Found :2008/05/16(金) 21:43:58 ID:A8/8iygj
関数で、フォーム名を引数で受け取ってるんですが、うまく展開できません。 どう書いたらいいのでしょうか。 <script type="text/javascript" language="JavaScript"> function TestSubmit( test_fm ) { document.test_fm.submit(); } </script> <form name="test_user_form" method="post" action="test_user.php"> <input type="button" value="test" onclick="TestSubmit( 'test_user_form' )"/> </form> 関数内で、フォーム名を直接指定すればsubmitできます。 document.test_user_form.submit();
>>597 IEをDOMの仕様に合わせるんであれば、
コピー元がElementならinnerHTMLから再構築するのが
一番手っ取り早いんじゃないでしょうかねぇ
アマゾンの書籍のページからタイトル、著者名、出版社、 値段などの項目をタブ区切りのファイルにはき出す bookmarklet作りたいんだけど、可能? アマゾンのページのisbnを参照して公立図書館の検索機能に 飛ばして自動で検索するまでは調べて、自分ちの近くの図書館バージョンまでは作ったので、次のステップをやりたいんだけど。 アマゾンのawsとか利用する必要有り?
>>605 document.forms[test_fm].submit();
>>601 >>
>>606 イベントくっつけたままコピーするなら
>>601 方式でIE以外にイベント付与して、
消した状態でコピーするなら
>>606 方式がよいと思った。
jQueryはイベントも一緒にコピーするかしないか選べる機能があるけど、
一旦
>>606 方式で全部消した後に、
>>601 方式でイベント付与するっていうちょっと無駄なやり方してるよね。
610 :
Name_Not_Found :2008/05/16(金) 22:39:19 ID:A8/8iygj
>>608 ありがとうございます!
forms[]の中にフォーム名入れてもいいんですね。
参照番号だけかと思ってた。
amazon webサービスつかえば?
612 :
607 :2008/05/16(金) 23:30:48 ID:???
悪い悪い、アマゾンのソース見たら、ソースページをかなり下の方に スクロールしてようやく情報が出てきた。 ソース見れないと勘違いしマスタ。がんばってみまふ。
613 :
Name_Not_Found :2008/05/16(金) 23:35:29 ID:3AOivxLR
リンク先のjpeg画像を、強制的にダウンロードダイアログを 出して保存させるようにしたいのですが javascriptのみで可能でしょうか? 普通にリンクするだけだと、jpegだと当然ブラウザに表示されて しまいます。 ブラウザで開かないファイル形式なら、ダウンロード ダイアログを勝手に出してくれるのですが… CD-ROM等でも使いたいのでCGIとかは使えません。 よろしくお願いします。
鯖上でって言うなら MIME タイプいじってやればいいけど CD-ROM でっていうなら無理だわな
616 :
613 :2008/05/17(土) 00:23:52 ID:FoauIqhd
>614,615 レスどうもです。 そうなんですよ javascriptでトリッキーなことして ブラウザを「勘違い」させるような事って、できないもんですかね…
617 :
Name_Not_Found :2008/05/17(土) 00:26:33 ID:s68eAPKf
greasemonkeyです。質問させてください。 function refresh(state){ //閉じている場合 if (state==0){ if (kazu>0){ GM_infoPanel.innerHTML='書き込みがあります' }else{ GM_infoPanel.innerHTML='<A id="npost" href="javascript:">ここをクリック</A>' var npost = document.getElementById('npost'); npost.addEventListener("click", showpost_none, true); } } } と書いています。showpost_noneの関数の中身は function showpost_none(){ GM_infoPanel.innerHTML='<BODY><INPUT size="20" type="text" name="name">\ <FORM><TEXTAREA rows="8" cols="39" name="comment"></TEXTAREA></FORM>\ <INPUT type="submit" name="submit"><A id="closepost" href="javascript:">閉じる</A></BODY>'; var closepost_none = document.getElementById('closepost'); closepost_none.addEventListener("click", refreshnurikabe(0), true); } となっています
618 :
Name_Not_Found :2008/05/17(土) 00:27:28 ID:s68eAPKf
これを実行し、「ここをクリック」のリンクをクリックすると、 Firefox/Profiles/rtzhpmmo.default/extensions/%7Be4a8a97b-f2ed-450b-b12d-ee082ba24781%7D/components/greasemonkey.js :: showpost_none :: line 409" data: no] こういうエラーがでるのですがなぜでしょう。 教えてください。
619 :
Name_Not_Found :2008/05/17(土) 00:33:27 ID:s68eAPKf
ちなみに showpost_noneの var closepost_none = document.getElementById('closepost'); closepost_none.addEventListener("click", refreshnurikabe(0), true); この二行を削除すれば、ここをクリック を押したときに動作しますが 閉じるを押したときにエラーがでます。
620 :
Name_Not_Found :2008/05/17(土) 01:47:02 ID:2mNU1GvT
textareaの中でクリックした位置が何行目なのか取得したいのですが どのようにしたらいいですか?
おれはついに
>>617 を解読したぞ!エウレーカ!多分。
refreshnurikabe(0);はおそらく関数を返却する関数ではなく、
refresh(0)の間違いで、たぶん
closepost_none.addEventListener("click", function(){ refresh(0)}, true);
と書きたいんだと思った。
あと、
var npost = document.getElementById('npost');の行はもしかしたら
var npost = GM_infoPanel.firstChild;にした方がよいかもしれない。
622 :
Name_Not_Found :2008/05/17(土) 02:06:39 ID:aVBxGKno
iframeを使った自動ポストを防ぐ処理を実装したいと思います 現在リファラーチェックはつけました parent.location.hrefを見て、iframe内に表示されているかどうかを 確かめる方法を考えたのですが、 もしかしたら、自動でないポストもありうるかもしれないので、躊躇しています 自動ポストを検出するいい方法があれば教えてください
623 :
Name_Not_Found :2008/05/17(土) 02:17:21 ID:s68eAPKf
>>621 その通りでございました
closepost_none.addEventListener("click", function(){ refresh(0)}, true);
これで引数を渡すことができました
ただ、同じ条件でいろいろとかいてるうちにエラーコンソールが立ち上がったりする場面が・・
なんでじゃーー(javascript:へのリンクを実行してるんでしょうか・・・)
624 :
Name_Not_Found :2008/05/17(土) 02:24:20 ID:s68eAPKf
javascript:void(0)にすることによって、エラーでなくなりました。 void書いてないのにエラーでなかったりへんなの・・・
625 :
Name_Not_Found :2008/05/17(土) 02:29:13 ID:+faOYZsW
お手数ですが、どなたかJQuery(ver. 1.2.3)についてご教授頂けないでしょうか? 以下のように、search.cgiから取得した検索結果を全てloadクラスに仮想表示して、 page毎に20件ずつdispクラスに表示したいと思います。 ところが、loadクラスに表示したはずのhtmlが$(".load").html()では 読み込めません。どうすればloadクラスのhtmlを読み込めるでしょうか? 尚、loadメソッド3番目の引数で指定するコールバック関数内なら loadクラスのhtmlを読めます。しかし、2ページ、3ページをdispクラス に表示する際には、srchの引数にkeywordを与えないので loadメソッドは実行しません。コールバック関数内 でloadクラスのhtmlを読むのは意味なさそうです。 <script type="text/javascript"> $(function(){ srch("1", "ほげほげ") }); function srch (page, keyword) { //keywordが存在すれば、検索結果を全てloadクラスに仮想表示 if (keyword) { $(".load").load("/search.cgi", { keyword: keyword }); } //page毎に20件ずつdispへ表示したい $(".disp").html( //$(".load").html()でloadクラスのhtmlを取得できない... ); } </script> <body><div id="srch"> <div class="disp"></div> <div class="load"></div> </div></body> ※もっと別の良い表示方法があればご指摘頂ければ幸いです。
626 :
Name_Not_Found :2008/05/17(土) 03:26:34 ID:2qZ+Dn1G
var x = new Array(); とした場合に、x['join'] とすると、Arrayのjoinメソッドを参照してしまうのですが、 配列の要素として設定したものと、Arrayのメソッドはどう区別すべきでしょうか? 今作成しているものは、配列の要素として関数を設定しているので typeofでは区別できません。 for( in ) でキー値と比較するしかないのでしょうか? IE7/Firefox2/Opera9 全てで同じように動作しています。 何か良い方法がありましたら教えてください。よろしくお願いいたします。
>>625 直した。
loadの第3引数に渡す関数内部で$(".load").html()を呼び出すようとよさげ。
function srch (page, keyword) {
$(".load").load("./search.cgi", { keyword: keyword }, function(){
$(".disp").html( $(".load").html());
});
}
>>626 そもそも配列じゃなく{}に入れた方がいいよ。
var x = {};
配列はあくまでフラットなリスト構造を作るのに使ってる。おれは。
>>620 むりぃ〜。せめて、クリックじゃなく、選択範囲が指定されてる時に何行目から選択されているかとか
contentEditableとかなら誰かが何とかしてくれるかも。
630 :
Name_Not_Found :2008/05/17(土) 04:10:32 ID:2qZ+Dn1G
>>628 なるほど、ありがとうございます。
でも試したら、 x['toString'] は値があるんですよね。
残念ながら、本件については、それで解決とはいかないです。
>>627 む、よく見ると、第3引数の中なら取得できると書いてありますね。
なら、srch関数の作りを変えて、以下のような感じかな?
function srch (page, keyword) {
if(keyword){
$(".load").load("./search.cgi", { keyword: keyword }, function(){
$(".disp").html( $(".load").html());
});
} else {
$(".load").load("./search.cgi", function(){
$(".disp").html( $(".load").html());
});
}
>>630 なるほど。じゃぁ参照するときは以下の判定もしとくとよいかも。
function getValue(key){
if(x.hasOwnProperty(key)) return x[key];
}
getValue("toString");
で、書き換えるときは、普通にx.toString = 1;とか出来るっぽ。
>>630 何がしたいのかわからん
インスタンスのメソッドを上書きして、正しい動作だが。
634 :
Name_Not_Found :2008/05/17(土) 04:51:37 ID:2qZ+Dn1G
635 :
Name_Not_Found :2008/05/17(土) 05:01:39 ID:2mNU1GvT
636 :
Name_Not_Found :2008/05/17(土) 10:40:24 ID:T+Nhd5TV
現在表示がかかっているブラウザの top と left の位置を 取得したいのですができますか? IE6です。
( ゚д゚)
( Д ) ゚ ゚ (つд⊂)ゴシゴシ ( ゚д゚) ( ゚д゚ )
「できる」というのと「できない」というのは実は同じなんだ。
641 :
625 :2008/05/17(土) 15:05:02 ID:+faOYZsW
>>631 お返事ありがとうございます。
しかし、何度も search.cgi にアクセスするのは避けたいです。
loadメソッドは検索実行時にだけ実行して、loadクラスの中から
20件だけdispクラスに表示したいのです。srch関数には、
以下のように引数を渡したいです。
検索実行時に1ページを表示:srch("1", "ほげほげ")
2ページを表示:srch("2")
※要は、検索実行時に検索結果一覧を取得保持して、
20件表示をjavascriptで制御したいのです。
クラスやidが付いていない要素に新たにクラスやidを追加させることは出来ますか? 具体的には↓のような感じにしたいです。 <li><a href="#">test</a></li> → <li><a class="current">hoge</a></li> さらにその内容を document.getElementById('current').innerHTML = 'huga'; と変更させることはできますか? もしできればそのやり方をご教示ください。 よろしくお願いします。
>>641 入力データと出力データが分からないとちゃんとは答えられないな。
(というかそんな質問で誰かが答えられると期待しているのにびっくりだ)
まぁやり方として、楽そうなのは、
1. $(".load").html()で取得したデータをグローバル変数に格納する。
そのときに、扱いやすいデータ構造に変換する。(例えば、件数ごとの配列とか)
→この変換処理の内容が想像つきますか?
2. 第1引数で指定された数値に応じて、上記の構造からデータを取り出す
(1なら最初の20件、2なら21件目から40件までのデータ)
→これは出来そうですか?
3. 2で取りだしたデータから表示用に整形して、表示する。
→どう表示したいのですか?
>>642 出来るが、前提として、付与したい要素にアクセスする手段がなにかしらある必要がある。
<body><li><a href="#">test</a></li></body>
なら、document.body.firstChild.firstChild.id = "current";
とすれば、やりたいことができる。
ただ、currentを付与したい要素がどこにあるかを知っている必要があるし、
また場所が変更されないことが前提になってしまう。
これが問題があるのかないのかは、あなたの文章を見ただけでは判断が出来ない。
>>642 余談的な話だがそれは追加ではなくてアンカー属性の変更だろ。
たしかHTML的にその変更後のマークアップは不正か非推奨のはず。
それからクラスと書くのはよくない。プログラミングの場合デフ
ァクトでそれは「クラス」を連想させる(結果的に誤解を与える)。
>>645 少なくともHTML 4.01/XHTML 1.0ではhrefは省略可能なので不正ではないよ
非推奨というのも勉強不足なのか聞いたことがないな。仕様のどこに書いてある?
クラスは文脈で理解できる範囲だと思う
マークアップが不正なのは
>>644 だろ
言語的にクラスのないJavaScriptでクラス指向を連想するなら、まず自分の知能を疑え
>>646-647 645だが、雑駁な記憶で書いてしまったようだ。すまん。反省している。
排水の陣でひと言だけ援護してみると、リンクのないアンカーはウェブ
デザイン的には邪道だ。それはユーザーに誤解を与えるし世界中のあち
こちで要らぬクリックを誘発することになる。Uタグとの混同も問題だ。
<a name="label">ラベル</a>
>>642 は記入ミスなのではないだろうか ?
なぜなら href="#" となっているから.
これは <a>~</a>をボタン代わりに転用するときに良く用いられる記述.
(この使い方は個人的に邪道だと思っている)
>>642 は たぶん, 以下のように書きたかったのでは ないかな ? :
<li><a href="#" id="current">hoge</a></li>
しかし, 質問者には ( getElementById() を使わなければ という ) 先入観が入っていて
document.getElementById('current').innerHTML = 'huga';
などと言う記述が続く.
これでは誰でも幻惑されてしまう...
651 :
642 :2008/05/17(土) 23:13:25 ID:???
ごめんなさい。掲示した例が大きく間違っています。 × <li><a class="current">hoge</a></li> ○ <li><a href="#" class="current">hoge</a></li> でした; 何もクラス名が付いていないa要素に class="current"を追加する方法という趣旨の質問でした。 typoとか…俺アホス
>>651 何らかの方法で取得したidやクラス名を設定したいエレメントをelmとすると、
elm.id = 'current'; // idの場合
elm.className = 'current'; // クラス名の場合
ただclassNameの場合には、空白区切りで複数指定が可能(elm.className='foo bar'など)なので、
そのようなケースでは、単純に代入するだけでは駄目だけれど。
653 :
642 :2008/05/17(土) 23:32:56 ID:???
>>652 ありがとうございます。取得ができれば追加することはできるということですね。
いまさらですがひょっとしてこの要素は
取得する方法が無いのでしょうか
654 :
Name_Not_Found :2008/05/18(日) 01:15:13 ID:wvZc+6F1
addEventListenerでmousedownをイベント追加しているのですが、反応が鈍いのです。 というのも何回もかちかちマウスをおさなければ反応しません。 ただ、必ず一度目は反応します。すごく不思議な現象なのですが教えてください。 他にループさせたり、複雑な処理はおこなっていません。
↑ちなみにgreasemonkeyです。
getElementByIdを使わずfirstChildを使えば解決しました。 理由はわかりません。
つ Firebug
>>653 このスレッド的な回答は "FAQ A13 読め" となる.
本来これで十分なはずだけど, 蛇足:
homepage2.nifty.com/alter/samples/table_background2/exam.html
(質問とは無関係なようだが "こんなこともできます" というサンプル)
そのサンプルとやらの問題点が、まさに
>>542 からの流れだったんだがな。
>>658 そこまでして他人との接点が欲しいなら、
安いPCでも買って無料のMMORPGでもやったらどうかと本気で思うよ。
お仲間のニートも大量にいるようだし。
>>659 ここを覗いては いるけど流れまでは掴んでない.
>>660 お邪魔しました (ここは基本的に ROM 專)
(というか, 話題に ついていけない)
"安い PC" については現時点の PC OS の いずれにも不満なので,
(よく知らないけど製造元の御都合の塊のように思えてならない)
むしろ "debian" install を目標としてます. (しかし先に進めず)
思わず乱入しただけなので ROM 專 に戻りますだ.
662 :
Name_Not_Found :2008/05/18(日) 09:03:00 ID:HNQeYZGh
よく変数名に使われる「str」ってなんですか?
string
strength
666 :
625 :2008/05/18(日) 11:18:16 ID:???
>>643 お返事ありがとうございます。
しかしなぜか「1. $(".load").html()で取得したデータをグローバル変数に
格納する。」ができません。ただ、調べていた最中に知らなかったこと
(JSONとか)が出てきたので、根本的に構成を考え直したいと思います。
>>665 ハンガリアン記法云々では無いが、
ある程度共通認識として通用する名前なら、それを踏襲するのは悪い事じゃないけどね。
変数名として、オブジェクトならobjだとか、エレメントならel,elemなど。
んなら、hairetuだとかninzuuだとかmojietuがいいでない?
変数名が丁寧につけられたソースはそれがコメントの代役を果たしてくれて読みやすい 逆に自分のコードでもその辺を適当にしてたり無駄なコメントをゴテゴテ付けてたりすると後でちょっと泣く 書いてる最中は勢いがいいからそういうことを忘れやすいけど、長く保存するコードは特に気を付けたい、 というより、お願いだからまともな名前を付けてあげて><
ハンガリアンだとちょっと変数名長くなるよな。 変数名の長さは、JSファイルが大きくなることでのロード時間が延びることと 処理系によっては、もしかしたら、実行時間にも影響与えるかも。 なので、strXXじゃなくsXXにしてる。
それはないわ
ただの貧乏性だろw
contentEditableとかdesignModeを使用していない 自作のエディタの実装ってどれぐらいある?
すいません質問です。
下記の『妖怪大戦争』のサイトのようにenterから入ってフラッシュのページを固定画面で
出したいと思っています。
ttp://yokai-movie.com/index.html (妖怪大戦争)
調べてみると、
<script type="text/javascript">
function changesize(){
window.resizeTo(650,410);
}
window.onload=changesize;
window.onresize=changesize;
</script>
上記の記述でウィンドウサイズを固定できるようですが、ブラウザ上部分のボタンや
アドレスなどのバーの高さも含めてしまうめ、肝心のswfファイルがそれに合わせて
切れてしまいます。
上記以外で、よい方法がないでしょうか?
IEのメモリーリークのせいで、 無名関数やクロージャーが使いづらくなっている状況について、 JavaScript言語としても対策が打てるんじゃないかなと思うけど、 何かやってるか知ってる人いますか?
いまどき、resizeToが効くブラウザって少なくないですか。 IE6はOKだろうけど、タブブラウザが標準になってるからね。 効くようにするためにwindow.openしたら今度はポップアップブロックに引っ掛かるし。
IE7で以下のような結果が出る。これなんで? document.body == document //false document.body >= document //true document.body <= document //true
>>677 なんで評価が不思議な結果のかここに書いてみると、その途中で
ハッと気付くから説明してみなよ。悪いことは言わない。
679 :
674 :2008/05/18(日) 20:15:43 ID:???
今ドリームウェーバーをいじってたらビヘイビアの機能でswfを指定したらいけました。
失礼致しました。
>>676 確かに微妙だと思うんですがお願いされてしまったもので…。
>>678 む、ってことは、
>=とかの場合にはtoString変換がかかって比較されてたりするの?
>>680 残念ながら、SunSpiderのベンチって
>>670 に上がってるようなものは測定しないんだよな。
さっぱりわからん
>>681 a <= bとかa >= bはaとbがオブジェクトだったら
それをプリミティブ値に変換してから比較するので
document.body >= documentもdocument.body <= documentもtrueということは
IEのDOMオブジェクトはプリミティブ値が全部同じ値なんでしょう
valueOf()やtoString()を書き換えても比較の結果が変化しないようなので
他の所でプリミティブ値を算出しているんじゃないですかね
実用レベルの話をすれば、Dateの比較には重宝するということだ。 あと言うまでもなくStringの比較にも重宝する。 これらの利便性を維持しつつ、ゴタクを並べて整理されたのが、ECMAScript後付仕様ということだ。
687 :
Name_Not_Found :2008/05/19(月) 11:51:58 ID:jXVbhV0c
JavaScriptを勉強したいのである人に相談したところ、prototype.jsという ものをしっかりマスターしてくれということでした。それでやろうと思うの ですが、とほほに載っていないことがたくさん出てくるんですが新しい書き 方なのでしょうか。prototype.jsは最新のJavaScriptと思ってよいのでしょ うか。
>>687 大きく違う!
prototype.jsはAjaxライブラリ。
JavaScriptで凝ったことがしたい時に、ブラウザの差異などをAjaxライブラリが吸収して、
よりプログラミングしやすい環境を提供してくれるJavaScriptプログラムの集まり
>>687 ライブラリのおまじないに浸るのも悪くないけど、まったくの入門者ならまずは
>>1 の必読ガイドを熟読、
余裕があればECMAも読んで理解して使う。
ライブラリの使い方はソース読め。読めないうちはリファレンスでおまじない。
今世界中で流行っててアツイのはjQuery。
>>687 業務で使うというなら別だけど、
JavaScriptを勉強しようという人間にPrototype.jsをやれというのも妙な話だね。
利用者も多く他のFrameworkとの共存も考えられているJQueryか、
ソースが洗練されて読みやすいMootoolsを勧めるよ。
692 :
Name_Not_Found :2008/05/19(月) 15:39:17 ID:OckbCuCp
>>621 に付随した質問です。
最後の2行ですがなぜfirstchildにしたほうがいいのでしょう。
単純に速度面の問題からですか?
<script type="text/javascript"> <!-- function ck(form){ if(form.way.value<1.5){ form.money.value=500+'円'; } } //--> </script> </head> <body> <form name="form"> <p>距離を入力してください<br> <input type="text" name="way">(km) 料金:<input type="text" name="money"></p> <input type="button" name="check" value="料金チェック" onclick="ck(this.form)"> </form> 質問させて下さいm(_ _)m 距離を1km以下を入力すると500円と表示され、それ以降0.5km増える度に 100円が追加されるようにするにはどうしたらいいですか?
>>693 どうも疑問なのだが、1.2kmの場合は1kmが500円、それから
0.5km増えていないよね。だったら500円でいいの?
日本語で正確に仕様が記述できない奴にコードなんか書けないよ。
>>694 あ、1.5km以下が500円でそれ以降0.5km増える度に100円プラスして
いきたかったんです。文書の見直しをしてなくてすみませんです;
>>695 ほんっっっとにこいつは…
1.7kmの場合は1.5kmが500円で、その後0.2kmしか
増えていないから500円のままででいいのかボケ!
仕様を正確に日本語で書けるまでここに来ないで欲しい。
>>696 そういう仕様だというんだからそのままでいいんじゃないの。
つまり1.5kmを越えたら2.0kmまでは降ろしてもらえないタクシーと
いうことで。
>>693 function ck(form){
var fee = {'base':{'dist':1.5,'val':500},'adding':{'unit':0.5,'val':100}};
var sum = fee.base.val;
if ( form.way.value > fee.base.dist )
sum += Math.floor((form.way.value-fee.base.dist)/fee.adding.unit)*fee.adding.val;
form.money.value = sum+'円';
}
それと、
>>694 と
>>696 は、
一般常識を知らないか、日本語の読解力に欠陥があるアホなのでスルーでおk。
>>692 そうだね
あの場合firstChildが目的の要素であることが自明だから
文書全体からIDをもとに目的の要素を探すより効率が良い
>>698 親切にソースまで書いてくれてありがとうございます!
やりたっかたのはこれです!本当に助かりましたm(_ _)m
このソースを見て勉強します!
formの入力値が全角カナ・ひらがな・漢字以外が入っているか確認するJavaScriptを書いているのですが、なかなかうまくいきません。 if(str.match(/[^亜-煕あ-ゞァ-ヶ]+/){ ひらがなカナ漢字以外が入ってる処理 }else{ 入ってない処理 } という感じで処理を分けたんですが、「答え」という文字を入力してもif文が反応して困っています。 どのような原因が考えられるのでしょうか?
>>701 IMEパッド 文字一覧 unicode で範囲を調べなおせドアホ。
どうでもいいがおれならいちおう\uXXXX形式で書くがな。
あとしょうもないことだが1文字でもあったらという条件なら+は要らんだろボケ。
703 :
701 :2008/05/19(月) 22:46:12 ID:???
>>702 なるほど、調べなおしてみて判りました。
Shift-JISとUnicodeの並びが違うので漢字が網羅できていないのですね。
第二水準まであれば十分だと思って亜-煕としたのですが、Unicodeではそのような分別は無さそうですので、Unicodeの上から下まで網羅してしまいたいと思います。
ありがとうございました。
704 :
Name_Not_Found :2008/05/19(月) 22:50:08 ID:OckbCuCp
またまたgreasemonkey関係の質問で申し訳ないです。 greasemonkeyではページが読み込むごとに実行されますが、問題があります。 フレームページのときです。 フレームのメインページのURLを保持しつつ、HTMLの操作はフレームの、ウィンドウが大きいほうのページでやりたいと考えています。 location.hrefでそのページのURLは取得できますが、フレームの親のURLはなんらかの方法で取得できますか? どのようなアイデアが考えられますか? ご教授くださいませ。
ページ内のリンクをクリックしたら、そのクリックしたリンクのURLを アラートで表示しようとしているのですが、下のようにやってうまくいきません。 <script type="text/javascript"> <!-- //ページ構築後に設定 window.onload = function() { var anchors = document.getElementsByTagName("a"); //要素にonclickイベントをセットする for (var i = 0; i < anchors.length; i++) { var anchor = anchors[i]; var url = anchors[i].href; anchor.onclick = function() {alert(url)}; } }; // --> </script> 実行するとすべてのリンクに、一番最後のリンクのURLが表示されてしまいました。 何故なのでしょうか?
質問させていただきます。
当方HP内に<object>を使用し、メディアプレイヤーを貼り付けております。
以下はその<object>です。
<object id="MPlayer" width="450" height="350" vspace = 110
classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" CODEBASE="
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715 " standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject">
<param name="URL" value="" />
<param name="ShowControls" value="true" />
</object>
このようなオブジェクトを作成したのですが、スクロールをすると、
このオブジェクトが画面外に出てしまいます。
そこで、常にオブジェクトの位置を固定させる方法は無いものかと、
色々なサイトを見て回ったのですが、そのような情報はでてきませんでした。
上記のような<object> 〜 </object>を使用しない、通常の
<input type="Submit" name="TOUROKU" value="テスト" >
のようなものであれば、位置を固定させるclassを使うことはできるのですが、
<object> 〜 </object>では、このclassを使うこともできず困っております。
良い方法があれば、ご教授いただけないでしょうか
>>706 <input>
<object>
両方の実例を貼るかアップしろ
>>704 unsafeWindow.top.location.href とかなんとかでできそうなきがするが
>>705 ... = function (url) {return function () {alert(url);};}(url);
とすればできるが、
1. ドンピシャでメモリーリークパターン。
2. A要素オブジェクトの順番・数が変わったらパー。
という問題がある。
基本(というか俺が押し付けているだけの基本だが)に帰れ。
1. バブルするなら、アホ外人が俗に言うイベントデリゲーション。
2. バブルしないなら、HTMLのイベント属性。
>>709 の >A要素オブジェクトの順番・数が変わったらパー。
は間違い。変数 i じゃないな。
>>707 <script type="text/javascript" src="Hidiv.js"></script>
と設定をした状態で、
うまくいくほうは、(INPUTではありませんでした。スミマセン)
<DIV style="position:absolute;top:150;left:20;color:WHITE;font-size:13px;" class="divfixed:top"> 【日時】 </DIV>
です。
サンプルを下記に示します。
ttp://himajin.moo.jp/freejava/hidiv/hidiv.html このサイトの"縦方向に固定"というのが私がやりたいことです。
<object>のほうは、先ほどもかきましたが、
<object id="MPlayer" width="450" height="350" vspace = 110
classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" CODEBASE="
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715 " standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject">
<param name="URL" value="" />
<param name="ShowControls" value="true" />
</object>
となりますが、どこで設定をしたらよいのかがわからない状態です。
>>708 調べてみるともとからページに用意されている変数を参照できるものだとわかりました。
ただ、これをどのように利用すればよいかわかりません。
質問ばかりで申し訳ないですが教えてください。
>>705 横から質問なんだけど、最後のURLのリンクが出てしまうってなぜなの?
anchor.onclick = function() {alert(url)}
のfunctionが作られるのはonclickが実行された時ってこと?
>>714 window.onload()は1回しか実行されてないから、
そのローカル変数であるurlも1つしかないんだな。
クロージャで調べるとよろし。
716 :
705 :2008/05/20(火) 01:46:54 ID:???
>>713 に指摘してもらったthisでやったらいけました。
こんな感じで。
<script type="text/javascript">
<!--
//ページ構築後に設定
window.onload = function() {
var anchors = document.getElementsByTagName("a");
//要素にonclickイベントをセットする
for (var i = 0; i < anchors.length; i++) {
var anchor = anchors[i];
anchor.onclick = function() {alert(this.href)};
}
};
// -->
</script>
window.onload()は確かに1回しか呼ばれないんですが、関数の中でfor文をまわすことで
できないんでしょうか? 変数 i がいけないのか、よく分からないです。
変数をfunctionで包んでも値がコピーされるわけじゃないから。 スコープ クロージャ とかでグーグルしる
718 :
Name_Not_Found :2008/05/20(火) 02:12:42 ID:R251vqgJ
質問です。xp explorer6.0 highslideを入れたいのですが、 画像をクリックすると、 カーソルが砂時計になり、画像の上にloadingと出て、何も起こりません。 <html> <head><meta http-equiv="Content-Type" content="text/html; charset=Shift-js" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <link href="highslide/highslide.css" rel="stylesheet" type="text/css" media="screen"/> <script type="text/javascript" src="highslide/highslide.js"> hs.showCredits=false; hs.graphicsDir = "home.files/highslide/graphics/'; hs.outlineType = 'rounded-white'; </script></head> <body> <a href="b00.jpg" class="highslide" onclick="return hs.expand(this)" onkeypress="return hs.expand(this)"> <img src="b00s.jpg" border="1" id="00"></a> </BODY></HTML> 上記ソースで、パス以外で何か足りないもの間違えていることありましたら教えていただきたいですm(_ _)m
>>713 今更何を薦めているのかね。5年以上タイムスリップした気分だよ。
アホ外人が俗に言うイベントデリゲーションを使うべきだ。
currentTargetたるthisを使おうとするからメモリーリークパターンにはまる。
だいたい、リンクをロード時に総なめ?
しかもクリックして使われるのは1つだけと予想されるのに?
リンクなんて、当たり前のように100個1000個あるだろう。
ロード中を示すブラウザ右下のバーが消えないのは気持ちいいものではない。
黙って俺に従え。オマエラとは年季も実力も違いすぎる。
バブルするイベントタイプでは、アホ外人が俗に言うイベントデリゲーションを使え。
>>719 this はリークしねーよ
真ん中は同意
推めるならアホアホ言うなw
デリゲーション言うとアホなん?
しらんねん
>>719 残念ながらお馬鹿がアホな文章で正論を吐いても説得力に欠けるよ。
a. 旧来のタグ埋め込みなどのelem.onclick=function...形式。
b. イベントリスナ(addEventListener)を利用し、イベント対象となる個々のエレメントにそれぞれのイベントハンドラを設定する。
c. イベント対象となる複数のエレメントの親エレメントでイベントを監視する。
簡単に言えばc.がイベントデリゲーションと呼ばれる手法。
例えばメニュー(ul#menu)の項目(li)で、clickによりその直下の子エレメント(li>ul.subMenu)のstyle.displayを切り替える場合に、
b.では対象となる全てのliにli.addEventListener('click',function...)などとしなければならないが、
c.の場合にはul#menuだけにイベントリスナを設定し、
一つのイベントハンドラで全て処理するようにする。
Event Delegation
ttp://cherny.com/webdev/70/javascript-event-delegation-and-event-hanlders
724 :
Name_Not_Found :2008/05/20(火) 05:56:46 ID:YqQnDQ/Z
何いってるのか、わからん
そうかいな
イベントリスナとイベントハンドラの違いを語ってくれ
>>673 これ誰か知りませんか?
例えば、TinyMCEなどはexecCommandをばりばり使っています。そういうのは不要です。
「比較的」execCommandなどに頼らないものとして、YahooUIのeditorがあるのは知っています。
YahooUIのeditorに近いか、またはブラウザ依存の機能を比較的使用していないエディタとして他にご存じの方いますか?
>>685 プリミティブ値ってあんまり聞いたことないな。
よく分からないけど、
要はブラウザの中で何かの値で比較しているけど、その何かは不明で、
JSからでも設定したりすることは出来ないってことでおk?
>>726 イベントリスナはaddEventListenerのことで、
イベントハンドラはaddEventListenerの引数に渡す関数のことかな?
ただ、イベントリスナというと関数のことを指してることも多いよね。
同じjavascriptを使っているのに、自分のページではポップアップブロック表示が出てうまく動作しない、 違う人のページは開いてもポップアップブロックが出ないし、 正常に動作する。。。なんでですか??
JavaScript中・高レベルスレって欲しいと思いますか? でもこういうのって2chじゃ例外なく廃れるんだっけ。
>>731 IEのバージョンとセキュリティ設定&ポップアップブロック設定&インターネットゾーン確認
そのまんま、傾聴者と操作者でいいと思うが 俺の中のイメージでは 傾聴者 ⊃ 操作者
>>732 >JavaScript中・高レベルスレ
ム板のECMAスレでいいんじゃん?
なぜかwebprog板にもあるしな
>>732 このスレが初心者に優しくないスレ→中・高レベルスレ
なんだよね。それでも大したレベルじゃないと言われれば
そうだねという他ないけどね。そのおかげで64スレも続いて
いるとも言えるわけで。
737 :
Name_Not_Found :2008/05/20(火) 23:36:20 ID:7DaotzHY
>>730 イベントリスナー ・・・ addEventListener等
イベントハンドラ ・・・ on○○○(onclick,onfocus等)
多分HTMLに書き込むかDOM操作かの違いだと思うよ。
>>729 プリミティブ値はオブジェクトではない数値や文字列などのことです
IEの場合はそうみたいですね
ただDOMオブジェクトのようなオブジェクトのプリミティブ値への変換は
実装依存でも良いので、それはブラウザによって変わってくるでしょう
OperaやSafariなんかだと
DOMオブジェクトのvalueOf()やtoString()を書き換えることで通常のオブジェクトと同じように
a <= bやa >= bの結果を変えることが出来るようです
ついでに、element同士の==と===で動作が分かれるブラウザある?
関数式と関数定義の違いによってJavaScriptの処理時間が変わったりする? 関数式の方がスコープの保持と代入文にかかるコストがかかる分 ちょっと重くなるとおもってるんだけど、初期定義のときだけであって、 それ以外の関数呼び出しなどでは変わってこないと思ってるんだが、どうだろう。
EventListener実装オブジェクトとEventListener#handleEvent()かね。よぉわからん。
一般的に、実際にイベントを処理する関数などを、 イベントハンドラやイベントリスナーと呼ぶ。 なので、本来の用法ではaddEventListenerやonclickなどで登録する関数自体がイベントリスナーだけど、 エレメントとイベント(clickやmouseoverなど)とイベントを処理する関数を結びつける処理をイベントリスナーと呼び、 実際に処理する関数の事はイベントハンドラと呼んで区別する場合もあるね。
DOM規定では、Javaみたいに関数を直接オブジェクトとして扱えない言語のために、
イベントハンドラhandleEvent()をメソッドに持つオブジェクトをイベントリスナとしている。
イベント発生時にイベントリスナがhandleEvent()を呼び出す。
だがECMAScript系言語では関数をオブジェクトとして扱えるので、
addEventListener()に関数オブジェクトをそのまま渡せる。
なので、イベントリスナ=イベントハンドラと解釈してほぼ問題ない。
ちなみにGeckoは昔から、Safari、Operaは最近のバージョンから、
JavaのようにaddEventListener()にhandleEvent()を持つObjectを与えても動く。
この場合はObjectがイベントリスナ、handleEvent()がイベントハンドラということになる。
イベントハンドラ内のthisがノードではなくObjectを指すので、意外に使い勝手が良い。
DOM EventsをもとにしたXML Eventsでは、
observer要素とhandler要素を紐付けるものをlistener要素としている。
これは
>>743 の解釈に近い。
結局、仕様ですら用語がぐだぐだだから気にするな。
JavaScript の Array の要素数の取得方法がよくわかりません。 var ar = new Array(); ar["テスト"] = "aaaa0"; alert(ar.length); <- 0と表示される alert(ar["テスト"]); <- aaa0 が表示される 上記の場合は、要素数が1になるような気がするのですが 0になってしまいます。 なぜなのでしょうか? また、この場合に1を取得する方法はありますか? 動作環境はIE7になります。
配列が空だから0 1を取得する方法より設計を見直すのが先
全角は使わない方が・・・
リンクをクリックして、ファイルのダウンロードのダイアログが出る際に リンクのファイル名と異なるファイル名にすることは可能でしょうか 例えば、TEST.zip のリンクをクリックした際に ブラウザでダウンロードの確認ダイアログが出ますが、 TEST.zip でなく 『 ファイルを保存しますか? DATA.zip 』 と名前を変えて。ダウンロード確認ダイアログを出すような感じです よろしくお願い致します。
つ CGI
>>749 ありがとうございます、
やっぱり CGI 使わないと実現できないっぽいですね。。。
751 :
745 :2008/05/21(水) 09:12:51 ID:???
>>746 >>747 Cの stl にある map みたいな事ができないかなと思ったのですが、
Arrayではできないのでしょうか?
std::map<CString, CString> hoge;
for (std::map<CString, CString>::itrator it = hoge.begin(); it != hoge.end(); it++)
{
it->first;
it->second;
}
>>751 つ ハッシュ
列挙はfor/inで出来るし。
753 :
Name_Not_Found :2008/05/21(水) 13:53:18 ID:cyE7aUGz
greasemonkeyでパネルをdiv使って表示しています パネルの中にタグ書いてるんですがその内容が元ページのcssを反映してしまいデザインが統一されません。 パネルのなかだけ全てのどんなスタイルシートも無効にすることはできますか? 教えてください。
>>753 できません。iframeを使うか、すべてのCSSプロパティを自前で
指定し直すか。
755 :
Name_Not_Found :2008/05/21(水) 14:07:28 ID:cyE7aUGz
そうですか即レスありがとうございます ではdivのスタイルのbottomを0以外に設定すると表示されなくなるページがあるのですが これはどういったcssが考えられますか?
757 :
Name_Not_Found :2008/05/21(水) 14:38:39 ID:cyE7aUGz
そうでした 申し訳ありませんでした
初心者の横やりレスであってるかわからないですが、 divにidをつけて、cssはidごとに指定してやるやりかたではどうですか
>>751-752 map程度は組み込みでサポートしてる。
同じ処理をJSで書いたらこんな感じ。
var hoge = {}; //[]でも可。
for(var prop in hoge)
{
prop; //it->first;
hoge[prop]; //it->second;
}
になるかな。ただ、
>>634 みたいなことを注意する必要があると思う。
map::size()の代わりにlengthを使おうとしているなら、
Arrayも上記の例もそのような機能はない。
いちいちループまわして、個数数えるしかない。
それがいやなら、自作のハッシュクラスを作る必要がある
(事実prototype.jsは自作版がある。正直微妙だけど。)
質問させてください。
下記のようなHTMLで、メディアプレイヤーをHP内に埋め込みました。
<object id="MPlayer" width="450" height="350" vspace = 110
classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" CODEBASE="
http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715 " standby="Loading Microsoft Windows Media Player components..." type="application/x-oleobject">
<param name="URL" value="" />
<param name="ShowControls" value="true" />
</object>
この"MPlayer"のページ内の位置を、ボタンを押すことで、徐々に
下に下げていくようなjavascriptを作成したいのですが、
MPlayer.style.left=○○;
という記述をしても、動作してくれません。
objectの位置をjavascriptで指定してやることはできなのでしょうか。
ご存知の方がいらっしゃれば、ご教授くださいませんでしょうか。
>>760 CSSの問題。leftやtopはposition: absoluteじゃないと効かない。
var el = $("MPlayer");
el.style.position = "absolute";
count = 10;
setInterval(function(){ el.style.top = (count++) + "px"}, 100);
無神経に$を使う奴はECMA262の7.2を読んだことも、
それを前提にしたコンパイラとかドキュメント生成とかも
考えたことがないんだろうな
>>706 ,
>>760 はマルチ
$は省略記法みたいなもんだがな
>>761 回答ありがとうございます。試してみます。
>>762 確かにマルチなのですが、向こうの板ではスルーされてしまったので
こっちに書かせてもらいました。
本来であれば$を使わないほうが良いということなんですかね
>>761 もう一つご質問させていただいてもよろしいでしょうか
先ほどの質問の理由が、「画面をスクロールしても、メディアプレイヤーの
表示位置を変えないようにしたい」からです。
そこで、スクロールするごとに、少しずつメディアプレイヤーオブジェクトの
位置を下に下げていってやればよいかと思ったのですが、それだとカクカク
してしまいます。
検索をして調べたところ、
position: fixed;
を使用すればよいという情報はあったのですが、
el.style.position = "fixed";
とやっても効果はありませんでした。
なんとか良い方法はないものでしょうか
>>765 「fixed position」とかでぐぐったら、
IE6だとCSSは効かないけど、setExpresionかbehavior(*.htc)ならどうにかなるとあった。
試してないが。
>>762 ECMA262の7.2を読んだが何が問題なのかわからなかった。
参考までに教えてくれないか?
>>762 は7.6の間違いではないかとエスパーしてみる。
シーッww 誰でも勘付くことなんだから、そこはもうちょい引っ張れよw
770 :
Name_Not_Found :2008/05/22(木) 15:03:24 ID:sCQbTBD7
divの背景色をidを指定して変えたいのですが、 document.getElementById("aaa").style.backgroundColor = red; で変わりません。ちなみに、<div id='aaa'> </div> としています。 初心者の質問かもしれませんが、どうか教えてください。
>>770 その「red」という変数には何が入っているの?
もしかして「'red'」の間違いとか?
772 :
Name_Not_Found :2008/05/22(木) 15:41:45 ID:sCQbTBD7
すいません、書き間違えました。 document.getElementById("aaa").style.backgroundColor = 'red'; です。
773 :
Name_Not_Found :2008/05/22(木) 15:44:43 ID:sCQbTBD7
'red'にすることで、うまくいきました! ありがとうございます。 もうひとつ質問があるのですが、 "aaa"の部分を変数にしたいのですが、 document.getElementById(id).style.backgroundColor = 'red'; ではエラーになってしまいます。 初心者ですいません。どうか教えてください。よろしくお願いします。
774 :
Name_Not_Found :2008/05/22(木) 15:51:13 ID:sCQbTBD7
functionの中にあるからエラーになっている感じです。 functionの外でvar id=""としているのですが、 なぜなのでしょうか? alert(id);とすると、ちゃんとidは入っているようなのですが、 document.getElementById(id).style.backgroundColor = 'red'; とするとエラーになります。
>>773 3)初心者という言葉は危険なので使わない方がよい。
初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。
4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。
ただ「動きません」「エラーです」は何も情報がないため嫌われる。
エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。
ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!!
OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。
776 :
Name_Not_Found :2008/05/22(木) 15:51:50 ID:sCQbTBD7
idはfunctionの中で代入しています。
777 :
Name_Not_Found :2008/05/22(木) 16:09:02 ID:sCQbTBD7
function put(obj) { aaa=selid; obj.style.backgroundColor=putColor; selid=obj.id; document.getElementById(aaa).style.backgroundColor =normalColor; } 一度変数を別の変数に代入するとなぜかうまくいきました。これで、意図した内容は実現したのですが、エラーが出てしまいます。
778 :
Name_Not_Found :2008/05/22(木) 16:54:37 ID:sCQbTBD7
nullの時も実行してしまうのでエラーがでたようでした。 ifを使って回避するとうまくいきました。 ありがとうございました。
779 :
Name_Not_Found :2008/05/22(木) 17:30:09 ID:JvlMiVy4
よろしくお願いします。 親ウィンドウにボタンA、ボタンBがあり、 ボタンAまたはボタンBから子ウィンドウが呼び出されます。 このとき、子ウィンドウの方でどちらのボタンから呼び出されたかを 知りたいのですが、どうすればよいでしょうか?
>>779 子ウィンドウにhiddenのINPUTを作って親からそこに識別文字列を
送ってやる。それを子側で読み取る。
windowのプロパティでいいだろ
782 :
779 :2008/05/23(金) 12:44:28 ID:???
>>780 ,781
まだ試していませんが、ありがとうございます。
どちらが簡単か調査して、また来ます。
どちらが簡単か調査ってw
>>781 だよ。NN3でも確実にできていたわけだしw
NN3 wwwWWWWWW
785 :
779 :2008/05/23(金) 15:53:41 ID:???
>>783 そんなこともよく分かってない素人なんです。。
案外あっさり作れましたけど、もっと良い方法があれば教えてください。
<html><head>
<title>親</title>
<script language="JavaScript">
function subwin(elm){
var str = elm.id;
window.open('test_sub.html',str);
}
</script>
</head>
<body>
<input type="button" id="buttonA" name="buttonA" onclick="subwin(this)" value="ボタンA" >
<input type="button" id="buttonB" name="buttonB" onclick="subwin(this)" value="ボタンB">
</body></html>
(test_sub.html)
window.onload=function (){
alert(window.name);
}
>>785 window.nameで渡すとは、ポイントを押えているなw
ホストというかドメインが違っていても、確実に値を渡せるから。
787 :
785 :2008/05/23(金) 17:05:42 ID:???
>>786 いや、これ以外わからないからやってるだけなんですw
結果オーライなようでちょっと安心ですが、他の方法というのが気になります・・・
window.openはwindow.nameしか渡せませんよね?
open以外でも同じことをやれるということですか?
>>786 JavaScriptがドメインを超えられるとは初めて聞いた。いつから仕様変更に
なったの?
>>788 はあ?越えてないだろ。他ホスト(というかここではドメインというかそういうセグメント全てが無関係)の操作に関与していない。頭整理してこいボケ。
>>787 トホホへでも行って勉強してきたら?質問以前に単にモノが
分かってない希ガス。
>>789 >ドメインが違っていても、確実に値を渡せるから
>>791 値は渡せる。
しかし、その先で、name = ??? と書いてあればそれで終了だ。
頭整理してこい低脳。
ほんと、JS終わってるな。window.name の使途なんて、俺だけでも何度か書いたぞ、このスレで。
誰でも知ってる基本だろ。
うん。window.nameだけはドメイン超えて渡せるよ。
つか window までならおっけーなんだな 便利べんり
あれ、nameだけ?
ドメイン越えでちょっといたずらしてみっか
それよりコンストラクタを再定義してJSONを盗み(ry
ん?window.nameを利用すればデータを JavaScriptだけで受け渡し可能ってこと?
>>797 えーっと、それは、痛外人がほざく、自演前提の脆弱性なんだが、分かってるか馬鹿?
>>799 そのうちすぐ出来なくなるよ。ドメインの外まで許す必要は何もない。
それは一種の脆弱性だ。
802 :
Name_Not_Found :2008/05/23(金) 22:04:12 ID:gokaewxI
textareaを編集可能・編集不可能と切り替えたいのですが、 そういうライブラリがあれば教えて下さい 今はjqueryで、divとtextareaを置き換えてるのですが、 状態によって文字表示の具合が変わるのがいまいちです
>>801 最近わざわざ新設された
XDomainRequestとかpostMessageがなくなると言ってる? んなわけない。
>>804 もとから属性あったんですね
ありがとうございました
テキストボックスに漢字・かな・カナ・全角数字以外が入っているかチェックするスクリプトを作ったのですが、うまく動きません。 if(str.match(/[^一-龠ぁ-ヴァ-ヾ0-9]/)){ へんなの入ってるよー } という関数を作ったのですが、なぜかUnicodeの3095〜30a0にあるひらがなとカタカナの間にある文字にはmatch
807 :
806 :2008/05/24(土) 10:37:33 ID:t89PUxdH
途中送信してしまいました・・・以下続き matchが反応しません。どこか間違った指定をしているのでしょうか
809 :
806 :2008/05/24(土) 10:54:39 ID:???
>>808 一応そのレスを参考にIMEパッドのUnicode一覧から選択したんですが、うまくいかないのです。
追記:今見直してから気付きましたが、ぁ−ヴの部分はヴではなくう"(ひらがなのうに濁点)です。申し訳ないです…
>>809 マルチバイトをASCIIに置き換えてみてはどうか
あと真偽値が欲しいだけなら reg.test な
>>810 だからもう、治ってるだろ。
ぁ−ヴにしていたせいで、3095〜30a0もひっかかっちまったんだが、「う"」にすることで修正出来たと。
809==811
ようつべ見ようと思ったんですがJavaScriptがオフになってると言われて困ってます パソコンにはぜんぜん詳しくないのでどうすればいいからないのです 誰でもいいのでJavaScriptをオンにする方法を教えてくださいお願いします
>>813 このスレはそういうスレではない。そもそも制作板は
あんたの来るところではない。インターネット板へ行け。
>>801 かわいそうになるくらい理解力が低いなおまえw
817 :
Name_Not_Found :2008/05/24(土) 22:50:47 ID:wxX4+di8
フォームコントロール名と同じものをdomのidに設定しています フォームコントロールが配列になるとき、名前に[]が含まれますが、 domのidに[]が含まれるのは文法的に正しくないようです(tidyに注意される) domのidで、配列的なものを表現するには どうしたらいいのでしょうか?
>>817 何言ってんだかわかんないからソース出して。
[] を含めなきゃいい JavaScript となんの関連もない
iframe で表示しているページになる メソッドを呼び出したいと思っています。 決めうちで書いた場合に以下のように書いた場合は、OnCancel という命令を 呼ぶことができました。 window.parent.Iframe0.OnCancel(); これをループでまわして呼ぶようにしたいのですが、どのように記述すれば よいでしょうか?
DOM要素をドラッグ&ドロップする方法はいくつかあると思いますが、一般的なアルゴリズムというか、 基本的な考え方を教えてください
>>822 ググってソースみればよいのでは?
ソースみても分からない人間にアルゴリズムの説明をしても理解でき
るとは到底思えないし。
でっていう
基本的な考え方を文章で書くというのはなかなか難しい話だけど、 なんとかするとしたら、まず、誰かが「たたき台」を書かねばなるまい。 1.左ボタンを押したまま、マウス移動開始の瞬間に、 カーソルの下にある要素から「ドラッグ元」を特定。 「ドラッグ元」が移動可能だと判断したとき「ドラッグ開始」。 2.マウス移動中は必要があれば、マウスカーソルの形状を変えるなどの工夫をする。 3.左ボタンを離した時に、カーソルの下にある要素から「ドロップ先」を特定する。 「ドロップ先」がドロップ可能だと判断出来たときは、対応する動作をさせる。 ドロップ不可能だと判断した場合、ドロップしない。
で、それをコードで書くとどうなりますか? ってのが、次の質問かな?
831 :
820 :2008/05/25(日) 13:11:58 ID:???
>>821 複数のページに OnCancel() という 命令を実装し、
一度にまとめて呼び出したいとおもっています。
以下のように iframe の ID を arrayID という 変数に保持して
呼び出したいのですが、どのように記述すれば良いかわかりません。
for (var n = 0; n < arrayID; n++)
{
var id = arrayID[n];
/* ifarame の OnCancel() を呼び出す。*/
}
すみませんが、教えていただけませんか?
よろしくお願いします。
>>820 FAQ
>>3 のQ8/A8を100回読め。それで分からんのなら誰に
教わっても分からんと思うよ。つかFAQ読めない奴は来るな。
>>833 わからないなら黙っていればいいと思うよ。
まぁ、なんでもFAQに結び付けるのもどうかと思うな。
>>835 何いってんだ。FAQそのものだから言われてるに決まってるだろ。
>>836 どこがだよw
FAQ8はform部品のことを言ってるが、
>>831 はiframeのことだろ。
>>837 だからそうとしか思えない奴は教えても無駄だっての。
はい、以後スルーで。
いちおうサービスで。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><title>???</title>
<script type="text/javascript">
function test() {
for(var i = 0; i < 4; ++i) {
window.frames['f'+i].location.href = '
http://www.yahoo.com ';
}
}
</script>
</head><body>
<h1>Test</h1>
<button onclick="test()">Test</button><br>
<iframe name="f0" src="about:blank"></iframe>
<iframe name="f1" src="about:blank"></iframe>
<iframe name="f2" src="about:blank"></iframe>
<iframe name="f3" src="about:blank"></iframe>
</body></html>
つまり、
>>820 がうまくいくというなら、
window.parent[id].OnCancel();
でうまくいくだろう。
>>832 はそう思ってるということか。
>>831 for (var n = 0; n < arrayID; n++)
{
var id = arrayID[n];
/* ifarame の OnCancel() を呼び出す。*/
window.parent[id].OnCancel();
}
以前、メディアプレイヤーの埋め込みについて質問させていただいたものです。 メディアプレイヤーについては、 document.MPlayer.Controls.Play(); にて現在ボタンによる再生が可能な状態になっているのですが、 指定したURL+指定ポートを開くにはどのようにやったらよろしいのでしょうか。 というのは、メディアプレイヤーを起動した状態で「ctrl+u」を押して 入力する情報と同様の情報をJAVASCRIPTにて与えてやりたいと思って いるのですが、 document.MPlayer.URL= にて、同様の入力値を与えてみても、ポート番号の指定で引っかかっているのか、 正常に動作しません。 ポート番号の指定はできないものでしょうか。
843 :
822 :2008/05/25(日) 16:55:28 ID:???
>>828 遅くなりましたがレスありがとうございます
やはりmousemoveとmouseup時にインスタンス内の環境を監視・操作するのが普通なんですね
参考になりました
844 :
822 :2008/05/25(日) 16:56:29 ID:???
>>828 遅くなりましたがレスありがとうございます
やはりmousemoveとmouseup時にインスタンス内の環境を監視・操作するのが普通なんですね
参考になりました
846 :
Name_Not_Found :2008/05/25(日) 17:07:57 ID:V7gQvpl9
テキストエリアでホイールなどを使ってスクロールをする場合 中途半端に文字が見切れた位置ではなく数行分ごとにピッタリ合わせるには どうすればいいですか?
XMLHttpRequestでテキストファイルの中身を取得しているのですが、 文字コードが違うのか文字化けします。 どのようにすれば解決できますか?
848 :
828 :2008/05/25(日) 18:33:37 ID:???
>>843 「1」については、「ドラッグ元」特定がmousedownのタイミングで
「ドラッグ開始」がmousemoveのタイミングがよいかもしれない。
>インスタンス内の環境を監視・操作するのが普通
現状はどのライブラリでもそうしているハズ。
だれか、ブラウザ側がこれについて改善する対策を打とうとしているかどうかご存じですか?
>>846 ブラウザの設定とかではなかったと思うので、
1行の縦サイズを決めるor求めて、自前でスクロール制御をすればいいと思う。
>>849 サーバーからのレスポンスヘッダがどこにあるのかわかりません。
仕方ねえな。一度しか言わないぞ。
まず
>>6 を見ろ。そこにMSDN Libraryのリンクがあるな?飛べ。
「DHTML Object」という項目を見つけたか?飛べ。
そこにXMLHttpRequestがあるな?飛べ。
Methodを見てみろ。お望みのものがあるな?よかったよかった。
使い方が分からない?説明に飛べ。例文までばっちりだ。
もう一人でできるな?さよなら。
xmlhttp.setRequestHeader('Content-Type', 'text/html;charset=Shift_JIS'); とすると未定義のエラーとか言われるんですが・・・
854 :
Name_Not_Found :2008/05/25(日) 19:53:01 ID:V7gQvpl9
855 :
Name_Not_Found :2008/05/25(日) 19:53:02 ID:3sa/tweh
それ、投げる時のを設定しようとしてるぞw サーバが返却する応答に正しいContentTypeをつけてもらうようにしないと。 メソッド呼べばどうにかなる問題じゃない。
857 :
Name_Not_Found :2008/05/25(日) 19:55:07 ID:3sa/tweh
>>855 をただ置き換えるのではなくて、
「000024137」が毎回違って、
000024137の場合は、pandora000024137.jpg
に置き換えたいんです。
他の場合は、他のに置き換えたいんです。
000024137とかをpandora000024137.jpg とかに置き換える方法を教えてください。
数字はいつも違います。
お願いします。
858 :
Name_Not_Found :2008/05/25(日) 19:56:19 ID:3sa/tweh
>>855 はちなみに、greasemonkeyで使おうと思っています。
>>855 >>857 >>858 エロ張るなよ。まぁ、多分こんな感じでいけるだろ。
var a = document.getElementsByTagName("a");
for(var i = 0; i < a.length; i++){
var el = a[i];
el.href = el.href.replace(/index.php\?id=(\d+)/, "/img/pandora$1");
}
863 :
822 :2008/05/25(日) 20:35:15 ID:???
>>863 言いたいことはわかるがコテは関係ないだろw
ホストオブジェクト関係なく文字列操作だけすればこうなる。メソッド拡張は省略。 var replaceMyURI = function (getId) { var RFC3986 = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/; var PATH = '/img/pandora'; var E = '.jpg'; return function (href) { var ms = String.match(href, RFC3986); return typeof ms[7] == 'string' ? (ms[1] || '') + (ms[3] ||'') + PATH + getId(ms[7]) + E + (ms[8] || '') : ''; }; }( function (findId) { var P = /[&;]/; return function (q) { var m = Object(); return String.split(String.split(q, P).some(findId, m)) ? m.id : ''; }; }( function () { var D = '='; var N = 'id'; return function (param) { var name_value = String.split(param, D); if (name_value[0] == N) { this.id = name_value[1]; return true; } return false; }; }()));
PHPスレに書き込んだら、こちらのほうへ案内されたので、質問させてください。 情報を新しいウィンドウに渡すのは、できるようになったのですが。(JavaScript併用にて) そのウィンドウから値を戻す方法がわかりません。 <script> function openWindow(form){ form.target = window.open("about:blank", "win" + new Date().getTime() ).name; form.submit(); } </script> ---------略------------ <form method="POST" action="値の送り先.php" ENCTYPE="MULTIPART/FORM-DATA"> <input type="text" name="sendtext"> <input type="button" value="送る" onClick="openWindow(this.form)"> </form> ---------略------------ 上記のようなソースで新しいウィンドウを開く&情報渡しをしているのですが。 たとえばこの開かせる側のページに <input type="text" name="modori" value=""> という部分があったとして。 新しく開いた 値の送り先.php から、その部分に値を入れるにはどう書けば良いのでしょうか。 値の送り先.phpのフォームタグのAction部分に、既に開いているウィンドウを指定したいと思ったのですが どうにもやり方がわからないもので・・・。 フォームターゲットにwindow.openerを指定しても、また別のウィンドウが・・・。
accordion.jsをつかってみたんですが、デフォルトで一番上のアコーディオンが 開いた状態になっています。 最初に開いた状態になるのが何番目のアコーディオンかを指定する方法なんかは ネット上に情報がありましたが、サイトを開けた時に全部閉じた状態にする方法がわかりません たぶんこの辺あたりのところ↓で指定出来ると思うのですが、なんて書けばいいのか教えてください、おながいします jQuery('#list1a').accordion({ autoheight: false, header: '.head', navigation: true, animated: 'easeslide', speed: 'fast' });
>>866 ごめん、誘導先微妙に間違ったかも。一応自分が分かる範囲で。
値の送り先.php のレスポンスの onLoad か何かで、
windows.opener.フォーム名.modori.value = ほげほげ;
を呼び出すようにすれば良いと思う。
>>867 質問とは関係ないけどひとつ開いておかないとアクセシビリティが低下すると思うよ
>>868 それで出来ました。ありがとうございました。
871 :
809 :2008/05/26(月) 09:05:12 ID:o84vsy2j
遅くなってすいません
>>811 う゛に訂正して解決した訳ではなく、もともとぁ-う゛と指定してもひらがなカタカナの間が許可されてしまします。
訂正したのはソースをはりつける際に正しく書けなかったという意図です
すみません、質問させていただきます。 SELECTタグについて、 メニューを表示している状態とメニューを開いていない状態を JavaScriptで判断することは可能ですか?
874 :
809 :2008/05/26(月) 12:26:23 ID:o84vsy2j
自己解決しました ソースにう゛と表記してもHTMLに書き出す際にヴと変換されることが原因でした。 \uを使ってコード表記することで解決できました。 ありがとうございました
875 :
872 :2008/05/26(月) 15:42:00 ID:???
>>873 回答ありがとうございます。
やはりそうですか。それができれば楽なんですが。
では、少し質問を変えさせてもらいます。
どなたか、良い案があれば回答をお願いします。
@やりたいこと
通常、SELECTにフォーカスを当てて、マウスホイールを動かすと、データの内容が変わります。
それだと、ミスオペレーションを誘発してしまう (気づかないうちに値が変わってしまう。)
それを制御したい。
A対応1
一番簡単な方法として
onmousewheel="return false";
↑をSELECTタグに追加すれば制御できる。
が、この方法だと、メニューを開いた状態のときもマウスホイールが使えない。
それは不便。
B対応2
メニューを開いている状態の時はマウスホイールが使えて、
メニューを閉じている状態の時はマウスホイールが使えないようにする。
また、ある程度自動化し、FORM内のSELECTタグを検索し、制御するようにする。
※ソース参照
しかし、下記オペレーションで問題発生
1.プルダウンメニューを表示
2.スクロールバーを奇数回クリック
3.データを選択
4.マウスホイールを動かす。
スクロールバーをクリックしたときもイベントが発生してしまっている。
C質問
対応2を正しく動作させるのに何か良い案がありませんか?
876 :
872 :2008/05/26(月) 15:47:57 ID:???
ソース↓ window.attachEvent('onload', controllMouseWheel); function controllMouseWheel(){ var myForm = document.form1; //フォーム取得(form1のみ対応) var formLength = myForm.elements.length; for(var i = 0; i < formLength; i++){ //エレメントを一つずつ取得 var e = myForm.elements[i]; if(e.tagName == "SELECT"){ //SELECTタグを検索 e.mouseWheelFlg = "0"; //プルダウンメニュー判定用フラグを初期化 e.attachEvent('onmousewheel', mouseWheelWithCheck); //マウスホイール回転時にイベント関数を追加 e.attachEvent('onmousedown', onMouseDownForMouseWheel); //マウスクリック時にイベント関数を追加 e.attachEvent('onblur', clearMouseWheelFlg);//フォーカスアウト時にイベント関数を追加 } } } function mouseWheelWithCheck(){ if (event.srcElement.mouseWheelFlg == '0'){ return false; } } function clearMouseWheelFlg(){ event.srcElement.mouseWheelFlg = "0"; } function onMouseDownForMouseWheel(){ if (window.event.button == 1){ //左クリック判定 var e = event.srcElement; if (e.mouseWheelFlg == "0"){//プルダウンメニューが閉じている状態から開いたとき e.mouseWheelFlg = "1"; } else if (e.mouseWheelFlg == "1"){//プルダウンメニューが閉いている状態から閉じたとき e.mouseWheelFlg = "0"; } } }
>>875 selectを使わずに自前でselectのようなものを作るんでは。
検索すればライブラリとかありそうだと思うよ。
878 :
872 :2008/05/26(月) 16:54:08 ID:???
>>877 そうですね。
それも検討してはいますが、今あるSELECTをすべて変えるのは厳しいので。
できれば、最小限の修正に抑えたいです。
もし、対応2でいい方法がなければ、不便でも対応1にするつもりです。
>>878 別の方法として、readonlyなinput type="text"に現在の値を
入れておき、そこをクリックするとそれを一次的にselectに
取り替えて選択させる。選択が終わったらまたtextに戻して
クリックするまで変化しなくさせる。これなら間違ってホイール
を回して変えてしまう危険はなくなるよね。
880 :
872 :2008/05/26(月) 17:18:34 ID:???
>>879 返信ありがとうございます。
ですが、「選択が終わったら」っていうイベントをどう取得すれば良いかわかりません。
onchangeだと同じ値を選択した時が拾えないし、
onmousedownだとメニュー内のスクロールをクリックしたときにもイベントが発生してしまうし。
>>875 ブラウザ標準の動作をスクリプト側で弄るのはあまり行儀がよくない
本来の動作を期待する人を無視して自分が好きなUIに変えてしまうなんて自己満足以外の何者でもない
ちなみにその場合だとホイールイベントの直後に値が変化したかどうかで判定できる気がするが
それって本当に必要か?
882 :
872 :2008/05/26(月) 18:54:07 ID:???
>>881 >ブラウザ標準の動作をスクリプト側で弄るのはあまり行儀がよくない
>本来の動作を期待する人を無視して自分が好きなUIに変えてしまうなんて自己満足以外の何者でもない
まったく同意ではあるんですが、使う人がそうしたいと言うので・・・
使う人の自己満足を満たしてあげる必要があったりします。
>ちなみにその場合だとホイールイベントの直後に値が変化したかどうかで判定できる気がするが
その場合、onchangeイベントを別に使っていたら、onchangeイベントが動作してしまう気がします。
マウスホイールを動かしたときにはonchangeメソッドを停止しないといけないですよね?
さらに、メニューを開いてホイールを動作させて、上下キーを押下したときと区別がつかない気がします。
>>882 「ミスオペレーションの誘発を制御したい」なんて言うから、考えを改めてもらおうと思ったが
1人用のローカルアプリとかならもちろん例外だな
ホイールを回した瞬間からたとえば10ms後に値が変化していなければ開いて回したとわかる、と言ってるんだけど
適当に思いついただけだから無理かもね
>>883 レア系のイベントを試してみた。selectタグを開いたり閉じたり。IE7。
onafterupdate: 発動せず
oncontrolselect:発動せず
onpropertychange: onchangeと同じだった。
onselectstart: 発動せず。
う〜ん。ずばりのイベントはなさそうだから、イベントの組み合わせを考えるしかないと思う。
俺は自前のselectタグ作ったことあるが、
HTML構造に悩む→イベント設計に悩むで1週間はかかったお。(リリースは出来たけどね)
>>867 このライブラリってもしかしたら全部閉じた状態ってのがないんじゃないか?
というか今マニュアル見てみたが、なさそうだね。
886 :
811 :2008/05/26(月) 23:58:35 ID:???
>>874 おうよ。
結局、普通にひらがなに使う濁点をはじいてる理由とか
「う゛」はSHIFT-JISコードにないひらがなを含めている理由とか君のコードはさっぱりだよw
正規表現を楽したいのは分かるが。。
887 :
761 :2008/05/27(火) 00:25:31 ID:???
>>842 Port:80ならうまくいったなぁ。それ以外のポート番号だとうまくいかないの?
ぶっちゃけ、80以外の動画のURL探す方が疲れるよ。
>>884 首突っ込むならせめてonmousewheelくらい知っとけ
うーん、mousewheelって上の方で話題になっててダメだっていう話じゃなかったか?
var word = 'あい(うえお)かきく'; var hit = word.match(/\(.+?\)/g); word = word.replace(/\(.+?\)/g,''); var result = word+hit; //あいかきく(うえお) これと同じように、対象の文字列から括弧を後ろに移動するスマートな方法ありますか?
普通に正規表現を使った置換でいいだろ。
>>1 のCore JavaScriptガイドにも単語の入れ替えとか例が載ってるし。
>>893 >>893 というか
>>875 を実施するにあたって一番欲しいイベントは、
>>872 のものだと思っていて、
>>873 さんの言うように、
本当にそのようなイベントがないかどうか試してたんだよ。
後、onreadystatechangeも試したけど、
>>872 の状態を通知するものではないことを確認したよ。
>>894 だ か ら ホイールイベント時に値を拾ってその 10ms 後 の 値 と 比べろっつってんだよ
どこをどう勘違いしたら
>>884 やらreadystatechangeが出てくるのか理解に苦しむね
・メニューは閉じた状態でフォーカスをあてて回転させるとすぐに値が変化する
・開いた状態で回転させてもメニューを閉じるまで値は変化しない
あ、もちろん値が変化していたらもとに戻すってことだけど なんでonchangeのwheelDeltaじゃ駄目なんだ?
変数に値を入れる時、ファイルのパスに「\」は必須なんだけど 毎回毎回\\でエスケープしないといけないのが面倒すぎる \をそのまま変数に代入する方法教えてくれ 他の言語では hoge=@"値段は100\です" でそのまま変数に代入される機能があったんだが、jsにはそういうの無いの?
C#ですねわかります!
902 :
Name_Not_Found :2008/05/27(火) 17:22:26 ID:35uRsxKS
テキストエリアにある文章をtextfieldにあるワードで置換したいのですが そのワードが\tの場合、文字として挿入されてしまいます。 ちゃんとインデントできる方法はありませんか?
904 :
Name_Not_Found :2008/05/27(火) 18:39:33 ID:35uRsxKS
905 :
Name_Not_Found :2008/05/27(火) 20:50:04 ID:35uRsxKS
やってみましたが、str.replace(/a/ig, "\t")とやるとうまくいくのですが str.replace(/a/ig, x)としてxにtextfieldの「\t」という値を代入すると 文字になってしまいます。どうしたらいいでしょうか
eval()するとかしろよカス
eval()とか笑える
他に方法がないので馬鹿が卑屈に笑うだけだわな。
evalは初心者にはあまり知られてないから笑うことはよくあるよ。 そのうちevalの凄さをしることになるさ
自分でメタキャラクタの判定をする方法もあるけど、めんどいわな。
911 :
Name_Not_Found :2008/05/28(水) 00:56:37 ID:DEGDT4jH
evalについて少し調べてみます。どうもでした
馬鹿なことするなよ、textfieldから持って来た文字列をそのまま eval()するだって、気が狂ってるだろ。たとえば文字列aが変数の値(その 変数がなければundefinedとかエラー)になって正しいってのか? まずtextfieldのvalueに対してreplaceで「\t」をタブ文字に 置換してそれからこれまで通りにやればよい。何も考えずに eval()する馬鹿にだけはなるな。
str = str.replace(/\t/g, "\t") ってことか。
914 :
Name_Not_Found :2008/05/28(水) 02:35:48 ID:sEEkV7l5
質問いいですか?
915 :
Name_Not_Found :2008/05/28(水) 02:38:12 ID:sEEkV7l5
ランダムに数字を6個取得し、それを降順で 表示する。できる人いないかい?
ノシ
918 :
Name_Not_Found :2008/05/28(水) 08:22:29 ID:llbYhjsA
>>915 その数字というのは1桁?多数桁?0を含む?含まない?
重複はある?ない?いい加減な仕様ではプログラムなんか
書けないぞ。
その数字というのは正の整数?それともマイナスも可?小数点は? 分数表現はあるの?10進数だけ?いい加減な仕様ではプログラムは 書けないみたいよ。
そして「どこから」取得するのか?乱数であるなら、 どのような分布でどのような値域の乱数?
正規表現のパターンに変数を使う事は出来ますか 出来るのなら記述の仕方を教えてください
>>921 new RegExp(文字列) で正規表現を実行時に組み立てることが
できる。この文字列を組み立てる時に変数の値など組み込めば
いいんでないの。
>>915 学校の課題か何かのような気がするので答えるのも微妙だが、
10から100までのランダム。
var range = {min:10, max:100};
var dataAry = [];
for ( var n = 0; n < 6; n++ )
dataAry[n] = Math.floor(Math.random()*(range.max-range.min+1) + range.min);
dataAry.sort( function(a,b){return(a>=b?1:-1)} );
dataAry.reverse();
alert( dataAry );
>>906 いつものテンプレ煽りしか出来ない屑だろうけど、
さすがにここまで馬鹿だと放射性廃棄物並に有害だな。
どっちかというと次はテンプレにeval()は使うなと入れる べきじゃないかね? Qx. eval()を使って文字列を数値に変換してはいけないのですか? Ax. eval()は引数をプログラムとして即実行するため危険です。絶対に 使わない方がよい(数値にするならparseInt()やparseFloat()をどうぞ)。
eval()は悪くないよ。使う人間が悪いんだ。
()笑
視野が狭いというか、知識が浅いというか。
ちょっと質問させて下さい。 document.style.textDecoration = 'underline'; ↑こういったコードで textDecorationの部分を変数で指定したいのですが、無理でしょうか? evalを使えば、こんな感じでできるのですがevalを使わない方法は、無いかな? eval('BaseID.style.' + TargetName + ' = TargetValue;');
931 :
Name_Not_Found :2008/05/28(水) 19:07:04 ID:ibIipFrZ
>>929 evalで全然無問題でしょ。なぜ悪いのか説明できる?
それからでも遅くない。
>>931 929 だけ見て eval() の引数が安全だって保証できるわけ?
934 :
931 :2008/05/28(水) 19:16:14 ID:???
>>933 だ・か・ら、なぜ悪いのか説明できる?と書いているわけだが・・・
できるならあんたからもいいが。なんで?
え? あれ? 日本語読めない人だった?
質問なんですが、 jscriptにも複数行に渡ってマッチさせる正規表現みたいなの無いんでしょうか? 『RegexOptions Singleline』こんな感じのオプションがあるといいんですが・・・ [\s\S]等いろいろ試したんだけどうまくいかないのでどなたか教えて下さい。
937 :
Name_Not_Found :2008/05/28(水) 19:40:55 ID:DEGDT4jH
>>912-913 tf = tf.replace(/\\t/g, "\t")でうまくいきました。
遅くなりましたがありがとうございました
938 :
Name_Not_Found :2008/05/28(水) 19:48:59 ID:u6QkCZs4
IE以外のブラウザは気にしてません。 <input type="checkbox"id="xxx" name="1" value="0" onclick="clickLeft()" oncontextmenu="clickRight()"> <label for="xxx"> とするとlabel内で左クリックは拾えますが右クリックが拾えません いちいちlabelを外側から<div oncontextmenu>で括るしかないんですかね?
どこから突っ込めばいいのやら
>>934 TargetNameに
font = "serif"; location.href = "
http://www.yahoo.com "; x
という文字列が入っているとどういう動作になるかな。
ま、ページ遷移くらいなら大したことはないが、要するに
コードをどうにでも壊されてしまうということだね。
>>929 BaseID.style[TargetName] = ...
この方が上記のようなトラブルが起こり得ないしもちろん速いし
メンテナンス性もいいだろ。
>>936 テンプレの
>>1 にあるJavaScript 1.5 Guideを見るといいよ。
つか見れない奴はここに来ないで欲しいんだけどね。
942 :
Name_Not_Found :2008/05/28(水) 22:16:42 ID:DaPKg26i
見られない、だな。JavaScriptと同じく日本語は正しく使って欲しい。
キター
>>940 >>931 が何でムキになってるかよくわからないし、
この場合そうやって配列使って書くのが普通だと思うのだけど、
一つ横から質問してよい?
> TargetNameに
> font = "serif"; location.href = "
http://www.yahoo.com "; x
こうやって操作するのは誰を想定しているの?
見ているユーザがテキストフィールドに入れたとしても
自分の見ているページに影響するだけだと思うのだけど、そういう意味であってる?
もしテキストフィールドがないページでeval使ってるなら平気?
ページに文字列埋め込んであって、それを実行しないといけないからeval使ってるんだけど、
レス見て心配になった
>>940 コードをどうとでも壊されるてwww
壊す主体がスクリプト作者なら、そんな面倒はやらず、ダイレクトに書くわな。
壊す主体が閲覧者なら、勝手にやっとけっつうだけのこと。
もうねえ、こういう自作自演似非脆弱性指摘は、痛い外人だけにやらせとけってw
>>945 そんな考え方は俺のところじゃ通用しないな。
>>938 labelにforをつけても、その先のイベントは拾ってくれない。
おっしゃる通り、くくったりするしかない。
>>940 evalだとどうもコードが見難くなって微妙に悩んでましたが解決しました。
ありがとうございました。
>>936 念のため、/XX/gimみたいにmオプション付けてみて。
つけなくても、こっちでは[\s\S]でうまくいったけどな。
ほかの案なら[.\n]とかダメ?
どっかから値を引っ張ってくるなら 例えば action を変更して違うサイトへ POST したりはできるよな 発想に貧困な自分なんかは それがどういった意味を持つかはよくわからないが たとえクライアントサイドであっても 入力されたデータを信用してはいけないってのは 基本だと思う
次スレは975超えたら。テンプレにeval()のを入れていいかどうか?
テストで40℃のお湯と60℃のお湯を同じ量混ぜたら100℃のお湯になるって答えたら×になったんだけど何で?
40ccのお湯と60ccのお湯を同じ量…すでに量が違うじゃんかよ!
はじめまして。
プルダウンから選択してフレーム内に表示させるものをつくりました。
そして、プルダウンが1つだけならちゃんと動作しましたが…
2つになるとなぜか飛びません。
http://home.netyou.jp/55/apica/frame.html に見本をアップしておきます。
1つめのプルダウンだけならちゃんと右に結果が表示されるので…
どこかスクリプトのミスだと思うのですが。
Googleで「プルダウン フレーム 複数」で検索したのですが、
どこが悪いのかわかりませんでした。
ブラウザはIE7.0とFirefox2.0、OSはWinXPです。
お手数ですがよろしくお願いいたします。
name="flink" が二つあるな
957 :
954 :2008/05/29(木) 03:02:44 ID:???
>>955 さま
あ、そういうことだったんですね。
気がつかなくて???状態だったので助かりました。
どうもありがとうございました。
>>945 のように暇潰しでJavaScriptをやっているなら良いかもしれないが、
今時フールプルーフを考慮しないサイト(に限らず各種サービス)は有り得ないね。
だからなぜ eval = フールプルーフ無視 という短絡思考なのか、昔のJSがまだ尾を引いているのかな 扱い方さえ誤らなければ非常に有用で使いどころも少なくないのに
さすが趣味の人は違うなあ
マウスドラッグでの選択範囲について質問です。 文字列の選択した範囲を変更するコードを書いているのですが、 範囲を選択した後メニューをクリックすると選択範囲が解除されてしまします。 ForefoxとSafariでは解除されずに上手くいくのですが、IEで選択範囲を そのまま固定する方法ってありませんか?
え? あれ? 日本語読めない人だった?
>>961 メニューってのはメニューバーのメニュー?
それともコンテキストメニュー?Selectタグのプルダウンメニュー?
964 :
961 :2008/05/29(木) 05:04:45 ID:???
説明が足りませんでした。申し訳ない。 プルダウンメニューなのですが、Selectタグの物ではなく HTMLエレメントで作ったプルダウンメニューです。 プルダウンさせる時のクリックで選択範囲が解除されてしまいます。 おとなしくSelectタグを使えって話なんですが。。 何かいい方法をご存知ないでしょうか。
>>964 じゃぁ、プルダウンメニュークリック時に選択範囲を復活させるしかない気がしてる。
return falseとかでデフォルト動作を止める方法でもうまくいくかもしれない。
復活させる場合のコードだけ提供。以下がclickイベントハンドラ内での処理。
var sRng = document.selection.createRange();
setTimeout(function(){ sRng.select(); }, 1); //選択範囲を戻す。
966 :
961 :2008/05/29(木) 05:34:18 ID:???
選択範囲を復活させる方法でいけそうです。ありがとうございます。
ここはeval()推奨派に「eval()があったらスマートにできる」 場面を挙げてもらって本当にそれが良い方法なのか検討しようぜ。
JSON通信時に受信データをオブジェクトに変換するときにeval使う。
>>967 JavaScriptでJavaScript実装はもちろん、Lispとかpythonを作る場合とか
IE4,5向けにFunction.prototype.apply作る場合とかで、eval使えるぞ。
>>968 それは絶対やっちゃいけないと思うけどな。無知な人は
それ勧めているけど「セキュリティ上危険だからJSON.parse
などを通す」というのが常識化しつつあると思うよ。
>>969 そんなの実装してるとは言えない手抜きでしょ。普通に
構文解析して中間形式にしてから実行する方が安全だし高速。
そもそもふつーのWeb制作者は言語を実装なんかしないってば。
Web制作者が使うもっとふつーの用途っていうのはないの?
この流れって「eval()でやるといいよ」回答しただけの回答者を何が 気に入らないのか糞味噌に罵倒したところから始まってるよね。 そのレヴェルでしょ。eval()に無知なヤシは宗教化しているだけ。
俺としては、eval()でやるのって何か最終手段って感じがするわけで、できることならevalではない正当な方法で記述したいというだけなんだけどな。
973 :
944 :2008/05/29(木) 10:07:24 ID:???
僕の場合だけど、下のような感じでeval使ってます 前提は<a><img></a>となってて、 <a>のリンクのパラメータにURLエンコードが必要で、でもサーバ側はいじれない。 仕方なく href="javascript:〜" ってやってるのだけど、これだと、中クリックが効かない なのでimgのonloadでaのhrefをevalで実行したものをhrefに入れ直してる。 「そもそもhref="javascript:〜"とかいつの時代だよ」って話もあるかもだけど、 URLエンコード付きパラメータ使うとなると仕方なくてそうしているのでそこは勘弁して
というかevalの危険性なんて把握してるのが当たり前で、その上であえて使う場面も無いことはないのに 「eval」と聞いただけで鬼の首でも取ったかのように騒ぐ奴らが本当に面倒くさい。
いや、どう見ても使わなくてもいいとこにevalとか言ってるんで
どうかなと思うだけで、
>>973 なんかはわりとなるほどと思った。
そういう点では
>>972 に賛成の気分。とりあえずテンプレには
まだ入れないよね、これでもう975になるし…
何と言うかevalに関しては両極端過ぎるね。
>>925 の言うように"絶対に使わない方良い"ものでは決して無く、
必要とされる場面(それほど多くは無いが)で使えば有用な機能。
が、ユーザー入力のような任意の文字列にevalを使うなどは論外中の論外。
それをユーザーの自己責任だからいいんじゃね?派(
>>945 )や、
そもそもフールプルーフを知らない派(
>>959 )のようなアレな人間が擁護するから不要な混乱を招く。
>>976 乙
FAQの文案を直してみた。 Qx. eval()を使って入力文字列を数値に変換してはいけないのですか? Ax. eval()をユーザ入力のような任意文字列に使用するのは危険です。 変換はparseFloat()やparseInt()で(真にevalが必要なケースはごく少数)。
>>978 ま、マジで*ごく少数*なら、むしろ、これとこれ以外は使うな、と書いた
方が親切だね。つまりあっても一つか二つのケースってことでしょ。
>>977 > ユーザーの自己責任だからいいんじゃね?派(
>>945 )
> フールプルーフを知らない派(
>>959 )
文盲お疲れ様です
>>978 その場合evalを引き合いに出す必要は無い罠
Qx. 文字列を数値に変換したいのですが
Ax. parseFloat('123.456')やparseInt('879')を使用します
evalの議論秋田!
Ajaxでも静岡?
普通のJavaScriptの話し奈良いいよ
次スレ
>>8 に感動。Prototype.js とちゃんとCS意識が高い表記。
信頼性とか信憑性とかはこういう地道な細部に表れるものだね。
>>987 そのかわりjQueryのJが大文字になっている。
というかこのスレの
>>12 の時点で既に間違っていたけど。
しかし日本語でおkというより、酔っ払い乙と言いたくなるような文章だね。
え・・?
993 :
987 :2008/05/29(木) 23:59:03 ID:???
感動とか撤回とか、あなたの感想なんて誰も聞いてません 心の中でやってください
ume
ume
ume
ume
1000 なら JavaScript 最高!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。