+ JavaScript の質問用スレッド vol.88 +
1 :
Name_Not_Found :
2011/06/21(火) 22:53:08.42 ID:EPesJzv5 JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4 のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 質問にならない投稿はご遠慮ください。(煽り、コード制作依頼など)
(2) ユーザの迷惑になるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) メール欄は空欄にすることを推奨します。(質問者を騙って回答者を煽る迷惑な人がいるようです)
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は
http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。質問テンプレートを活用してみてください。
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(*1)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/ (*1) Windows ならコピット
http://www.umechando.com/software/ を利用すると簡単にコピーできます。
勝手にテンプレ変えて何がしたいんだろう?
なぜにPHPが関連スレ?
削除依頼出すべきじゃね?
てst
立て直しかな?誰か頼む
ごめん俺も駄目だった
誰か立てるなら立てて
■主要FAQ (全部は
http://fiddle.jshell.net/vSqKr/24/show/ )
Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
Q2. document.write()でページ内容を追加したいのですが…
A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A4. 「document.forms.myform.elements[変数名].value」でどぞ。
JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
IEでは要素オブジェクトのプロパティcurrentStyleを使う。
Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
「"...this..."」とか「function(){...this...}」ではうまく行きません。
A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
「function(x){return function(){...x...};}(this)」
Q8. input type="file"の値を設定(参照)できないのですが…
A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
LVが足りないとかで立てられなかった
俺も
今日あたりレベルが10になるが重複スレを建てるべきか悩むので俺はパスさせてもらうぜ・・・
恨むなら
>>1 をうらんでね
今テンプレ論議をしておくべきじゃないんですかね。勝手に改変した
人は勝手に改変したのであって、合意あってしたことではないという
ことを確認しておけば次戻せるでしょ。で。洩れの理解では
>>1 → FAQ
>>11 → 関連
>>2 (
>>3 は合意なし) →
>>4 これでFA?
削除依頼だしても削除されないと思うしそのまま利用すべきじゃないんかね。 テンプレに関しては次建てる時にって感じで。
よくあるjqueryのイメージスライダー、例えばjCarousel
http://sorgalla.com/projects/jcarousel/examples/static_simple.html とかは、みんな<li>要素で動作する。
インライン要素で動くスクリプトってないのかな。↓みたいなhtmlで動くやつ。
<p id="slider_trigger">
<span><img src="image1" /></span>
<span><img src="image2" /></span>
<span><img src="image3" /></span>
<span><img src="image4" /></span>
</p>
jCarouselを改造したら、IE6で動かなくなったぜ。
関連スレにネトゲとか削除だろjk
忍者じゃ!忍者のしわざじゃ!
20 :
17 :2011/06/22(水) 13:25:44.58 ID:???
解決したぜ。スレ汚しスマンのう。
解決したら回答書いてけ厨が出現しちゃうぞ
書いてけ!書いてけ!さっさと書いてけ!
質問する以上は貢献する気持ちも持とうぜ
偽者の可能性もあるし、検索に引っかかった場合のことを考えれば
ID出してない以上、そういうリスクもあるんだから気にスンナ
26 :
17 :2011/06/22(水) 16:02:44.30 ID:???
マナー違反だったか。すまんのう。 解決というと恥ずかしいんだが、該当する.js内のトリガになっとるタグを置き換えただけだ。 <ul> → <p> <li> → <span> これだけ。 元のサンプルは<ul>の幅をpx固定していたから、これを可変幅にしたくて css内のwidthの記述を削除したらIE6でエラー(スライドしない)が出たってワケ。 じゃあと思って<ul>の幅を%指定にするとスライド幅がおかしくなったから、 javascriptによって挿入される<div>(<ul>のコンテナ的役割)の幅を指定したら上手くいった。 完璧じゃないけどな。 ●画像 ●画像 ●画像 ●画像 ●画像 ってのがダサすぎて嫌だったんだよ。まあ自己満足だよね。
alert(1);で表示されるウィンドウにCSSを適用する方法ってありませんか?
これはまた難解な・・・
ああ、わかった。 答えはshowModalDialogだな。
alertに独自関数を突っ込めばあるいは…
アラート風のものを自分でこしらえるんではだめなのか?
<alert style="border:1px solid #000">
擬似ダイアログ出せるライブラリがどっかにあるだろう
<div role="alertdialog"></div>
Web上の同階層や下階層にある指定ファイルの有無をJavaScriptで取得することはできますか?
xhrのステータス
javascriptの勉強をするときはMDCだけ見ておけばIE、Operan,safari,Chromeにも対応できますか?
MDCはみないことにします ありがとうございました
MDCとMSDN見とけばだいたいおk
41 :
Name_Not_Found :2011/06/23(木) 21:51:10.93 ID:gzTWqaCX
関数の引数が特定の型を要求する場合 関数内で引数の型をチェックしたり型変換を試みたりするコードを入れておくものですか?どう書けばいいですか?
>>40 それ見ててもsafariには通用しないんじゃ
>>37 ,39
何でそうなんのかな
ここだけを見ればいいページはないから君の論理だと見るところがなくなる
ECMAScriptとDOMだけを見ろといってそれらを実装していないブラウザ(主にIE)は他のページも見なきゃいけないでしょ?
44 :
Name_Not_Found :2011/06/24(金) 00:49:37.23 ID:5ng63hwS
XHRのリクエストでXMLを受け取るのですが、一部のブラウザ(safari/opera)でキャッシュできません。 レスポンスにはキャッシュ関連のヘッダを追加していて(Expires/Cache-Control) その他の主なブラウザではキャッシュされます。 リソースのURLに日本語(URLエンコード)が含まれているのでその辺を疑ってるのですが 特定できずにいます。何か原因は考えられますか? ※ブラウザのキャッシュは有効になっています
原因:コードを晒さないこと
そういやここ使うってことでいいのか?
>>41 ケースバイケースではあるけど、色んなとこから呼び出されるもの(ユーティリティ関数とか)は割としっかりやるかな。
プライベートメソッドとか呼び出す箇所が少ないものは省略することも多い。
引数の型チェックに引っかかったらそのままリターンするか例外を投げるかも大事。
自分で投げなくてもブラウザが投げて処理は停止するけど、自分で適切な例外を投げた方がデバッグしやすい。
>>46 立てられる人がいないから仕方なく使っている状況
立てられる人がいるならそっちに移ると思うが
>>46 >>49 重複スレ争いとか削除依頼合戦とかうんざりなんで、この1スレの
間は皆で勝手なことした奴を呪いながら進行するということで
いかが。おい、聞いてるか
>>1 。
まあ、FAQを指したければ
>>11 にあるということではあるんで。
>>41 型変換で対応することが多いかな
大体は似たようなECMAのメソッドに合わせてる
まぁ速攻で流せばいいよ 元々流れ早いしさらっと使って次で問題ない というわけで我慢しようず
後ろから4文字削除したいのですが 文字列の文字数をlengthで取り出す ↓ その数-4する ↓ 0番目からそのー4した部分まで文字列を取り出す とやってるんですが、どーも効率が悪い気がするんですが他にaiueo...wをaiueoにする方法とかないでしょうか?
str.slice(0,-4)
おまえらって簡単な質問には答えるのにちょっと難しいとコード作成依頼乙とか言うよな
難しいんじゃなくてめんどくさいケースが多い
こんな限られたスペースで実行確認&解説なんかやってられるか
動作する(問題が起こる)最小のサンプルコードが貼られていると
多少テンプレからはずれていても回答が得られやすいと思う
それでもサンプルコードをベースに加工するだけでは済まないくらい手を加えないといけないほど不十分な場合はスルーされやすい
理由はたぶん
>>57
私はそれについての素晴らしい回答を発見したが、余白が足りない
JavaScriptしかサンプルが貼られてない →HTMLを想像して書かなきゃならない →HTMLを想像で書いたら再現しない →すいません、実際のコードは〜です →以下ループ こういうのがよくあるから敬遠しがち サンプルコードが一式揃っていれば検証する気にもなるんだけどね あとブラウザ書かれてなくて主要ブラウザ全てをこっちに確認させるのとか 質問者がめんどくさいのはわかるが、こっちに面倒を押し付けられても困る
for(i=0;i<1000000;i++){ str = 'aiueo...w'; //Firefox4, IE8 //str = str.substring(0,str.length-4);//70ms, 1800ms //str = str.substr(0,str.length-4); //70ms, 1800ms //str = str.slice(0,-4); //150ms, 1550ms //str = str.replace(/....$/, ''); //400ms, 3600ms }
>>62 substrの使い方間違えてるのと正規表現リテラルを外に出せ
window.open("");で新しいタブが開きますが 新しいウィンドウを開く方法はございませんか?
>>55 ありがとうございます、やっぱり便利な関数あったんですね
javascriptは広大です
showModalDialogとか?といってもこれもタブで開くウィンドウで開くかは環境次第だから そもそもウィンドウじゃなきゃダメという仕様の見直しを
マクロ用としてウィンドウを分けたいんです たまにそういうページを見かけたのですがurlをメモしてないのでソースコードを見ることも出来ません
>>63 >正規表現リテラルを外に出せ
replace(/.../, '');
こう書いちゃダメなの?ECMAScript的に?
>>68 ベンチのとり方の問題、単純に比較条件が同じでない
Firefox3なら正規表現リテラルがstaticだからブラウザ比較もフェアでなくなる
あ、なるほど。サンクス
なるほどなー
<body onload="common();"> <DIV> <DIV id="box1"></DIV> ←この場合onmousedownを入れたくない </DIV> </body> <body onload="common();"> <DIV id="container"> <DIV id="box1"></DIV> ←この場合のみonmousedownを入れたい </DIV> </body> id:#containerのなかにあるid:#box1のエレメントをcommonから取得し、編集したいのですが 可能でしょうか(IE/Firefox/opera/chrome)
id指定は1箇所がデフォ style共有したいならclass使いなさい
おまいらもっとコード共有サービス使ってくれ。 HTMLとか読みにくくてしゃーない
>>73 私が作ったHTMLならそうするんですが、みんなルール通りに作ってくれる人たちばっかりじゃなくてorz
var element = document.getElementById("box1");
if(element.parentNode.id = "container")
{
setonmousedown(obj);
}
コレだとIDが2個あった場合動かないよね・・・orz
>>72 それページ違うから各ページに1つじゃね?
それならdocument.querySelector("#container #box1")で下のHTMLだけ要素を抽出できる。
idは絶対に1つで統一させろ。
>>76 jquery使わなくてもそんな検索できるんですね
使って見ますどもです!
ほんと・・・私も統一して欲しいんですがorz
>>75 それはルールの方を徹底させるべきだと思うけどねぇ
別ページなら規約違反じゃないから
>>76 が使える
idセレクタは最初の要素を基準にするから1ページに同じidの要素ごあるなら期待通りに動作しないはず
属性セレクタで解決できるけど効率が恐ろしく悪いからお勧めしない
コーディング規約は大事だよ
document.querySelectorはMDCのどこのページにあるかおしえてください
>>80 querySelector mdc でぐぐる
queryCerectorてモダンブラウザだけじゃなかったっけか
どこまでがモダンブラウザ?
その前にモダンブラウザって何?IE,Firefox,Opera,Chrome,safariしか聞いたことないんだけど
プログラミング覚えてからマトリックス見ると凄く面白い
>>74 コードはスレに残ったほうがいいんじゃないの
過去ログに消えたら読めないじゃん ごく一部のひとぐらいだからね●使うのは
スレで見れたほうがいいな。 過去ログ保存するサービスもあるから大丈夫でしょ。
一人で何役も演じれるから議論するのも無駄かと思うので好きなようにやればいい
>>72 バブリングを利用すればID重複していても問題ない
ID重複の問題なのこれ?
ページのURLをハッシュ化して <html id="AE9102819.....">のようにIDを埋め込んでおけば ページごとのスタイルを書ける、てのがあったな、とふと
ID重複したらvalidでないHTMLになるでしょ。将来さまざまなプラットフォーム が出て来たときにvalidでないとどんなデメリットあるか分からないのにそれを 直したくないから今適当に済ませるとかリスク大きすぎと思うけど。 それも自分の選択だけどそんなものアドバイスしてくれる人は限られている。
>>75 読むとid重複してるように読める
こういうすれ違いはコード共有サイト使えばなくなるから積極的に利用してほしいな
過去ログにあると思うが、ID重複はcloneNodeであっさり生じる なら"valid"とはどの時点での、何に依拠する"valid"か そして、それとイベントフローとは何の関係もない
98 :
Name_Not_Found :2011/06/25(土) 09:43:36.64 ID:H7kHvVxy
>>97 cloneNodeで生じても、速やかにそれを解消するコードを書かなきゃいけないんじゃないの?
@srcがなければ@deferも@asyncも書けない @srcがあって@asyncがあれば非同期取得&実行 @srcがあって@deferがあればページ構築後に実行 @srcがあって@asyncも@deferもなければその場で取得&実行 脱線だが、例文がHTMLレベルで書けてない(invalid)にもかかわらず この手の内容モデル・ツリー構造のミスが指摘・修正されることはまずない イベントフローにもろ影響する、IDなんぞより大きい問題なんだがな
>>99 もちろんだ
だがフラグメントの子孫を辿って子孫のID修正してるコードなんか
ほとんど見たことない
質問の趣旨から外れるけど、ID重複の指摘ぐらいはあってもいいんじゃない?
>>101 「見たことがない=やっていい」ではないと思うけど…
イベントフローの話しかしちゃいけないわけでもないし
cloneNode使ってる実例自体をほとんど見たことないんだけど、 JavaScriptのみで同じような部品を複数生成する場合、cloneNodeを使うメリットってあんまり無いよね?
function class(){ this.method1=1; this.method2=2; } obj=new class(); alert(obj.method1); obj=new class(100);って書いてこの100をthis.method1に代入する方法を伝授してください
>>103 「やっていい」と言った覚えはない、意見の捏造は止めてくれ
ID重複にしろ変な木構造にしろ、イベント設置側からはどうすることもできない場合がある
バブリングを利用すれば、そうした問題をひとまとめに、とりあえず後回しにして考えられる
まさに
>>75 の抱えている問題そのものだろ
DOM Level 3にはdocument.strictErrorCheckingとdocument.continuousValidityCheckingがある if(node.canAppendChild(child)) node.appendChild(child);のように常時妥当性検証する ID重複もチェックするはずで、強行してエラーになれば"error-handler"が呼ばれる Firefox4で廃止されたstrictErrorCheckingってのはこれのことな Webはこれを使わない、つまりエラーをなるべく許容する方向にいったわけだ ならこっちも通常処理と例外処理をまとめて扱えるようにしといた方がいいだろ? なんでエラーを許容するかと言えば前方互換性の問題がある ここでIDが結構厄介なんだが、スレ違いなのでこれ以上書かない
>>106 あなたの意図がわかりにくかっただけ
>>97 や
>>101 の結論づけだと
>>75 を擁護しているように読めて気持ち悪い
本当は「イベントフローと関係ないから〜だ」という意見があるわけでしょ?
「関係ない」で終わってるとその後に来るべき結論は読み手によってどうとでも解釈できる
「ID重複すべきではないが、イベントフローと関係ない」ならまず誤解は生じなかった
要するに何を否定したいのかがよくわからんのよ
「イベントフローと関係ない」なんて周知の事実でしょ?
事実だけ羅列して「後は自由に読み取れ」てことなら誤解されることも予想すべきだと思う
>>104 ループ処理で毎度ノードを生成する時、cloneNode の方がパフォーマンスがいい
その時、IDも重複するなら当然変えるべきだろう
子孫にわたってID変更するのは勿論だけど、何処に何の要素があるかは決まっているから cloneNode するわけで変えるべき要素も決まっているはず
だからそれほど難しい変更じゃない
「見たことがない」とか悪例を挙げるのは意味がない行為だと思う
悪例があるならそれをどうすれば改善されるかをアドバイスする方がもっと重要なはずだ
function class(){
this.method1=(0<arguments.length)?arguments[0]:1;
this.method2=2;
}
obj=new class(100);
alert(obj.method1);
>>105 はたぶん説明不足だからスルーされてる
一応書いてみたけどこういう意図なのかどうかわからないから
どういう意図なのかとかコード以外の部分まで考えたのに
そういう意味じゃありませんとか言われたら凹む
から俺もスルーしたい
>>105 classは予約語だから名前を変える
function _class (num) { if (arguments.length > 0) { this.method1 = num; } }
_class.prototype = {method1:1, method2:2};
obj = new _class(100);
alert(obj.method1);
>>110 悩んだ経験のない奴に、それについてのアドバイスは理解できない
class A { public $method1; function __construct($n){ $this->method1 = $n; } public function view(){ return $this->method1; } } $obj = new A(100); echo $obj->view(); PHPで書くとこういう事がやりたいのです
>>108 ID重複はお前さんのように白黒はっきりできる話じゃないんだよ
ある時点、ある段階でvalidityが決まる、そしてDOMはその境界にまたがる
だから「価値判断」は曖昧にして「事実と対処」のみを話していたわけで
その辺は汲み取ってほしかったがな
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
a = parseInt("123,45",10); これが12345にならず123になってしまいます .じゃないのに,も小数点として扱われるのでしょうか? 12345にする方法を教えてください
このスレは話を小難しくしたい奴が多いからな。ある程度は仕方ない。
cloneNodeした要素をDOMツリーに挿入した時点でID重複が生じるならそれはvalidではないHTMLである 白黒はっきりしてると思うけど違うの?
<td class="area"> <span>1</span> <span>2</span> <span>3</span> </td> tdのareaクラス内のspanのテキスト部分を3つ取得したいのですが document.querySelector(".area")ここからがわかりません どなたかご教示おねがいします
>>103 ,106は「ID重複を避けられないパターンがある」といってるみたいだけど本当にそう?
element.querySelectorAll('[id]'); で要素を抽出してID書き換えれば済むような簡単な話に読めるけど
挿入してなかったら、ID が重複してても標準仕様的には大丈夫なんでしょうか
127 :
125 :2011/06/25(土) 13:54:37.55 ID:???
質問と回答以外は黙っててくれないかな
ようやく収束したかな
>>119 a = parseInt("123,45".replace(/,/g, ''), 10); // カンマを取り除けば問題ない
124も念のためお願いします
>>124 document.querySelectorAll(".area>span") をforループで回してelement.dataを参照
>>132 詳しく
否定するだけで何も言わない人はかなり迷惑
書けば書いたでイミフだの長文うざいだの言われるからな
>>137 俺はイミフとか長文うざいとか言わないから書いてよ
>>134 element.firstChild.dataじゃないか?
>>137 内容にもよるが長文NGってわけでもないと思う
要点をまとめて長文になるのは仕方ない
うざす
回答は一段落したしいいんじゃない? 違うなら違うで書いてほしい
むしろ書かないことでイミフになる件w
えーと、あれだ あきらめたらそこで試合終了だよ
仕様を心行くまで語るスレでも作っとけ
典型的なダメ出し君であった。
間違いにNOと言えない日本人
ここまで俺の自演
for(vari i=0; i<3; i++) { query = document.querySelectorAll(".area>span"); query.firstChild.data } こうしてみたのですができませんでした
Ajaxでテキストログの状況を確認しても IE9の場合、最初に開いた時の状態しか出てきませぬ そのテキストファイルを開いてF5とか押して更新確認してから、Ajaxをまた実行すれば最新の状態が出てくるのですが 何かいい対処法がないでしょうか?
<html> <head> <title>aaa</title> </head> <body> <div> <span>a</span> <span>b</span> <span>c</span> </div> </body> </html> javascript:l=document.querySelectorAll('div span');for(var i=0;i<l<length;i++)alert(l[i].firstChild.nodeValue); やってみたのですが間違ってる箇所をご指摘ください
まとめサイトを掲示板とかコメント投稿機能付きのWikiとかにして 脱線する場合は相手をそっちに誘ってそこで心行くまで語り合うというのはどうか ついでにテンプレ議論もそっちでやってほしい IP表示にでもして
自演が出来ちゃうから議論するときはIP出して欲しいね
155 :
Name_Not_Found :2011/06/25(土) 16:19:07.75 ID:NGbQmjvX
id出すのは構わないのだが、議論の相手がidなしではこちらだけ複数の相手から対象になるのでやりにくい お互いにidを出す合意があればいいんだがなあ idを出す板に移動できないものか
>>151 キャッシュが原因
IEとサファリはAjaxで引き出したものもキャッシュする
テキストなら
var i=0;
呼び出すテキストのURL
"hoge.txt?fuge="+i
i++
とでもしとき、そうすれば被らない
地震があるならはてなの匿名ブログでやりゃあいいよ
158 :
Name_Not_Found :2011/06/25(土) 16:23:17.19 ID:NGbQmjvX
>>151 今手元に試料がないのでうろ覚えだが、IEはif-modifiedなんとかを指定して回避できたと思う
XHRの仕様にも説明があったはず
160 :
Name_Not_Found :2011/06/25(土) 16:36:44.65 ID:NGbQmjvX
>>160 なんと!
わざわざありがとうございますッッ!!
>>128 | 名前"ID"をもつ属性は,ID型ではない
schema-determined ID, DTD-determined ID, externally-determined ID
XPath 1.0の5.2.1節、(Web)DOM Coreの5.6節(Editor's note)
document.evaluate('id("HOGE GEHO")', df, null, 7, null)は フラグメントdfに含まれるIDを識別すべきか df.querySelector('#HOGE, #GEHO')はどうか // @xml:idと@idが両記されているXHTML5(SVG埋め込み)はどちらを使うか // getElementByIdはxsd:IDである(属性ではなく)要素を識別できるか
164 :
Name_Not_Found :2011/06/25(土) 18:56:50.52 ID:Vt6T+Q83
chromeでデバッグしてるんだけど、サーバーに挙げたjsファイルがブラウザ側でキャッシュ使われるみたいなんだけど、 何かいい回避方法ないかな?
ちょっと前に書いてあるだろ
キャッシュクリアしとけばいいだろ
ノードリストやノードスナップショットに配列のメソッドを使いたい場合は ノードリストをループで回してノードを順に配列に入れ直すんですか?
>>167 こんな感じ?
var nodeList = element.childNodes,
len = nodeList.length;
while (len) {
len -= 1;
// 何らかの処理
}
Array.prototype.forEach.call(element.childNodes, function (value, index, array) {
// 何らかの処理
});
Array.prototype.slice.call(element.childNodes).forEach(function (value, index, array) {
// 何らかの処理
});
169 :
167 :2011/06/25(土) 21:09:22.40 ID:???
どうもありがとうございます 配列のメソッドをapplyやcallを使ってノードリストから呼び出す方法が一般的ってことですか?
170 :
Name_Not_Found :2011/06/26(日) 12:00:21.80 ID:XngOLDPg
重複せずにランダムで広告を表示させるスクリプトを作ってるんですが、jsの中のjsを実行しようとするとエラーになってしまいます。
【やりたい事:jsの中のjsを実行させたい】
----------------------------------------------------------------------------------------------
<html><head>
<script type="text/javascript" src="
http://azlink.sakuratan.biz/js/widget2.min.js "></script>
<script type="text/javascript">
var randObjects=[
'<script type="text/javascript">AZlink.Widget2.sidebar({associateId: 'datweb04-22',node: 'bestsellers/books/10667111',numItems: 10,imageFlags: [ 'AA220', 'CR30,10,160,200' ]});</script>',
'表示2',
];
function randWrite() {
var rr = parseInt(Math.random() * randObjects.length);
document.write(randObjects.slice(rr,rr+1)[0]);
randObjects.splice(rr,rr+1);
}
</script>
</head><body>
<script type="text/javascript">randWrite()</script><br><br>
<script type="text/javascript">randWrite()</script><br><br>
</body></html>
----------------------------------------------------------------------------------------------
どなたか教えてください。
jsの中のjsを実行させたい 日本語でおk
a.html <script src="a.js"></script> a.js document.write('<script src="b.js"></script>'); b.js document.write('Hello World'); こういうことじゃねーの?
>>170 実装は様々考えられるけど、基本的にはFunctionオブジェクトで持つのが普通だよ。
今のコードの延長で考えるなら、例えばこんな風に別の関数でラップして持っておいて
var randObjects = [ function(){ AZlink.Widget2.sidebar({...}) } ];
randObjects[0](); // 関数呼び出し
>>169 用語を使い分けているから知ってると思うが
ノードリストの増減があるときはArrayメソッドをcallで使えない
sliceなり__iterator__なりでいったんスナップショットにする必要がある
どっちが一般的とかではなく、使い分けろ
できの悪いライブラリだとforEachでSparseArrayを扱えないからそれも注意な
175 :
Name_Not_Found :2011/06/26(日) 13:28:25.59 ID:y2LS0ZpY
>>156 でsafariのキャッシュのことが出てるけど
自分の方では逆にキャッシュを利用したいのにうまくいかず困っています。
以下は同じファイルに3回リクエストする簡易な例です
var xhr = new XMLHttpRequest(), cnt = 0, flag = true;
xhr.onreadystatechange = function() {
if (4 === xhr.readyState && 200 === xhr.status) {
console.log("success - " + xhr.responseText);
}
flag = true;
};
176 :
Name_Not_Found :2011/06/26(日) 13:31:32.53 ID:y2LS0ZpY
(続き)※本文が長すぎるとかで投稿できないので小分けに・・ var t = setInterval(function(){ if (flag) { xhr.open("GET","hoge.txt",true); xhr.send(""); flag = false; if (++cnt >= 3) { clearInterval(t); } } },1000); ブラウザの挙動はこんな感じです(windows版safari5)
HTTPクライアントなんだからIf-None-MatchとかIf-Modified-Sinceぐらい使えよ あと304は200に変換されるからな
数字だけじゃなくて名前でもアクセスできる配列というか プロパティの並び順が決まっているオブジェクトというか そういうものって作れますか?どうやればいいですか [{hoge:foo}, {piyo:bar}, {fuga:baz}] 配列とオブジェクトを入れ子にしても名前でアクセスするには配列の番号を知っていないといけないし
>>178 var index = {hoge: 0, piyo: 1, fuga: 2}; // インデックスを作っておくとか
>>178 a = [
{
"a":"1111111111",
"b":"2222222222",
}
,
{
"a":"333333333333333",
"b":"444444444444444",
}
];
alert(a[0].a);
alert(a[0].b);
alert(a[1].a);
alert(a[2].b);
>>178 javascript:a = [{"a":"1111111111","b":"2222222222",},{"a":"333333333333333","b":"444444444444444",}];alert(a[0].a);alert(a[0].b);alert(a[1].a);alert(a[1].b);
var src = [{name:hoge, value:foo}, {name:piyo, value:bar}, {name:fuga, value:baz}]; var dst = [ ]; src.forEach(function(o) { this[i]=this[o.name]=o.value; }, dst);
>>178 hensu = function.prototype.a(){}
hensu.a() = "aaaaa";
hensu.b() = "bbbbbb";
hensu.c() = "ccccc";
184 :
178 :2011/06/26(日) 15:14:47.19 ID:???
>>179-183 レスどうもありがとうございます
すみません具体的には
var a = {hoge: "foo", piyo: "bar", fuga: "baz"};
↑これの並び順が配列のように決まっていて
a.length = 2;
とすると{hoge: "foo", piyo: "bar"}になったり
var b = a.splice(piyo, 1);
a.unshift(b[0]);またはa.unshift(b["piyo"]);
とすると{piyo: "bar", hoge: "foo", fuga: "baz"}になったり
みたいな
そういう操作がしたいです
>>179-183 のどの方法でできますか?
どの方法でできるかは試せばわかりますよね
>>184 プロパティに順番はないから
どんな手段でアクセスするかによって順番は変わる
自前でコンストラクタ作らないと無理と思う
188 :
175 :2011/06/26(日) 22:37:36.16 ID:???
連続投稿で排除されてしまい続きが書けませんでした。 safariからのリクエストヘッダに自動でキャッシュを無効にするヘッダがついてしまい そのことを説明したかったんですが、単にwebインスペクタ(開発ツール)でヘッダを見ていたせいでした。 (トラッキングのためにあえて付加されていた) その後解決しています。
189 :
Name_Not_Found :2011/06/27(月) 08:18:38.93 ID:b2vZ/Ec9
>>184 どこで順番を判断するの?
for-in なら実装依存だよ
length のところは setDefineProperty が必要かな
190 :
Name_Not_Found :2011/06/27(月) 08:22:19.46 ID:b2vZ/Ec9
Object.defineProperty だった
<HTML> <BODY onload="Main();"> </BODY> <DIV ID="ImgList"></DIV> </HTML> 1個2M~3Mくらいの画像を20個表示させようと思っています。 1個1個表示させたいのですが、全ての画像が一度に表示されてしまいます。 なぜでしょうか・・・またどうやったら回避できますか?
function Main() { var element= document.getElementById("ImgList"); var img_name_default="img"; var img_name=""; for(var i=1;i<20;i++) { img_name=img_name_default+setZero(i)+".jpg"; element.innerHTML+="<img src='"img_name"'><br clear>"; } } function setZero(number) { var ret=""; if(number < 100) ret+=0; if(number < 10) ret+=0; ret+=number; return ret; }
>>191 なぜか: 貴方の脳内勝手仕様が現実と違っているから。Main()を
実行するとすべてのimg要素がImgListの中に入る。JavaScriptを
実行中はブラウザは他のことを何もしないので、順番に入れようが
どうしようが関係ない。Main()が終るとブラウザは表示すべき
img要素が沢山あると知り、全部ロードしはじめる。それだけ。
回避方法: 1つのイメージをロードし、その完了を待って次の
イメージをロードし、のように自分で組むしかない。
>>193 なるほど
それでいっきに表示されていたんですね
それにしても終わってからロードする時ってどうやったら・・・
なかなか難しいプログラムになりそうですねorz
>>194 「JavaScript 画像 ロード 完了」とかでぐぐる。単にいまループで
全部やってるのを1回ずつに分けてやるだけでしょ?
JS切ると何も表示されないアホな設計から見直せ 例えばaのリンクにしておけば好きな画像から見れる JSが動くなら順次imgに変換してonloadで次の画像を読み込む それすらできないレベルならJS使わずにHTMLだけちゃんと書いとけ
>>194 BODYの外にDIV置かない方がいいよ
>>195 ありがとうございます 調べてみます
>>196 初心者ですみませんがAタグをIMGタグに変換するなんて事が出来るなんて知りませんでした
自分で少し試して見たいと思います。やり方教えて頂きありがとう御座います。
>>197 了解
199 :
Name_Not_Found :2011/06/27(月) 19:26:23.02 ID:+rfCjWeF
iframeで、開いたリンクを実行した場合、iframeの枠の中だけで新しいページに移動します。 jquery.jsの $("#target_load").load("hello.html"); を使うと、親ページ全体が書き換わってしまいます。 一部だけ更新できるように出来ないでしょうか?
jqueryを使わなければいいんじゃないの
201 :
Name_Not_Found :2011/06/27(月) 19:38:49.05 ID:dKinyIwi
特定のdiv要素だけをリロードさせることってどうすればできますか?
202 :
Name_Not_Found :2011/06/27(月) 19:49:59.30 ID:tDRMi/aw
値をreturnする関数で、返す値がない場合、 「return null;」なのか「return false;」なのか、何を返せばいいんでしょうか 「return;」でもいいんですか? 通常返す値が文字列なら「return "";」、通常返す値が配列なら「return [];」、みたいに、 通常の値の型と同じ型の空を返すんですか? 場合によって使い分けるとかですか?使い分け方を教えてください
>>202 その帰った値をどう利用するかで変わる。
return trueが別の場所にあるなら対としてreturn false;
return 数字ならreturn 0かnull
文字列なら "" か null
ちなみに、return;だとundefinedが帰るよ。各型特有のメソッドを使用する際は注意しないとエラー出るよ。
if(result)で使うなら、空の配列[]やオブジェクト{}はtrueになるからそこらへんはコードで判断してね。
204 :
202 :2011/06/27(月) 20:05:21.98 ID:???
>>203 レスどうもありがとうございます
> if(result)で使うなら、空の配列[]やオブジェクト{}はtrueになるから
このへんよくうっかりしてしまいます
よく注意して使い分けたいと思います
ありがとうございました
男が関数で文字列を返すのは恥と知るべき。 全部エラーオブジェクトのメッセージとして投げるに尽きる。
_, ,_ パーン
( ‘д‘)
⊂彡☆))Д´)
>>206
JSDoc書けない男はコンドームをつけないのと等しい
jQueryなんて女子供のおもちゃじゃ!
jqueryをバカにするなっ!!!!!!!!!!!!!!!!!!
newを使う男は早漏よね
アッーーー ちょっと鍛えてくる
>>211 Dojoかprototypeですよねー
216 :
Name_Not_Found :2011/06/28(火) 08:11:07.07 ID:wFeTb9b4
ライブラリを使う男はいいかげん
>>201 何番目のdivか数えて書き換えればおk
>>215 dojoは開発初期からes仕様を読み込んでた感じで漢だったぜー
prototypeやjqueryは、js触り立ての素人さんが勢いで作った感じ
それをまた素人がもてはやすから、今になって設計ミスがぽろぽろ出てきたなーと
設計ミスもなにも、言語自体が設計ミスの塊なんだから仕方ないだろw その上で、設計どころか常識が狂ってるあのIEに対応させようとすれば、 どんなライブラリだって「一部に目を瞑って実用レベル」か「作者の趣味で役に立たない」か どちらかにしかならん。
JavaScriptを手っ取り早く勉強する方法を教えてください こう書いたらこう動くってのは本見て分かるけど、 こんな感じにしたいって時にどれをどう応用したらいいのか分かりません・・・
その「こんな感じ」をググれ 本を読むよりソース組みまくった方が勉強になる
「手っ取り早く」「勉強する」←この2つが既に矛盾してる。 学問に王道なし。
別に矛盾してないだろ
自分で試行錯誤もしない奴は結局何も作れんよ。 人に手っ取り早く教えてもらえるプログラムなら、そんなもん自分で作る意味ないし。 そいつの作ったやつそのまま使えばいい。
日本の学校で言う「勉強」には近道があるな。手っ取り早く誰かから 答えを聞き出すか、どこかから答えを丸写ししてくるのが日本式の勉強だからw その結果、自分で答えを作り出さなきゃならん場合に何も役に立たない人間が出来上がる。
227 :
Name_Not_Found :2011/06/28(火) 17:33:32.00 ID:RUCL/SaV
手っ取り早く教えてアニキ 文字列リテラルの変数展開ってもしやできない? Rubyで言うところの#{hoge}みたいなやつ
>>227 できない。全部自分で組み立てるしかない。
229 :
Name_Not_Found :2011/06/28(火) 18:05:00.85 ID:RUCL/SaV
>>228 ありがとうございます
今夜は安心して眠れます
>>219 ああ凄い分かる
dojoが未だにIBMでよく使われてるのも頷けるわ
>>225 試行錯誤するときの手本が最悪なサンプルだと悲惨だがな
JSに限らないが、特にJSでググってひっかかるのはひどいのばっかだろ
>>231 最初の勉強の道具がひどいプログラムかどうかは問題にならない。
まともに勉強しようって奴は、そのプログラムを言語仕様とつき合わせて
「このプログラムはいったい何をしてるんだ?」と調べまくる。
それで自然と仕様を覚えるし、それがひどいプログラムなら
「ここいらないじゃん」「こっちの方が簡単じゃん」と、
具体的にどこがダメなのかが見えてくる。
勉強する気のない奴は、仕様もみないで、見つけたプログラムを適当にコピペ改変して
動くっぽい状態にしておしまい。コピペ改変が試行錯誤だと思ってる。
そんな勉強する気のない奴なんて、ひどいプログラムと同じぐらいどうでもいい。
>>232 いや大いに問題だね
QA掲示板なんかで初心者の味方を気取る初心者が
とほほレベルの時代遅れコードを拡大再生産しまくってる現状で
何で役立たずの理想論を振りかざしてんの?
最初に目にしたプログラムのすり込みって大きいと思うよ 仕様だけの話でなく、コーディングセンス的な意味で prototypeとthisの使い方を初めて見たときショックだったな 今でも根強いクラスベースに似せた書き方でなく なんか根本的に発想が違うと思った
じゃあおまいさんが新時代のソース晒せばいいじゃない 2chで批判するやつより、とほほレベルの時代遅れコードの方がよっぽどマシだと思うが
>>235 新時代というより、良質のコードって埋もれてると思う
prototypeの使い方を探したとき、ずいぶん前からあったんだなってのと同時に
何でこれが長いこと広まらなかったんだろうとも思った
>>233 お前の言ってるのは、釘の打ち方もカンナのかけ方も知らない人間が
他人に大工仕事教えることを問題視してるわけだが、そんなの話にならんわ。
子供は親を選べないし、義務教育中の生徒は教師を選べないが、
義務教育外の学習なら生徒は師を選択できる。むしろ選択しないとヘタレまっしぐら。
「ああこいつモノ教えるほどの力量ないじゃん」と見切ったなら、
そんなのとはさっさと別れなきゃいかん。
文句があるなら、その前に、最初のきっかけにいつまでもしがみ付いてる奴の方を嘆いとけ。
>>237 その選択した結果とやらが、このスレの回答レベルなんだろ?
お前は自分の力量をずいぶん過信してんだな
ラッパーなら言いたいことはラップで語ってください。 プログラミングやってるなら言いたいことはプログラムで語ってください。 何が良質なのか、良質なprototypeを使ったサンプルコードをお願いします。 良質かつ意味のある実践的なコードを。 既存のオブジェクトを拡張するような使い方ではなく 外部ライブラリを呼び出さず そのままで動作するコードで 1レスにおさまる長さで
俺が考えた泣けるシナリオソースここまで
>>221 「何をしたいのか」によりますが、『JavaScript 第5版』を理解できるまでに読み込めばある程度は自分の希望通りの機能を実現できるんじゃないでしょうか。
http://www.amazon.co.jp/dp/4873113296 試行錯誤も大切ですが、きちんとした土台ができあがってからの話だと思います。
勿論、土台を得るための試行錯誤は必要ですが、間違った情報に惑わされるリスクを負うぐらいなら多少難しくとも質の高い情報を参考にする方が効率的ではないかと。
土台ができたら
>>11 のリンク先を読み進めれば、必要な情報を引くための場所に見当がつくようになります。
(仕様書を読むことに敷居の高さを感じるようでしたら、MDC で手を打つのが妥当かなーと個人的には思います。)
あと、「書けるようになる」のと「質の高いコードを書く」は別次元の話なのでゴール(達成目標)をきちんと設定した方がいいと思います。
お勧めはしませんが、「書けるようになる」だけなら初めに見たコードを参考にするだけで十分ともいえます…。
ただし、質が悪いコードに巡り会う可能性は少なからずありますし、質が悪いからこそ非効率だということもできます。
誤った情報を鵜呑みにしないためにもたくさんのコード、文献を読んだ方が長期的には効率的です。
>>238 俺と関係ないところで、誰が誰にどんな回答してるかなんて、俺は責任もたないし。
「ああバカげた回答してるなぁ」と思うだけだぞ?
・ドットシンタクス、DOM 検索の重複を繰り返す。 ・等値演算子で比較を行う。 ・コンストラクタ以外の変数の先頭に大文字を使う。 ・リテラルを使わず、コードの下部に関数宣言をまとめる。 残念なコードの典型。
>>242 >>221 にあれを勧めるのは、ハイキングで近くの山に登りたいって人に、
エベレストの登山装備用意するように勧めるようなもんだぞw
趣味である限り、「泥棒を捕らえて縄をなう」でいい。必要になってから必要になったものを調べるだけでいい。
勉強なんて、自分がそれを必要だと心の底から思うことができない限り、絶対に身に付かない。
何の役にたつのか分からん重装備を抱え込んだら、行く前から装備に潰される。
>>245 >>242 ではないけど、あんたは読んだのけ?
前半のコアの部分だけでも、読むべきだと思うし、読んで損はないと思うわ。
>>245 正直、
>>221 のレベルはよくわかりません。勉強する力はあるものの調べる力に長けていないとも読めますし…。
そういう場合、ぐぐり方や信頼できるWebサイトを複数知っているだけでも違うのでしょうが、情報の正誤を判断する前提となる知識を身につけることが先だと考えています。
初心者向けとしては『DOM Scripting 標準ガイドブック』が読みやすいと思いますが、「何をしたいのか」のかがわからないので『JavaScript 第5版』をお勧めした次第。
初めから全て理解する必要はないですし、少しずつ理解するだけでも大分違うと思います。
http://www.amazon.co.jp/dp/4839922373
248 :
Name_Not_Found :2011/06/29(水) 08:06:43.98 ID:Cei45owx
本を読めば登れるがどの山に登ればいいかわからない
今の時期に第 5版を勧めるのもどうかと思うけどw
250 :
175 :2011/06/29(水) 08:30:39.72 ID:???
>>175-176 のブラウザの挙動について説明の続きがあるのですが
連続投稿で規制になってしまったため、質問保留にします
※この投稿は投稿の代行スレに依頼しました
代行さん乙w
>>246 読んだよ。あの時はコアJSの章が終わってまだ3分の1しか進んでないどころか、
原書では別のリファレンスまで込みだったことを知って愕然としたわw
少なくとも、読んで理解できるレベルでないと「よく分からん。読み飛ばす」で終わってしまうことだけは確か。
変な話だが、The Good PartsとかJavaScriptパターンを読み飛ばすことなく理解できるレベルでないと意味がないと思う。
どのぐらい意味がないかというと、小学生を大学の図書館に連れてって自習させるぐらい意味がない。
253 :
Name_Not_Found :2011/06/29(水) 13:22:15.96 ID:KPKJAbOf
IE8 にあった HTMLDocument が IE9 では無くなっているようですが、これは何故でしょうか
ページ内のどっかのLINKをクリックして画面が切り替わろうとしたら、 それを取りやめる処理というのはどうすればいいですか? 例えばbody内で onUnload を使えるみたいですが、この中の処理で何かすればよさそうな気もしますが、 上手い方法が思いつきません。
innerHTMLで<div>タグの内容を書き換えてもhtmlソースを見ると原文ソースのままになりますが 例えばsubmitしても原文ソースの値が引き渡せると言う認識で正しいですか? innerHTMLでvalueを書き換えた場合でも原文ソースのvalueがsubmit時に引き渡せるんですか?
>>254 onload はキャンセルできない
click なら Event.preventDefault() でキャンセルできる
>>256 原文ソースのままにならないけど
258 :
257 :2011/06/29(水) 15:14:18.67 ID:???
× onload ○ unload
>>257 ありがとうございます。
クリックして、該当URLへの接続を即キャンセルであればreturn false でいいのはわかるんですが、
接続が開始されつつ、ページが切り替わろうとしたらそれをキャンセルしたいという仕様です。
つまり、接続先にアクセスカウンタがあれば、カウンタは+1されており、かつもとのページを維持。
という仕様を目論んでいます。
XMLHttpRequestとか使えばいいんでない? 他人様のページに対してなんかしようとしてるなら知らん
あれだろ、ランキングサイト等数稼ぎとかだろ
ページが読み込まれたあとに、aタグを全部spanかなんかに置き換えて それっぽく見えるスタイルにしとけw
おっと。書くつもりでわすれてた。 そのspanがクリックされたら、リンク先をnew Image().srcあたりにでも突っ込めば 対象のページにアクセスはされる。ホントに「アクセスするだけ」だが。
やはりimage使うしかないのかな。 対象鯖ではimageタグで呼び出されたってのはわかるの?
まずどういう目的なのか聞こうか
仮に分かるとして、分かると何かマズいのか? 問題ないなら気にする必要はないはずだが。
>>256 いまひとつ何を悩んでいるかわからない。具体的なコードは?
<div>をsubmitってどういう意味なんだ?
valueって何のvalue?
一般のブラウザは、ソース表示ではサーバから送られた状態の素のHTML
を見せているだけで、動的に書き換えたものは反映されない。そういう
のを確認したかったらFirebugとかInspectorとか使う。
結局imageタグで仕様を実装したのでエニシングおk。 要は携帯ゲーでルーチンワークを自動操作するhtmlページを作りたかった。 但しimageタグで1ページに大量に呼び出しをかけると当然負荷がかかりBANGされる可能性が大なので、 どうにか手動時とほぼ同等の操作で自動化したかった。 手動だとクリックしたあと画面が切り替わる前に次のリンクをクリックするという方法を取っており、 一度画面が切り替わって携帯ゲーの画面になると当然操作は離れる。 そこをどうするかという問題だったんだが、 結局はimageタグのsrcをランダムなインターバルを置いて変えるという手法で、 リクエスト的には手動時と同等な仕様に仕上げた。 これでサーバ側でimageタグからの呼び出しだとわからないのであれば、手動クリックと同一になる。
269 :
Name_Not_Found :2011/06/29(水) 19:46:12.52 ID:eXHl+kHV
javascriptをオンラインでコードを実行させるコード共有サイトのURL教えてください
1ぐらい読め
JavaScript(Ajax)でウェブアプリにPOSTして、 そのウェブアプリでセッションを破棄したところ、 なぜかservletでExceptionが発生しました。 何がいけなかったのでしょうか?
そのエラーを貼り付けないとエスパー伊藤の出番になりますよ
>>272 すみません。
すでにマシンを落としてしまったので、明日貼ります。
ちなみに、なーんとなく心当たりとか、ありませんかね?
ちなみに、やりたいことは、 ログイン/ログアウト時にそれまでのセッションを破棄して、 新しいセッションで接続を継続するということです。 セッションを使った攻撃に対処したいのです。
予想できるエラーを挙げてもらって、役にたつと思うか? たとえば、そのエラーが単にnullオブジェクトのプロパティを参照しようとしてたとか、 そういう(モノスゴククダラナイ)エラーだった場合、書き込まれた情報は エラー探しで何の役にもたたない。よほど温厚な奴でもキレるか呆れる。 まずエラーログ張れ。話はそれからだ。
277 :
256 :2011/06/29(水) 21:11:30.22 ID:???
>>267 例えば以下のソース
html
<div id="hoge">
<input type="text" value="fuga">
</div>
js
var hoge=document.getElementById('hoge');
hoge.innerHTML=hoge.innerHTML.replece(/fuga/ig,'piyo');
を実行した場合fugaがpiyoに変わりますが、この状態でsubmitした場合
valueはpiyoが送られる。であってますか?
>>277 >>277 何でそんなものに疑問を持てるのか本気で分からんのだが…。
JavaScriptなど一切使われてないブログがあったとする。
記事投稿、あるいは記事へのレス投稿はformで入力欄が作られてる。
HTMLソースを見れば、そのformにはvalueで初期値が指定されてたりされていなかったりするわけだ。
初期値がある入力欄を、適当な文章に書き換えて送信した時、
サーバに送られるのは初期値なのか書き換え後か、どっちだと思う?
ちなみに、入力欄を書き換えようが何しようが、ブラウザでソースを見れば初期値のvalueは変わらんぞ。
質問とは関係ないけどこの場合valueにセットするのとの違いはresetの動作とかかな
280 :
253 :2011/06/29(水) 22:27:41.14 ID:KPKJAbOf
これは IE9 のバグでしょうか 以下のような対応で大丈夫なんでしょうか if(typeof HTMLDocument == 'undefined'){ window.HTMLDocument = Document; }
281 :
256 :2011/06/29(水) 22:52:42.68 ID:???
>>278 ではinnerHTMLでvalueでなくnameやidを変えたら、これは流石にマズイですかね?
>>277 うん、合ってますよ。
ブラウザで見える値がpiyoになるんだから、そりゃ送信する値もpiyoだよ。
テキストフィールドの値を書き換えるときに、普通は innerHTML.replace()
なんてしないことは覚えておいてね。
>>281 nameを書き換えるのは何も問題ない。
idも他のIDと重複しなければ何も問題ない。
フォーム送信は常に最新のDOMの状態で行われる。
ああそうか、 ブラウザやらJavaScriptやらが扱っているのはDOMというデータ構造であっ てHTMLソースはソースに過ぎない ということを理解してない人はイロイロ疑問に思うのかな。
>>275 ソースを思い出しながら脳内トレースしてみました。
すると、HttpSession#invalidate() でセッションを破棄した後に HttpSession#setAttribute(...) で値を設定している箇所がありました。
そんな処理をしている理由は、セッションIDを新しくしてからログイン情報を覚えさせたかったからです。
破棄すれば自動で新しいセッションができると思ったのですが、そんなに甘くはないですね。
しかし、困りましたね。
セッションIDを新しくする方法が見つからないです。
ログイン時はログイン前と同じセッションIDで継続して、
ログアウト時に invalidate() で破棄、以後の接続は新しいセッションIDで、ってのが無難ですかね?
でも、どこかのサイトで、ログイン時にもセッションIDを変更するべきってあったのですよ。
それがちょっち気になります。
>>282-284 ああああああ、やっと理解できました
何となくhtmlソースはサーバサイドだからと理解してはいたのですが
innerHTMLはhtmlソースをJSで変えるってイメージがあったので、大きな勘違いをしてました(;´Д`)
すいません、そして御教示有り難うございました。
また1つJavaScriptが好きになりましたw
287 :
668 :2011/06/30(木) 01:08:12.55 ID:???
function menuAco(n){ var i; if(flgMenu==n){return 0;} else{for(i=0;i<maxTab;i++){ sty(i,n)}//forの終わり flgMenu=n;return 0;}//elseの終わり }//menuAco(n)の終わり こいうreturn 0の使い方ってありですか? このときのreturn 0;はreturn;でもreturn nullでも いいと思うのですがどうですか?
戻り値は、その関数を呼び出した側で使うものだ。 呼び出し側が期待するものを返しているかどうかだけが問題。 関数1つ見てどうこうとコメントする意味はない。
<input type="text" id="hoge"> <div id="fuge"></div> このテキストに文字を打つたびに文字数がfugeにinnerHTMLで表示されるようにしたいのですが どうすればいいでしょうか? document.getElementById("hoge")まではわかるのですが
value length onkeyup キーワードはこんな感じです
>>292 ありがとうございます!
textのvalueをlengthしてonkeyupしたときにやるんですね!
vol82ぐらいに質問したものですけど解決しました
>>292 onkeyupは全角入力だとブラウザごとにイベントが発生するタイミングが異なるし、
マウスのみでのコピペでは発生しないから、タイマーでやった方がいいんでは?
それと文字数じゃなくて文字列で比較した方がいいと思うんだけど
296 :
295 :2011/06/30(木) 12:36:40.66 ID:???
ごめん最後の一行は無視して
keyupとsetTimeooutを両方使ったほうが良いな inputの方がいいけど
setIntervalじゃない?
300 :
Name_Not_Found :2011/06/30(木) 19:34:25.36 ID:bwgsMk4S
初歩的なことかもしれませんがよろしくお願いします。 「var hoge = new String("piyo");」とか「var hoge = "piyo";」ってやって、 「hoge.value」とか「hoge.getValue()」とかじゃなくて「hoge」とするだけで「"piyo"」が返ってきますが、 こういうオブジェクトってどうやって作るんでしょうか。プロパティやメソッドも持っていて
302 :
Name_Not_Found :2011/06/30(木) 20:14:01.27 ID:23483P+G
303 :
300 :2011/06/30(木) 20:19:02.65 ID:bwgsMk4S
説明不足ですみません たとえば var hoge = { value: "piyo", getValue: function(){ return this.value; } }; とか function Hoge(value) { this.value = value; } Hoge.prototype.getValue = function() { return this.value }; var hoge = new Hoge("piyo"); とかすると、「"piyo"」を得るには 「hoge.value」とか「hoge.getValue()」とかしないといけませんが 「hoge」とするだけで「"piyo"」を得られるようにしたいです var hoge = new String("piyo"); alert(hoge); //[object Object]じゃなくて"piyo"が表示される ↑ こういうのの作り方が知りたいです 「hoge.length」とか「hoge.split()」とかみたいにプロパティやメソッドも持っていて
var hoge1 = "piyo"; でhoge.lengthとかが使えるのは 自動型変換とかが入ってたんじゃなかったっけかな? プリミティブ型とかがどーたらこうたら
>>303 hoge.toString = function() {return "hoge"}
alert(hoge);
formの値をsubmitボタンでPOSTし、受け渡すphpファイルを作っています しかし、javascriptで変数aの値が1だった場合submit出来ないようにしたいです if(条件式)などで条件式がtrueだった場合submit出来ないようなスクリプトは作れますでしょうか?
ゲッターって名前付けなくてもいけるの
>>307 submitイベントでpreventDefault
310 :
Name_Not_Found :2011/06/30(木) 21:53:55.46 ID:HzU/vltg
>>301 JSONについて調べていたらjson2.jsというファイルに辿り着きました
このファイルって、商用・非商用問わずに自由に使ってもよいのですか?
ファイルの頭の方にパブリックドメインとか書いてありますけど?
英語ばっかりで頭痛くなりますね(-_-;)
今となってはjson2.jsは携帯用 てかJSON関係あるの?
JSONに食い付いているのは別の人
json2.jsはjqueryの中で使われてなかったっけ
PDはどこでもだれでもご自由にどんな形態でもOK だから著作権表示も消してOKだったはず
誘導されて来ました
IE8でjQuery + nivo-sliderにエラーが出ます。
http://nivo.dev7studios.com/ if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false)
プロシージャの呼び出し、または引数が不正です。
次になにをしたらいいでしょうか?
>>307 Formのsubmitボタンをただのbuttonにして、onClickで判別用関数
function hanbetu(){
if (a != 1){
document.hogeform.submit();
}
}
配布サイトのデモでエラーが出るなら配布サイトのフォーラムへ
しっかし、時代も変わったもんだよなぁ 昔は迂闊にスクリプトONにするな、とかだったしexeファイルも個人のを迂闊に実行するなだったし それが今やアプリだウイルスだのね
今はWEBやメールもチェックしてくれるウイルス対策ソフトが普及したから、 あまり神経質にならなくてもよくなったんじゃないかな。
まぁそういう危機管理を知らない&しない奴等がネットに流れ込んできたから ウイルス作成罪なんて馬鹿の馬鹿による馬鹿のための法案が出来ちゃったわけで winnyでけいおん!!08話.avi.exe 21,018Byte開いて被害者面とかもうね
そのケースは 悪意を持って作成orアップロードしているんだろうから 悪意は罰せられないといけない ダウンロードした者が著作権を侵しているだとかはまた別の次元なのでそれはそれで処理される
>>324 確かに古参のユーザからしてみれば、
自分たちのルールが新参者に足蹴にされて肩身が狭く感じるよね。
しかし、一般層が流れこんでくるのは予定調和だし、
そうでなくては儲からないから仕方がないね。
法務大臣が質問をあんま理解してなかったのが痛いな。そんなの全部そうだけど フリーウェアのバグ放置について「えー、あると思います」って理解してないのに言う辺りがね
ぴょんっって小さい画面が飛び出てくるやつってどうやるんですか?
ぴょんっって小さい画面が飛び出てくる動作をするプログラムを作る
330 名前:Name_Not_Found[sage] 投稿日:2011/07/01(金) 16:55:13.46 ID:??? ぴょんっって小さい画面が飛び出てくる動作をするプログラムを作る ↑ こいつ最高にアホだwwwwwwwwwwww
質問自体が悪いな
javascriptを我流でコード書いて開発するのとjQueryなどのライブラリを主体に開発するのは 企業だと前者が多いのは何故ですか? やっぱライセンスとかが気になるからですか?
まぁ、みんなそう言うなよ
>>329 ポップアップウィンドウの事かな?
ちょっとポップアップウィンドウで調べてみ、それじゃなかったらそのぴょんっってのがあるURL教えて
341 :
335 :2011/07/01(金) 19:17:45.91 ID:???
335だけど331は俺ね 自演認定する暇ある前に文章を読む力をつけましょう
ネタにマジレスwwww
まだ夏休みじゃないっすよね
うん、
>>330 がよくないとは俺も思う
結果がどうであれ最初に煽るのがよくない
Q.誰が優勝すると思いますか? A.1位になる人が優勝すると思います。
「下らないネタを披露→マジレス→ネタにマジレスカコワルイ」って時にマジレスする人を嘲笑する風習もどうかと思うんだよな
>>349 2chで何言ってんだか
嫌ならmixiなりTwitterでやればいいじゃない
2chはこういうもんだと決めつけて視野が狭くなってると見える
2chっつっても様々だからな 荒れまくりなプログラミン言語質問スレもあれば ここのような基本マターリな所もある
質問です。 innerHTML を間違って innerHtml と書き間違えました。 td_.innerHtml = "aaaa"; この状態で、aaaa とは表示されないわけですが、firefox も IE もエラーを 出してくれませんでした。 VS2008でjavascriptのデバッグ(ブレークポイントは正しく動作してる)を しかけても同じです。まったくエラーが出ません。 なぜエラーが出ないんでしょうか? IE8、Firefox5.0、VS2008pro (たぶんSP1)、win7 Pro x64
オブジェクトの新規要素の定義の仕方を学べば分かる。
スレチでしたらすみません。 以下のPHPで書かれた一行をjavascriptで書き直すとどうなりますか? foreach ( $society as $person) $person['age']++;
ここは、JavaScriptを自ら学ぶ人のための質問スレッドです。 こうこう書いてみたけど、上手く動きませんとかならまだしも丸投げはスレチです $societyが単純な配列ということならforループでjsの配列をぐるぐる回せばOK PHPのforeachに似たfor-inループもあるけど PHPと同じ感覚で配列に使うと不具合の元になります
357 :
355 :2011/07/02(土) 02:03:41.43 ID:???
>>356 一応、for-in文には行き当たったのですが、どう適用させればいいか分からず聞いてしまいました
言葉足らずですみません。
自分自身まだ全体の構文が把握出来ていなかったため出直してきます
ありがとうございました。
テキストボックス・テキストエリアの内容が変更されたら 即座に(つまりonchangeのようにblurを待たずに)何か行う、という処理は やはりsetIntervalで監視するしかないのでしょうか 何となくムダが多いなぁと感じてしまうのですが・・・
onkeypressは?
基本的にsetInterval系は、ブラウザ上でゲームするとかビジュアル的な効果を狙う、 以外には使いたくないよな。 何もしてないときに一生懸命ぐるぐる動いてるのを想像すると嫌だw
>>335 さん
>>338 さんありがとうございます
alert(1)で出てきました
ポップアップって単語で調べたらいろいろあって勉強になりました
>>362 addEventListener('textinput'... じゃなくて
addEventListener('textInput'... な。
>>336 企業でも使うとこは普通に使うよ。
最近の新規プロダクトは大体使ってるように思うけど。
独自でやってるとこは何か特殊な事情があって使えないとか、思想や方針に合うのがないとか、jQueryみたいなデファクトスタンダードなライブラリがない頃に実装したとか、そんなとこだと思う。
ライセンスはあんまり関係ない。
MDNの情報は古いことも多いんだよな
>>367 Chrome 12.0.742.112でテキストエリアにいくつか入力してみたら
ちゃんとテキストエリアのvalueがConsoleに出力されてるよ?
>>369 ごめんなさい。その通りでした…。
コンソール見てるとどのDOMツリーを見てるか混乱するので、間違えないようpre要素の出力するようにしました。
http://jsfiddle.net/F9wmc/5/ 今後は textinput で実装されるでしょうから textinput, textInput の両方を指定してみましたが、両方対応している実装があったら二重に動作してしまいますね。
'ontextinput' in document が効かないのでやりにくいです…。
372 :
358 :2011/07/02(土) 21:29:02.18 ID:???
皆さんありがとうございました、結局onkeyupを使うことにしました html5勉強しないとなぁ・・・ ただ、今回は必要ではなかったのですが、 setInterval方式だと入力確定前(enter押す前)でも内容が取れるという利点があるようです 何にせよありがとうございました
PHPのimplodeのように配列を文字列として結合したいのですが a=[1,2,3,4,5];s="";for(i=0;i<a.length;i++)s+=a[i];alert(s); のようにforで結合するより効率の良い書き方をご教示お願いします
>>375 Array.prototype.join
377 :
374 :2011/07/02(土) 22:33:24.34 ID:???
>>374 32行目で「Uncaught SyntaxError: Unexpected identifier」
よく見ればわかる
>>374 なんかもうこの辺りがおかしい
function list(){
document.getEleentById("list").innerHTML = msg;
}
}
<div id="list"></div>
このlistはmsgをid=listの所に入れたいのはわかるが
どこで実行するのか、このmsgは何なのかすらないし
どなたかご教授下さい
ttp://www.pelicanhotel.com こちらのメニューリンクのようなマウスオーバーで
文字がスライドするメニューを作成中です。
文字がcloneで二重に表示されていて(cssで隠れています)
それがスライドしてくるようになっているのですが
同じ文字ではなく、違う文字を表示させるにはどのように記述すればよいでしょうか?
mootoolsのリファを見ましたが、cloneを何に変えればいいのかわからなくて・・・
どうか、よろしくお願いいたします。
サンプルは
>>1 にあげられているサイトを使ってくれ
>>377 ;の閉じ忘れがあまりにも多すぎ
getEleentByIdってなんじゃそりゃ
getElementByIdでしょう
それと段落あげるのはスペースじゃなくてTab使うほうが見やすい
>>377 num = new Array();
num2 = new Array();
↓
var num = new Array();
var num2 = new Array();
にしよう、ソース見たけど突っ込みどころがあまりにも多すぎる
;の閉じ忘れとかはちゃんと確認しよう
>>376 ありがとうございます
このように書いてみたのですが結合できませんでした
間違っている箇所をご指摘お願いします
a=[1,2,3,4,5];a.join();alert(a);
>>385 join()は値を返すだけでa自体を変更しない。別の文字列を入れる変数を用意してやればいい。
alert(a.join("")) 接着剤としての引数も必要。
>>386 ありがとうございます
破壊的なものだと思って勘違いしてました
既読判定についてどなたかご教授ください。 リンクをJavaScript内にで記述してるのですが、 IE8で見ると既読の履歴が残せない状態です。 (クリックした瞬間は既読になり画面をリロードすると未読の青文字になる) IE6だと既読の履歴がずっと残るのですが、、、 hrefにアドレスを書けば履歴として残るのは確認しているのですが、 functionの中にアドレスがある状態でも履歴として残す方法はありますでしょうか? function open(){ window.open("リンクのページ") } <a href="javascript:open()">Link</A>
>>377 たぶんこうやりたいんだろうと勝手に解釈して作った、1レスに収まるようにしたから読み安く分割してくれ。ちゃんと何が悪かったか元の見直せよ
<html><head><title>サンプル</title>
<meta http-equiv="content-script-type" content="text/javascript">
<script type="text/javascript"><!--
var m = 0;var num = new Array();var num2 = new Array();
function add() {
var name = document.getElementById('name').value;
var comment = document.getElementById('comment').value;
if (name == ''){
name = "名無しさん";
}if (comment) {
num[m] = name;
num2[m] = comment;
if(m < 31){
m++
}else{
num[m].shift();
num2[m].shift();
}
}var str;
for(var i = 0; i < num.length; i++) {
str = num[i] + ":" + num2[i] + "<br>";
}document.getElementById("list").innerHTML += str;}
// --></script></head>
<body>
<h1>チャット</h1>
<div id="list">teste</div>
<hr><form>
名前:<input type="text" id="name"><br>
コメント:<input type="text" id="comment">
<button onClick="add()">書き込み</button><br>
</form></body></html>
>>394 俺が勘違いしてるんでなければHTMLを書き直せば済む話なんだが…。
レス番を名前にするぐらいしてくれないか? どれが誰だか前のレスをいちいち確認しなきゃならん こんなことテンプレに書くまでもないと思っていたが、やはり書くべきなんだろか
レスありがとうございます。 すみません、言い忘れておりました スライド後の文字を変えたくて・・・ たとえばaaaaaをbbbbがスライドしてくるようにしたいんです これもHTMLで大丈夫なんでしょうか?
400 :
380 :2011/07/02(土) 23:13:34.59 ID:???
>>399 リロード押したら名前欄が消えて、
規制で書き込めませんでした(TT)すみません
>>401 Array.prototype.map
mapってさブラウザ選ぶんじゃなかったけ?Firefoxしか対応してなくね?
406 :
380 :2011/07/02(土) 23:38:19.69 ID:???
>>380 ヒントだけでも教えてくださる方はいらっしゃいませんでしょうか・・・
>>406 アンカーテキストはHTMLに書かれているんだからそちらを修正すべし
>>405 散々既出なんだが、MDCは情報が古い
日本語版は特に古い
英語版でさえ古いこともあるが、今回は英語版を読めばわかる
今でも同色で文字隠す人いるのね
410 :
380 :2011/07/02(土) 23:57:11.78 ID:???
>>407 度々、ありがとうございます。
アンカーに記述を追加するということでしょうか?
てっきりcloneで文字をもう一回表示させてるはずだから、
それを変えればいいんだー!と、頭の中で思ってました(TT)
IE9でブラウザのアドレスバーでwindow1=window.open();window1.document.open();window1.document.write("test"); を実行しても実行が停止させられてしまいます 他の主要4つのブラウザは実行できました IE9で実行するにはどう書くとよいでしょうか?
413 :
380 :2011/07/03(日) 00:14:54.05 ID:???
>>411 現実逃避でガリガリ君食べてたらおそくなりましたorz
わああああ!!こ、これです!!
ありがとうございます(TT)ソース拝見させていただきます!m(_ _)m
>>412 IE9 はアドレスバーから JavaScript を実行できません。
専門スレのコテハンって大抵煙たがられるものだけど 何だかこの人フツーにいい人だね、最初警戒してたけど
test
このスレは奇跡だからな
>>416 このスレで性質が悪いのは一部の無名の回答者だけだよ
>>414 ページが見つかりません
申し訳ありません。お探しの内容は見つかりませんでした。
IE9クズすぎ アドレスバーから実行したぐらいでセキュリティもくそもねえだろが
アドレスバーから実行する必要性もないから困らないけどね URLエンコード面倒だし
そのブラウザが対応するjavascriptのバージョンを取得する方法ってありませんか? 1.5とか1.7とか
>>424 <script language="JavaScript1.5">alert('JavaScript1.5');</script>
<script language="JavaScript1.7">alert('JavaScript1.7');</script>
languageとかネタでもやめてくれ
>>422 IE以外もその仕様になるとどこかで見た気がするが
画像並べて1個開いたら同じページ上に拡大表示されて 左右のボタンで画像を辿れるようなイメージなんだけど jQuery使わないコードが頭の中に流れない jQueryを読み解く気力が湧かないのでどこかにまんま書かれてるようなサイトはありませんか? jQueryを使うと負けな気持ちになっています
他人に丸投げるほうが負けた気持ちになる
ボタンでdiv要素を追加するとき、idを追加すると思いますが以下ではボタンを押すたびに同じidのdiv要素が追加されますか? <script type="text/javascript"> function addElement() { var element = document.createElement('div'); element.id = "id"; element.innerHTML = "hogehoge"; element.style.backgroundColor = 'bule'; var objBody = document.getElementsByTagName("body").item(0); objBody.appendChild(element); } </script> <button onclick="addElement()">追加</button>
=じゃ上書きされる 追加だったら+=
めんどくさいから
質問する方が面倒くさいと思うんだがなあ
<div id="id">hogehoge</div>が大量に並ぶの? id重複していいの?
>>72 - の繰り返し?重複しちゃダメに決まってる。
> ボタンでdiv要素を追加するとき、idを追加すると思いますが > id重複していいの? この辺何をいいたいのかわからない id追加する常識なんてないし、id重複を避ければ済む話なのに
目的はこのスレ内の少し前の話を蒸し返すこと
function addElement() { var objBody = document.getElementsId("sample"); var element = document.createElement('div'); element.id = "id"; element.innerHTML = "hogehoge"; element.style.backgroundColor = 'red'; objBody.appendChild(element); } function revElement() { var objBody = document.getElementsId('sample'); var element = document.getElementsId('id'); objBody.removeChild(element); } これを外部に貼り付けて <button onClick="addElement()">要素を追加</button> <button onClick="revElement()">要素を削除</button> <div id="sample">a</div> これを本体に貼り付ける 動かないんだけど理由がわからない、追加すらされない
> getElementsId これ
メソッド名みれば分かりそうなものだが…英語できないと難しいか
見てると名前にレス番入れない人が多いね
>>396 はテンプレに入れるべきかな
だからID出せってさんざん言われてただろ!
449 :
Name_Not_Found :2011/07/03(日) 20:34:53.11 ID:bT+Jn3Bs
window.foo.bar.bazがあるかどうか、 bazどころかbarもfooもない場合でも例外を返さずに判断する方法があれば教えてください &&とかでつながず一回で
>>442 そうでしたか
IE9でmapが対応してるか調べたくてバージョンが知りたかったのですが難しいですね
if ((function(){try {if (window.foo.bar.baz)return false }catch(e){}return false;)()) { //オススメしない。 }
453 :
449 :2011/07/03(日) 21:07:19.82 ID:???
454 :
443 :2011/07/03(日) 22:09:46.77 ID:???
function adElement() { var objBody = document.getElementById("sample"); var tempyn = document.getElementById("id"); if(tempyn.childNodes.length > 0){objBody.removeChild(tempyn);} var element = document.createElement('div'); element.id = "id"; element.innerHTML = "hogehogehoge"; element.style.backgroundColor = 'blue'; objBody.appendChild(element); } idがidのdivがあったらそれを消して新しくidがidのdivを追加して idがidのdivがなかったらidがidのdivを追加するようにしたかったのですが、 前者はうまくいったけど後者がうまくいきません 何が原因でしょうか?
456 :
443 :2011/07/03(日) 22:32:09.85 ID:???
>>455 childNodesでif文内に入ってしまって存在していないのを削除しようとしてエラーになってるってこと?
如何すればいいんだろう
458 :
443 :2011/07/03(日) 22:44:48.57 ID:???
>>457 そうするとif文に入らないからそのままcreatElementしてくれるんでないの?
if文に入らないとそのまま終わるとか?
>>458 var hoge = null;
if (hoge.childNodes)
461 :
443 :2011/07/03(日) 22:53:34.60 ID:???
>>459 if文がエラーで吹っ飛んでんの?
どういうif文にすればいいのか想像付かないけど
nullじゃなかったらif文通れでうまくいくのかな?
いろんなブラウザで試さないと
462 :
443 :2011/07/03(日) 22:54:54.30 ID:???
ぬるぬるうっさいやつらだな
undefinedとnullだけは、メソッド及びプロパティーを取ろうとするとエラーになる。
466 :
Name_Not_Found :2011/07/04(月) 00:10:33.18 ID:aTnBzz/e
質問です ある文字列の文字数を取得したいのですが、何故か何を入れても1になってしまいます 何が原因なのかよく分かりません 何か思いつく所があれば指摘して下さい 以下コードです //テキストボックスの入力値を取得(hoge) hoge = document.age.sage.value; //入力値から正規表現で一部を取得(hige) hige = hoge.match(/ごにょごにょ/); //※ここまでは期待通りの動作をしています //取得した文字列の文字数を取得(hage) hage = hige.length; これで最後の「hage」がいつも1になってしまいます テキストボックスの文字列「hoge」の文字数は正常に取得出来るので、 正規表現で一部を抽出したのが何らかの原因ではないかと思っているのですが…
matchの戻り値は配列なんだなこれが
469 :
Name_Not_Found :2011/07/04(月) 00:22:16.13 ID:aTnBzz/e
>>467 つまり配列の数が返ってきていたわけですね…完全に忘れてました
ありがとうございました
470 :
Name_Not_Found :2011/07/04(月) 09:09:44.66 ID:nehPZ6mQ
471 :
Name_Not_Found :2011/07/04(月) 09:10:38.67 ID:nehPZ6mQ
あ、勘違いした 動いたよ?
どうでもいい事だけど commentが空だからといってnonameにする事はないだろう
474 :
Name_Not_Found :2011/07/04(月) 14:16:12.11 ID:0pcDaBCl
すいません質問です IE7までは通常に動いていたスクリプトがIE9になったら動かなくなり 表示もされません デバッグ機能を使ってみたところ 「オブジェクトは 'createTextNode' プロパティまたはメソッドをサポートしていません」 と出ました、FireFOXでは普通に動きます どういうことなのでしょうか?
475 :
Name_Not_Found :2011/07/04(月) 14:35:02.83 ID:nehPZ6mQ
>>474 ◯◯◯◯.createTextNode("文字列");
みたいな使い方していると思うけど、その◯◯◯◯じゃよ
なんて書いたか晒してみんさい
「オブジェクトは 'createTextNode' プロパティまたはメソッドをサポートしていません」 ということでしょう。 そのオブジェクトはdocument?違うなら自分で作ったやつ?そのオブジェクトが何なのか判断できるコードか何かを。 たぶんエラーメッセージと一緒に行番号も表示されているはず。 表示されていないのならスクリプト内を「createTextNode」で検索してそれが使われているオブジェクトを確認
477 :
Name_Not_Found :2011/07/04(月) 18:53:47.93 ID:FkTd0Ky7
あるオブジェクトにプロパティが何かひとつでもあるときとないときとで処理を分けたいのですが どうすればいいですか? var object = {}; if (object.hasOwnProperty("*")) { //←何かひとつでもプロパティがあれば、みたいなつもり //あるとき } else { //ないとき } こういう感じで既存のメソッドとか演算子とかで短く真偽値を返す方法があれば教えてください for inで回すとかになりますか?
>>478 それobj={}でもtrueになるよ
for (var key in obj) {
if (obj.hasOwnProperty(key)) len++
}
どうもありがとうございます やっぱりfor inで回すことになりますか? ひとつでもプロパティがあればfalseを返してすぐに抜ければいいので(ひとつもない場合はもちろんすぐに抜けられる) for inでも別にいいんですが 外部関数にするにしても少しかさばるので 配列の場合のlengthプロパティを見るみたいに短く書けたりするのかなと
>>480 [i for (i in obj)].length
>>480 一応ChromeやFirefox 4以降ならES5のメソッドで簡潔に書けるかな?
var obj = {};
if (Object.getOwnPropertyNames(obj).length) {
// プロパティがあれば実行
} else {
// プロパティがなければ実行
}
>>481 どうもありがとうございます
動きました
この「i」って「var」が付いていないのにグローバルになっていないっぽいですが実際にはなっていますか?いませんか?
グローバルになっていない場合はどういう仕組みなんでしょうか
>>482 ありがとうございます
そういうのができたんですね
chromeで動きました
484 :
Name_Not_Found :2011/07/04(月) 19:44:58.20 ID:0pcDaBCl
485 :
Name_Not_Found :2011/07/04(月) 20:02:21.89 ID:0pcDaBCl
ありがとうございました IE9、documentで検索したら解決できました <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> これが必要だったんですね IE9は素晴らしいブラウザですね
481は配列「[]」が無名オブジェクトになっているからその中にローカル ってことなんでしょうか 配列「[]」の中の書き方がまったく読み下せません objのキー(「i」)を元に配列の各要素を作っているという結果は確認できましたが
Quirksモードでもdocument.createTextNodeは動くけど、
>>485 はどういうことなの?
昔のゴルファーが見つけたテクニックをただ真似てるだけの人がほとんどだと思う
489 :
Name_Not_Found :2011/07/04(月) 22:39:24.36 ID:0pcDaBCl
>>487 IE9でも互換モードに変更すれば普通に動きますが通常?のデフォルト設定だと
動きません
メタタグを増やしてやるとデフォルトでも動くようになります
>>489 通常っていうのやめろっ!!!!!!!!!
標準モードといえ!!!!!!!!!!!
互換モードで作るな!!!!!!!!!!!!!
いつも標準モードで作れ!!!!!!!!!!!!
>>489 IE7互換モードにするならIE9にする意味がほとんどないよ
それは一時しのぎに使うものだ
しのぎというかただの動作テスト用だな
>>489 当たり前だが、IE9標準モードだとdocument.createTextNodeは動く
>>484 みたいな断片的コードじゃなくて再現するコードを晒してくれ
document.createTextNodeがないってのは何モードなの?
Lモード
PHPのheaderはjavascriptでは書かれますか?
497 :
468 :2011/07/05(火) 01:57:01.47 ID:???
>>481 Chrome で SyntaxError
ブラウザ依存じゃあ使えないなー
499 :
Name_Not_Found :2011/07/05(火) 07:17:41.75 ID:Klp8Cn8X
準拠じゃないのは分かるんだけど プロトタイプチェーンをたどるためのオブジェクト(foxでいうところの__proto__)って IEでは完全に見えないの?代替になるものはないの?
>>499 ES5 的には Object.getPrototypeOf (IE9+) で十分という判断なんじゃないかな。
あとは、constructor とか…。(__proto__ を置き換えるものではないですけど)
zipであげんなカス
503 :
Name_Not_Found :2011/07/05(火) 13:05:17.67 ID:aenpc/4y
>>493 全部は長すぎて無理なんですが
tbCalendar.appendChild(trCaption);
var trWeek = document.createElement("tr");
for (i = 0; i<7; i++) {
var tdWeek = document.createElement("td");
with (tdWeek) { appendChild(document.createTextNode(aWeek[i]));}
trWeek.appendChild(tdWeek);
if(i==0) { tdWeek.style.color = "#ff9999"; }
if(i==6) { tdWeek.style.color = "#00bfff"; }
}
504 :
497 :2011/07/05(火) 13:28:38.60 ID:???
505 :
Name_Not_Found :2011/07/05(火) 15:23:27.44 ID:/CYNsXR9
>>503 >>1 で推奨されてんだからコード晒しサイト使おうよ…
ちゃんと見てないけど、とりあえず最初のほうで変数名書き間違えてる
507 :
Name_Not_Found :2011/07/05(火) 19:35:01.95 ID:APP22478
教えてください function func() { alert(this); nested1 = function() { alert(this); } var nested2 = function() { alert(this); } this.nested3 = function() { alert(this); } nested1(); nested2(); this.nested3(); } var obj = new func(); ローカル変数nested2に代入した無名関数内のthisだけ どういう理屈でグローバルオブジェクトなんでしょうか?
質問です javascriptで変数宣言する時の「var」ですが この「var」って何の略なんですか?
509 :
508 :2011/07/05(火) 19:46:33.54 ID:???
例えば「new」は「新しい」、「Array」は「配列」、「split」は「分けられる」 という意味がありますが、この「var」だけはよく意味が解りませんでした
>>508 > 変数宣言
ここで質問する前に、変数を英語で何と言うか調べろ
急いでるので早く答えてください
512 :
508 :2011/07/05(火) 19:48:32.42 ID:???
>>510 なるほど!
Variableの略なんですね、ありがとうございます!
あ、ごめん間違えた忘れて
>>507 関数ごとに this が生成されるから
518 :
507 :2011/07/05(火) 21:20:06.63 ID:???
すみません、一部表現を間違っていました
×ローカル変数nested2に代入した無名関数内のthisだけ
○ローカル変数nested2に代入した無名関数内のthisはグローバルスコープでもないのに
>>517 ありがとうございます
そうなると、this.nested3に代入した無名関数内のthisはobj自身を参照するというのは、
func()のローカル変数(メソッド)ではなく、objオブジェクトのメソッドだからといった感じなのでしょうか
519 :
Name_Not_Found :2011/07/05(火) 21:33:55.73 ID:/CYNsXR9
variable
>>506 IE には HTMLElement.document っていう独自拡張プロパティがあって
IE8 までは HTMLDocument を、IE9 では DocumentFragment を取得するようになってるみたいだ
with (tdWeek) {
style.width = "27px";
style.padding = "0";
style.textAlign = "center";
appendChild(document.createTextNode(aWeek[i]));
}
だからこういう書き方をすると、IE では
tdWeek.document.createTextNode(aWeek[i])
を参照していることになる
DocumentFragment に createTextNode メソッドはないから、エラーになる
521 :
519 :2011/07/05(火) 21:37:35.04 ID:/CYNsXR9
うわリロードしてなかったすみません
522 :
508 :2011/07/05(火) 21:38:55.25 ID:???
わざわざあざっす!
523 :
507 :2011/07/05(火) 21:39:33.77 ID:???
this.nested5 = nested2; this.nested5(); メンバメソッドとして代入された無名関数nested2()は今度はobj自身を参照しました 関数リテラル内のthisに関しては、var キーワードで宣言された変数への代入なら グローバルオブジェクトを参照し、あるオブジェクトのメンバ変数への代入なら そのオブジェクト自身を参照する、といった感じでしょうか もう少し勉強してみます
524 :
Name_Not_Found :2011/07/05(火) 21:45:33.65 ID:Klp8Cn8X
>>523 thisってのは「どのオブジェクト」のプロパティとして呼ばれたかの「どのオブジェクト」を指す
だから同じ関数オブジェクトでも呼び出し元が変わればthisが変わる
>関数リテラル内のthisに関しては、var キーワードで宣言された変数への代入なら
その関数をグローバルで呼んだらthisはグローバル
obj.func()とかって呼んだらthisはobj
525 :
497 :2011/07/05(火) 22:09:14.63 ID:???
526 :
507 :2011/07/05(火) 22:20:31.71 ID:???
>>524 ありがとうございます
>その関数をグローバルで呼んだらthisはグローバル
"関数 func() 内のローカル変数 nested2 に代入した" 関数リテラル内のthisなので、
func()をコンストラクタとしてオブジェクト化した場合には
>>507 のコード2行目のthisのように
グローバルオブジェクトではなく、obj自身を参照するものと思い込んでいました
527 :
Name_Not_Found :2011/07/05(火) 23:59:58.67 ID:/CYNsXR9
>>525 test5.jsはなんなん?node.js?
<form method="post" name="hoge-form" action="fuge.php"> <input type="text" name="hage"> <input type="text" name="bar"> </form> <script> document.hoge-form.submit(); </script> とやるのですが このフォームのhageテキストをjavascriptで計算してから送信したいです hageフォームには数値が入って、その数値を82倍したいのですがどうすればいいのでしょうか? phpだったら$_POST["name"]で82倍すればいいのですが、どうしても送信する前にクライアント側で82倍したいのです
>>528 そんな動かないコード平気で貼ってる奴を相手にするもの好きが
いるかどうか。もうちょっと自分で修行してから来たら?
ヒント: 「-」は引き算
530 :
528 :2011/07/06(水) 01:27:08.62 ID:???
すんません、hoge-formの所はhoge_formで
formのsubmitイベントに、hageを書き換える関数を登録すればいい 関係ないけどHTML5じゃなければtype属性は必須
return {"slider" : slider} typeof accordion === "object" accordion.slider === 関数内のslider 使い方はnew accordion.slider(); accordionがオブジェクトなので、色々追加できるのが利点かな。
534 :
532 :2011/07/06(水) 02:24:44.03 ID:???
>>533 そういうことですか、理解できました。
ありがとうございます。
ちなみにこれって
var accordion = new function(){
this.slider=function(){…
みたいにするのとどう違うんでしょうか?
この宣言の仕方でもaccordionはオブジェクトだし、プロパティも追加できますよね?
new はベースが同じで一部違うものを複数作るときに使う感じだから、この場合は適さないんじゃないかな。 たしかに、出来上がったものは同じになるけど。
それFlashが使われてる
まじですか あきらめます
539 :
528 :2011/07/06(水) 13:28:01.81 ID:???
>>541 なるほどー、getElementでvalueの値を書き換えればいいんですね
ありがとうございます
flashをhtml5に変えてくれるサービスあったよね。 ↓541
| ↑ |___|
>>520 ありがとうございます
でも別の書き方が全く思い浮かびません・・
とりあえず苦し紛れにこう改変したら動きました with (tdWeek) { style.width = "27px"; style.padding = "0"; style.textAlign = "center"; } tdWeek.appendChild(document.createTextNode(aWeek[i])); trWeek.appendChild(tdWeek); if(i==0) { tdWeek.style.color = "#ff9999"; } if(i==6) { tdWeek.style.color = "#00bfff"; }
最終的にこうなりました
http://jsfiddle.net/YXwvV/2/ これは万年カレンダーなのでよかったらみなさんも使ってください
メモ帳にそのままコピペして○○.jsファイルに適当に名前つけて拡張子を変えて
HPのどこかに
<script src="○○.js" type="text/javascript"></script>
書くだけです
上記ですが <div id="calendar"></div> もいります 誰も必要としないと思いますがw
546 :
Name_Not_Found :2011/07/06(水) 15:35:08.77 ID:7hBROd9n
>>544 ところで、ハッピーマンデーって
かならずそのルールで適用されているもの…なのか?
自前で持ってるカレンダーのプログラムは
休日とか、その手のイベント情報は別途データファイルを
用意するようにしているのだが、更新が面倒なんだよな…
Date.parse()というのはクロスブラウザでバグなどありますか?
なぜ、今までにwith使うなってレスないんだ。 withでないといけない理由ってないでしょ?
with(Math){eval(hoge);}
>>546 万年カレンダーなので過去までもどって試してみましたが
完璧にあってましたよ
with使うとあんまりよくないんですか?
IE8までの時点でバグに気付かずにwith使い続けたから
>>474 になったんでしょう
552 :
Name_Not_Found :2011/07/06(水) 20:55:44.72 ID:7hBROd9n
>>550 おお、そうなんだ
withの件は遅い、ってのと今回みたいなことがありがちなんで
あんまり使わないなあ
553 :
Name_Not_Found :2011/07/06(水) 21:58:32.05 ID:GCYSS/k7
初心者ですみません。 今Cakephpを使用しています。 index.ctpに <embed src="フラッシュファイルパス" type="application/x-shockwave-flash" width="200" height="160"> として、このオブジェクトをクリックしたときに値(value=1など)をポストしたいです。 その時にどのように記載すれば宜しいでしょうか。
<div> <div class="left"></div> <div class="left"></div> <div class="clear"></div> </div> とかを何かボタン押したときにどっかに表示させるJavaScript組むとしたら 構造のためだけに最低でもdocument.createElementでdiv4つ生成する必要があるの?
×あるの? ○ありますか?
557 :
Name_Not_Found :2011/07/06(水) 22:48:00.33 ID:7hBROd9n
>>555 HTMLの話はスレ違いだー!
<div class="clear">がフロートをクリアするためだけにあるんだったら
要らない子だな
var a = document.createElement('div'); を appendChildで2回出力したりできないの?
560 :
Name_Not_Found :2011/07/06(水) 23:37:07.34 ID:7hBROd9n
>>558 できない
appendChildはprintじゃない
createElementで生成されたひとつのノードをappendするメソッドだから
document.createElement("div")は一回だ! <body> <script> var div = document.createElement("div"); div.appendChild(div.cloneNode(false)).className = "left"; div.appendChild(div.cloneNode(false)).className = "left"; div.appendChild(div.cloneNode(false)).className = "clear"; document.body.appendChild(div); </script> </body>
>>561 cloneNodeというのを使えばいいのですね
ありがとうございます
563 :
Name_Not_Found :2011/07/07(木) 02:26:38.28 ID:j7WEvmyM
オライリーの詳解JavaScript(第三版)で勉強しているのですが、「11.6 静的スコープとClosure」で var val = 'global'; function f() { var val = 'local'; function g() { //f.g = function() { alert(val); } } f(); f.g(); // 'local' が表示 こんなコードがあったのですが、動かないですよね? コメントアウトした箇所のようなメソッドへの代入なら可能ですが 古い版だしミスなのかな
564 :
Name_Not_Found :2011/07/07(木) 02:43:52.23 ID:Wiz+ssd0
探したけど、エラッタみつからんかったわ 第5版おすすめしておきます
Netscape4.0あたりで動くそうな 第三版が出たのは1998年 いくらなんでも古すぎるんでないか
テキストエリアとかから入力された半角の'や"のクォートをエスケープしたほうがいいというのは知ってますが 万が一の為に全角のクォートとかもエスケープしたほうが良いのでしょうか?
なんでエスケープ処理が必要なのか考えればわかるだろ
568 :
563 :2011/07/07(木) 11:13:13.09 ID:???
>>564-565 ありがとうございます、第5版買おうと思います
// PDF版買ってみようかな
569 :
Name_Not_Found :2011/07/07(木) 11:40:23.09 ID:WRF+jSw6
<script language="JavaScript"> <!-- function Jump(){ window.open("tumibatu/tumibatu.cgi","tumi","directories=no,location=no, menubar=no, resizable=yes, scrollbars=yes, status=no, titlebar=no, toolbar=no,",true) } //--> </script> <A href="JavaScript:Jump();" class="tumi"> CGIゲームを起動するウインドウを表示させたいのですが そのウインドウ内でバックスペースとエンターキーを無効化させるには どうすればいいでしょうか?
>>566 必要ない
全角にしたら"も'も\も意味を持たない
<form method="post" action="
https://books.step.rakuten.co.jp/rms/mall/book/bs/Cart ">
<div>
<span class="unit">個数 </span>
<input value="1" type="text" size="4" name="units" id="units">
<input value="買い物かごに入れる" type="submit">
<input type="hidden" value="1" name="inventory_flag">
</div>
</form>
↑
これをループさせたいです。
今勉強しはじめたばっかですが、どうやらHTMLタグ自体をJAVASCRIPTでループさせる事は無理っぽいことに気が付きました
上のタグと全く同じ性質を持つjavascriptの関数を自分で調べて見つけて書き直すという作業をしなきゃいけないんでしょうか?
あと、リンク先が(
https://books.step.rakuten.co.jp/rms/mall/book/bs/Cart )
「混雑しています。しばらくお待ちください」とかのエラーが出たら上のタグをループさせて
「住所を入力してください」とかの成功メッセージが出たらループを抜けるようにしたいです。
リンク先の状況を元のスクリプトにフィードバックすることは可能でしょうか?
572 :
Name_Not_Found :2011/07/07(木) 17:27:10.59 ID:Wiz+ssd0
>>569 document.body.addEventListener("keydown",function(evt){
var kc = evt.keyCode;
if(kc == 8 || kc == 13) evt.preventDefault();
},false);
こんな感じで、evtオブジェクトがキーコードってのを持ってるから
それで判別しなはれ。確かBS=>8、enter=>13、だったはず
573 :
Name_Not_Found :2011/07/07(木) 17:30:26.41 ID:Wiz+ssd0
>>571 ループさせる、の意味がいまいちわからん。
何個も書くのが面倒だ、って話?
後半も良く解らん。
「ループさせる」を出来るだけ一般的な用語で!
>>573 meta http-equiv="refresh"つかえばいいんじゃね?ってことじゃね?
>>573 あれは、ようは楽天のページなわけですよ
で人気の転売商材ってのは何度「買い物かごに入れる」をクリックしても「混雑してます」のエラーがでてくる
で、売り切りになっちます。
だから、「買い物かごに入れる」を自動で何度も押せるスクリプトを自作したいわけです。
javascriptの知識が無いから
for(i=1から10まで)(
<form method="post" action="
https://books.step.rakuten.co.jp/rms/mall/book/bs/Cart ">
<div>
<span class="unit">個数 </span>
<input value="1" type="text" size="4" name="units" id="units">
<input value="買い物かごに入れる" type="submit">
<input type="hidden" value="1" name="inventory_flag">
</div>
</form>
)
見たいなループができると思ったんだけど、どうやらできないみたいでどうしようかなと
>>566 テキストエリアから取得した文字列中の引用符って、半角だろうが全角だろうがエスケープする必要あるんかぇ
てかエスケープって何
後、後半はリンク先が 「混雑しています」のメッセージの時,上のfor文を繰り返すようにしたいって事です 楽天の買い物ページに普通につながったら、もう「買い物かごに入れる」をクリックする 必要はないわけだから
それってF5アタック? last-modifiedやcontent-lengthなども返さないっぽいからxhrでHEADだけ取得とかもできなさそうだし
堂々としすぎだねこれね
>>578 リンク先のエラーページでf5アタックだと、例えば、リンク先に「買いたい商品の個数の情報」だとかが、
普通に「買い物かごに入れる」をクリックした時のように送信されないんじゃないかという危惧が・・・・
なんか、思ったより、これをスクリプトで自動化するって難しいんですね・・・・
581 :
Name_Not_Found :2011/07/07(木) 19:35:58.95 ID:pCCab3sJ
オブジェクト(配列、連想配列)そのものに対しては コンソールログでは中身(プロパティ)も取得できているのですが 直接プロパティにアクセスするとundefinedが返ってきます 何が原因ですか? var foo = {}; //まず空のオブジェクトを作り foo["bar"] = "baz"; //あとからプロパティを追加しています(ループで) console.log("foo", foo); //Object //各プロパティも取得できています console.log("foo.bar", foo.bar); //undefined //でも直接プロパティにアクセスするとだめ console.log("foo[\"bar\"]", foo["bar"]); //undefined //書き方を変えても同じ プロパティ名は間違っていません for inしても空っぽで、 Object.keys(foo)もObject.getOwnPropertyNames(foo)も 空っぽの配列が返ってきます var foo = { bar: "baz" }; こんな風に最初から値を設定してみたらそれは取得できたので 追加の仕方に問題があると思うのですが オブジェクトそのものをコンソールログで見た場合はちゃんとプロパティも追加されているので 行き詰まっています 自分にとっては初めての出来事なのですが よくある失敗ですか? google chromeです
何ら問題なく出力されるが・・・?
584 :
581 :2011/07/07(木) 20:22:54.55 ID:???
> foo["bar"] = "baz"; //あとからプロパティを追加しています(ループで) の部分でもう少し複雑な処理をしています(オブジェクト「foo」に触れるのは「foo["bar"] = "baz";」の部分だけですが) Objectを見るとプロパティが追加されているのに プロパティに直接アクセスすると(またはfor in等で取得しようとすると)undefinedが返るケースの 考え得る原因を教えてほしいです 直接参照できないような特殊な内部属性がセットされているとか・・・ ってそういうのはユーザが作ったものにはセットされないですよね
585 :
581 :2011/07/07(木) 20:35:28.21 ID:???
>>584 > プロパティに直接アクセスすると(またはfor in等で取得しようとすると)undefinedが返る
すみません訂正です
プロパティに直接アクセスするとundefinedが返る
(for in等で取得しようとするとそもそも列挙されない(プロパティがないことになっている))
>>583 XHRで内容取得して書き換えてる
書き換えるついでにハッシュも変更して固有のようなURLとしてる
>>584 再現できるコードを
もうちょっとループ周りのコードを書いてくれないとなんとも
>>1 >【サンプルコード】現象を再現可能な最小限のコードを書いてください。
588 :
Name_Not_Found :2011/07/07(木) 20:53:21.80 ID:Wiz+ssd0
>>577 事情はわかったけど、JSだけでやるのは面倒くさいだろうなあ
そもそも<form>だけ自前で作ってポストするのは
クロスサイトリクエストフォージェリ対策されてそうだし
グリモンとか、Firebugとかのコンソールで
1. <form>のtargetを別ウィンドウにして
2. <form>をpost()する
3. 別ウィンドウの中身を見て
混雑していますだったら2へ、そうでなければ処理終了
ってすればいいかも知れない。繰り返しはforじゃなくて時間あけて再帰な感じで。
相手のサーバに迷惑かからんように間隔開けて
とかどうだろう
>>588 取り合えず、煮詰まりだったんでアイデアをもらえただけで十分ありがたいです。
さっそく試してみます。
>>589 あとseleniumとかでも簡単にできそう
グリモンでもいけると思うけどね
592 :
581 :2011/07/07(木) 22:11:25.91 ID:???
再現可能な最小限のコードを作っていたら原因がわかったっぽいです 引数としてコールバック関数を要求するメソッドで、それが非同期(?)で動作するっぽくて コールバック関数が処理される前にコンソールログの行が処理されていたみたいです 引数としてコールバック関数を要求するメソッドは実際はaddEventListenerではないのですが 同じような結果が得られました たとえばこんな感じです <body> <script> var object = {}; window.addEventListener("load", function() { object["foo"] = "foofoo"; object.bar = "barbar"; }, false); console.log("object", object); //プロパティ名も値も表示される console.log("object[\"foo\"]", object["foo"]); //undefined console.log("object.bar", object.bar); //undefined console.log("Object.keys(object)", Object.keys(object)); //[] console.log("Object.getOwnPropertyNames(object)", Object.getOwnPropertyNames(object)); //[] </script> </body> コンソールログでもオブジェクト(配列や連想配列)は参照だけを取得している(?)んですね あとからログを見たときには中身が入っているので コンソールログの行が処理された時点でも取得できているんだと勘違いしていました
>>589 どうでもいいが一度辞書で「煮詰まる」の正しい意味を調べることをお勧めする。
正しくは行き詰まりかな
595 :
Name_Not_Found :2011/07/08(金) 17:55:08.87 ID:ZQ5luLuM
この場合は手詰まりじゃないかと
それより迷惑スクリプトじゃないんか
このレスの住民ってGooglemap作れるレベルくらいなん?
firebugで開発ってどうやるのでしょうか?
使い方は人それぞれ 俺はエラー確認ぐらいにしか使ってない
function init() { document.writeln("<form name='form'>"); document.writeln("<input type='button' value='クリック' onclick='s();'>"); document.writeln("</form>"); } function s(){ alert(); } のようにして、別の関数を呼び出したいのですが、反応しません。 function init() { document.writeln("<form name='form'>"); document.writeln("<input type='button' value='クリック' onclick='alert();'>"); document.writeln("</form>"); } のように直接アラートをいれた場合は反応したのですが、何か制約があるのでしょうか?
602 :
Name_Not_Found :2011/07/09(土) 02:15:02.19 ID:MncHMBsU
ライブラリのコメントが/*!で始まっているものがありますけど あれってどういう意味なんでしょうか
>>601 initをイベントハンドラから呼んでない?
ページ読み込み後はdocument.write使っちゃダメよ
604 :
Name_Not_Found :2011/07/09(土) 11:57:49.30 ID:JGHwCsS4
//いろいろと省略しています var string = (function() { var value; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (readyState === 4) { value = xhr.responseText; } }; return value; })(); これはonreadystatechangeの関数が処理される前にreturnされるので stringにはxhr.responseTextの値が入っていませんが、 valueにxhr.responseTextが入ってからreturnさせるにはどうするものですか? setIntervalとかで定期的に中身を確認して中身が入るまで待つことになりますか? onreadystatechangeの関数内で次の関数等の処理に移るのではなくreturnさせたいです。 それでいて無駄な待ち時間もなく。非同期じゃなくなってもいいです。
>>603 ご察しの通りでした。
ありがとうございます。
606 :
Name_Not_Found :2011/07/09(土) 13:05:35.71 ID:7GcqlL5z
必要なところを抜き出して入れてるだけだろ 人名は人名読みみたいな表用意して入力してるだけだろうし 出来んことはないと思うけど
>>604 > valueにxhr.responseTextが入ってからreturnさせるにはどうするものですか?
同期しかねぇ
> onreadystatechangeの関数内で次の関数等の処理に移るのではなくreturnさせたいです。
同期しかねぇ
> 無駄な待ち時間もなく。
同期は他のもろもろがブロックされるけど必要な時間だし、無駄ってわけじゃない
> 非同期じゃなくなってもいいです。
なら同期で
609 :
Name_Not_Found :2011/07/09(土) 16:45:18.67 ID:+XbBnw2/
ラジオボタンの代わりに画像を使いたいのですが 選択すると画像がボーダーラインで囲まれるような処理方法は可能でしょうか。 選択/非選択で画像を2種類用意して切り替えるスクリプトは よく紹介されていてjQueryでもあるようですが、画像1つだけで済ませたいのです。 イメージとしては、ユニクロサイトの商品カラー選択のような感じです。 どうにか教えてください。よろしくお願いします。
普通に CSS ファイルで outline 設定しておいて、class で切り替えればいいと思う
答えてもらえないからってこっちに持ち込むなよ
できるやつがネタとしてやるようなことであって できないやつが他人に丸投げしてまでやることじゃない
614 :
>>604 :2011/07/09(土) 19:56:38.91 ID:???
>>608 どうもありがとうございます
同期以外にいい方法はないってことですか
xhrは同期非同期選べますがxhr以外のイベントハンドラに登録する関数の場合はどうすればいいですか
>>614 まず、xhr以外で非同期なイベントを明示してください
616 :
604 :2011/07/09(土) 21:11:22.63 ID:???
>>616 setTimeout はともかく他は非同期ではないように見えますが
>>616 返せるものは返せば良いけど、returnの時点で見えてない値は
どうがんばっても返せないでしょ。
迷子ねぇ。慣れて下さいとしか。
621 :
604 :2011/07/09(土) 23:20:18.04 ID:???
>>620 レスありがとう
今ちょうどoutsider reflexってサイトの記事を経由して見てたところです
コードの行数が多い場合とかネストが増えすぎた場合とかに試してみようかと思ってます
622 :
Name_Not_Found :2011/07/10(日) 07:09:14.84 ID:UECxZbzv
別のウィンドウ、タブ、フレーム、iフレーム内で実行すると最近のブラウザはだいたい非同期になるYO!
非同期というよりイベント駆動型プログラミングに慣れてないんじゃないかな イベントとクロージャに慣れる方が先だと思う
node.jsの非同期コールバック地獄に堕ちるとわかる
appendChildで追加した要素をフェードインさせるにはどうすればいいですか?
CSS の opacity プロパティ使えば?
var memoizer=function(memo,fundamental){ var shell=function(n){ var result=memo[n]; if(typeof result !== 'number'){ result=fundamental(shell,n); memo[n]=result;} return result;}; return shell;}; //002フィボナッチ数列を第n項まで計算 var fibonacci=memoizer([0,1],function(shell,n){ return shell(n-1)+shell(n-2); }); fibonacci(30)で第30項のフィボナッチ数列の値が出る。 Javascript good partsに載っていたのですが、 memoizer([0,1],function(shell,n)は[0,1]でmemoに配列を代入で fundamentalは関数でshellも関数ということですか? これってクロージャですよね?くわしく説明してください。
appendChildで追加した要素をドラッグさせるにはどうすればいいですか?
addEventListenerつかって、mousedownとmousemoveとmouseupにそれぞれイベント書けばおk.
>>627 > [0,1]でmemoに配列を代入でfundamentalは関数でshellも関数ということですか?
そだね。
> これってクロージャですよね?
fibonacciは生成段階のスコープを保持するね。そこは「クロージャ」ってことでいいと思うよ。
ただ、このプログラムで強調すべきところはそこじゃないっしょ。
shellを表に出したら、何か都合が悪くなるってわけでもないし。
「くわしく説明」とはクロージャのことなのかプログラム自体(再帰)のことなのか
はっきりさせた方がいいんじゃないか。
631 :
Name_Not_Found :2011/07/11(月) 14:02:42.89 ID:J7AHV8xD
すみません。以下オブジェクト内の例えば height、colorの参照方法の書式を教えてもらえないでしょうか? var o = new TR.Widget( { width: 'auto', height: 300, theme: { shell: { background: '#333333', color: '#ffffff' } } } ); alert(o.・・・); お手数ですが、お助け頂ければ幸いです。
TR.Widgetの中はどこ行けば見れるのよ?
facebookかなにか?
634 :
Name_Not_Found :2011/07/11(月) 15:02:01.18 ID:J7AHV8xD
Twitterウィジェットの一部です。
TWTR.Widgetなら o.opts.〜 でいいんじゃないか
質問です そのfunctionを実行したら、次実行させるのには1分間経過しないとできないようにしたいです もうどんな関数使えばいいのかすらさっぱりです
637 :
Name_Not_Found :2011/07/12(火) 06:30:52.47 ID:pM88wZ8X
functionの冒頭で、 実行時のタイムスタンプを保存。 次回実行時にタイムスタンプを見比べて、1分たっていなかったら Exit function みたいな実装が軽くていい。
ふむふむふむ 参考になります
javascriptってexitないけどさ、みんなどうやってんの? 俺は全体do{...}while(false);でbreakよく使ってるけど try catchの方がいいのかね
641 :
Name_Not_Found :2011/07/12(火) 18:33:23.95 ID:vVO9wX62
>>640 そのexitは本当に必要なものなのか?
do{}while()でbreakは古のプログラマの一子相伝の技法として好んで使用したらしい(プロジェクトのコーディング規約から生まれた?)と
聞き及んでるが、いまだその技法にたどり着く豪のものが現れようとは。。。
クライアントサイドでexitの必要性がわからない
>>640 function 内で return するぐらいだな
可読性にも影響するから必要なケースはほとんどない
window.onload = function(){ document.getElementById("XXXX").onmousedown = dragStart; window.onmousemove = dragProc; window.onmouseup = dragEnd;} function dragStart(evt){……} function dragEnd(){……} function dragProc(evt){……} これってどういうことなの? ドキュメントの読み込み時にIDがXXXXの領域でマウスを押したらdragStart、 マウスをドラッグしたらdragProc、マウスをクリックした後戻したらdragProcが動くっていう設定をしてるの?
exitが必要な実装を見直せ
あと、function dragStart(evt){……}の部分はevtに何を入れているのですか? 関数が呼び出されるときには勝手に何か入るような仕様があるのですか? たとえば上の例以外にonClick="drag()"で呼び出したときに drag(evt){……}と呼び出される側の関数にevtなどの変数を書いておけば この変数に何か値が入るのですか?
そうそう onClick="drag('マイケル')"だったらevtにマイケルが入る
>>644 イベントによってdragStart等がよばれる
動作的には質問した動作であってる
evtはイベントが発生した時に設定される(IE以外)
マウスイベントを設定するタイミングがonloadのときってこと evtはマウスイベントを渡してる そこからイベント発生時の座標とかを参照できるわけ
関数名(xxx){}なら関数を呼び出す時雄に関数名(yyy)でもしない限り、 関数名()での呼び出しやマウスイベント時に呼び出すように設定したなどの場合、 マウスイベントがxxxに入るであってる? 関数から関数呼び出すときは何も入らないし関数名(yyy)で呼び出すならxxxにはyyyが入ってる
URL貼るくらいなら猿でもできるんだよボケ
URL貼る方が情報量多い場合もあるし、文句だけなら猿でもできるよね
実際URLの中身見たら理解が進んだ気がしたぞ ところでevtはevt以外の文字列じゃ機能しないの?aaaとか 中身はeventと同じ?
関数と同じなのでevtでもeでもeventでもなんでも良い
onload時にdocument.getElementById("XXXX").onmousedown = dragStart; なり addEventListenerなりでイベント設定するとき appendChildで追加する予定のIDを設定したらエラーになると思うのですが appendChildで追加するときに呼び出してあげれば問題なくなるのですか? appendChildで追加するたびに呼び出されても上書きされるだけだから問題ない?メモリとかたくさん食ったりしない?
でもさ、昔の質疑応答なんかが検索で出てきて、回答にURL貼ってたりするの 今見るとほとんどリンク切れでわけわかめなんだよなw
659 :
Name_Not_Found :2011/07/12(火) 23:13:55.02 ID:Kqp9et4I
DOMの構築は、htmlの上から順にされ scriptタグが書かれていた場合そこでDOMの構築が一時ストップしますよね 以下のソースの場合だと、jsが実行されたタイミングではid:targetのDOMは構築され 常にエラーが出る事はないと言い切れるのでしょうか? <div id="target"></div> <script>document.getElementById("target")</script> だとすると、スクリプトタグをHTMLの一番下部にかけばDOMContentLoadedイベント等を使わずとも安全といえますか?
>>641 if判定
処理1
if判定
処理2
if判定
処理3
・・・と割と長々と続く場合ifのネストが深くなるのを避けるには
どういう風に書くのがクールなんですか?
returnしちゃうの?
疑問を感じながらも
>>640 と同じような書き方をしちゃってますわ
>>659 script要素は少なくともbody要素の配下になければなりませんからHTMLの最下部に置けません。
</body> の手前に <script> を置く場合、html要素、body要素の操作以外は正常動作が期待できます。
html, body はDOM構築がまだ途中なので不具合を誘発させる危険性があります。(確か IE に不具合があったような)
662 :
Name_Not_Found :2011/07/13(水) 00:02:23.72 ID:/xKHmjSE
>>660 javascriptだとそんなネストもそうそうないと思ったが、
スプレッドシートのキー操作でそんな化け物みたいなやつ書いた記憶もあるなw
まぁ、自称javaのプロフェッショナルさんに書き直されたところによれば、
条件反転してでもcontinue/break/returnで抜けるらしい。
ただ、個人的にはif文の条件は率直に書くことが望ましいと思うので苦々しく思ったものだね。
言語の制約によって条件の意味づけが変わるのはなんともプログラマとして望ましいとは思わんからね。
do{break;}whie(false)はプログラムの意味合いが薄れるから良くないと思うわけで、
if文の山ができたら関数わけできるか検討してみるというのが、一般論法。
javascriptは関数内関数が使えるから一つの関数で意味づけを閉じ込めることができるから自分はそういう検討する。
ただ、速度面で、if文の山になるのもやむなしで実装するのもプログラマの度量次第ですかね。
addEventListenerのtypeに指定できる文字列の一覧が見つからない 自分の検索の下手さに絶望した
っ DOM2 Events
つ Document Object Model (DOM) Level 3 Events Specification
正常系のネストを深くするやつはセンスなさそうに見える
667 :
Name_Not_Found :2011/07/13(水) 08:35:54.70 ID:Ai+nRfO4
>660 if(a==1){ア if(b==2){イ if(c==3){ウ }else{エ} }else{オ} }else{カ} ↓ t:swith(true){ case a==1:ア case a!=1:カ;break t case b==2:イ case b!=2:オ;break t case c==3:ウ case c!=3:エ;break t } もっと複雑なネストも順番を工夫すればどんなパターンでもif無しで書ける
さすがにそれはキモイわ
669 :
Name_Not_Found :2011/07/13(水) 08:55:29.60 ID:Ai+nRfO4
>668 俺も使ったことないし使おうとも思わないけど あたらめて見るとある意味直感的でいいかもね もしこうだったらこうして 違ったら抜ける 違わなかったら先にいく っていうのはifのネストよりもイメージに近くなるかもしれない 上の方で出てたJAVAプログラマの人も多分より直感的にしたかったんだと思う
うむ、もっともだわな
ラベルはBASICの頃のgoto文を思い出してどうしても敬遠してしまう
672 :
Name_Not_Found :2011/07/13(水) 09:46:28.30 ID:OTnaUKfv
リンククリックされたら画面内にポップアップ+ポップアップ内に動的な内容を表示って どうしたらできますか? Ajaxというのは分かるんですけど、実装イメージが湧かなくて・・
質問の内容からして実装イメージがわかない云々以前な気がする とりあえず想像付く範囲でコード書いてみて
674 :
Name_Not_Found :2011/07/13(水) 10:23:36.65 ID:OTnaUKfv
// ポップアップ用のdiv作成
var pop = document.createElement("div");
// popをポップアップ風にして、かつ動的な内容を入れる?
・・・
// ポップアップを追加
document.body.appendChild = pop;
http://procx.jp/nt/ したいのはこういうサイトみたいにあらかじめHTMLに埋め込まれた
ものを表示するのではなくて、ポップアップを表示するタイミング?で
動的な内容を取得、表示することです
ajaxを学べばわかるようになる。 要素生成→取得じゃなくて 取得→完了時に要素生成→追加って流れ。
676 :
Name_Not_Found :2011/07/13(水) 11:01:36.97 ID:OTnaUKfv
なるほどです。 Ajax通信の一連処理の中に要素生成とか追加も含めるんですね。 生成、取得、追加とかその辺の流れもよくわからなかったので助かります。
677 :
忍法帖【Lv=1,xxxP】 :2011/07/13(水) 11:05:55.36 ID:5Ddb8K/4
ajax対応のLightBoxとかのソースを参考にすればいいんじゃないかな
678 :
Name_Not_Found :2011/07/13(水) 11:18:47.07 ID:OTnaUKfv
こういうの使ってるのか。 ポップアップもLightBox使えばできそうですし、かなりイメージ湧きました。
>>662 サンクス、参考になります。
>>667 ども。でもそのswitch構文は
ア が通った場合に必ず カ も実行されて抜けちゃうんでは?
onmousemove でドラッグできねえ アブソリュート指定しておいた要素のleftとtopの値変えてあげればいいだけなんじゃないの? ドリームうぃーぱーってじゃばすくりぷとのデバックできないの? ちくしょう
っ チルトホイール
クロージャの質問 function outer(){ var x = 1; return function (){ alert(x); x = x + 1; }; } outer();//動かない var f = outer(); f(); // 1 f(); // 2 何故outer();では動かないのですか? 何故var f = outer(); f(); とすると動くのですか?
>>684 outer関数の返り値は処理通り無名関数
alert関数は実行されない
何故ならalert関数を実行する無名関数が実行されていないから
よって、
outer()();
とすればone statementで動く
f変数はouter関数が返す無名関数が代入されているだけに過ぎない
>>685 なるほど関数の実行に()がほしいということですか。
function speak(){alert("hello");return 9+9;}
//document.write(speak());//hello 18
//document.write(speak()());//hello
//document.write(speak()()());//hello
document.write(speak()()()());//hello
という挙動になるのは何故ですか?()が2つ以上になると
returnが無視されるみたいです。
687 :
Name_Not_Found :2011/07/14(木) 06:39:23.17 ID:cwieDqqx
returnが無視とかじゃなくて firebugとかchromeとかデバッグすると関数じゃねぇぞゴルァ!って来てるかと document.write(speak()())はdocument.write(18())とやってるのと同じ 18を実行してどうするんだよ…
>667のコスト計算してみたら意外にもほとんど変わらなかった a!=1で早期に抜ける場合はifの方が2-3倍早いが a==1,b==2,c==3で奥まで進む場合はswitchの方が2倍早かった 場合によって早いときと遅いときの差がswitchの方がマイルドな感じ だからswitchの方がいいコーディングなのかも…?
>>683 いやそういう話じゃなくって。全員ユーザーがチルトホイール持ってるわけじゃないでしょ。
持ってない人のための工夫をしたいってことなんだけど。
>>689 可否云々ではなく、標準の動作を書き換えるのはユーザの混乱を招くからやらない方がいいんじゃないかな
var hash = { 1 : function(){ 処理1 }, 2 : function(){ 処理2 }, 3 : function(){ 処理3 } }; hash[(条件式の)変数](); 分岐条件が固定値になる処理ならswitch使うなよ。
(function(){ if (!判定1){ return; } 処理1 if (!判定2){ return; } 処理2 if (!判定3){ return; } 処理3 }()); 条件が完全にバラバラで統一できないなら、とりあえずこう書いておく。 そのうち個々の処理が大きくなって、それぞれの処理を丸ごと別関数にした方がいいと気づく。 気付いたあと、最初にくだらないテクニック使って最悪なコーディングになってると、 普通のプログラムに書き戻すのがものすごく面倒になってやらなくなる。 スパゲッティのできあがり。
693 :
682 :2011/07/14(木) 09:17:08.58 ID:???
>>690 標準の動作を変えるならそうきっちりアナウンスすればいいと思うし、
いずれにしても混乱が起こらない形でやるつもりだよ。
まずどの程度の事が可能なのかしりたいんだ。その上でどんな実装をするか考えたいんだよ。
とりあえず
>>682 教えてくれてもいいんじゃないか。
694 :
Name_Not_Found :2011/07/14(木) 09:20:16.63 ID:dhyvjj5H
javascriptでただ5分だけカウントダウンするプログラム書きたいんだけど、ググってもわからないので教えてエロい人
>>695 setTimeoutも調べたんすけど、現在時間とかも取得しないといけないんすかね?
とりあえずなんでもいいからソース書いて来い
>>696 「5分だけカウントダウン」の意味によるでしょ。5分は300秒
だからおおまかでよければ300から1秒毎に1減らして行くという
コードで済ませて現在時刻を取らないというのも可能では。
それでいいかよくないかはアンタにしか決められんよね。
aho() { i = eval(document.myform.hoge.value) - 1; if (i > 0){ document.myform.hoge.value = i; setTimeout('aho()', 1000); } }
↑ちょっと変だった。 document.myform.hoge.value = i; はif文の前がいいな
ネタじゃないん?
>>699 ありがとうございます。夜家に帰ったら試してみます
DateオブジェクトとsetIntervalの使い方さえ分かれば、9割終わる問題だな。 教科書に載せたいsetIntervalの基本、ぐらいの勢いw window.onload = function() { var div = document.getElementById("count_view"); var count = 5 * 60; div.textContent = count--; var time = new Date(); var next = time.getTime() + 1000; var id = setInterval(loop, 100); function loop() { time = new Date(); if (time.getTime() < next){ return; } next += 1000; div.textContent = count--; if (count >= 0){ return; } clearInterval(id); } };
何だかんだで宿題スレ化しちゃうのよね
上で楽天のアドバイスくれた人ありがとうございました グリースモンキーで無事組めました 感謝してます
twitter APIのstatuses/public_timelineをjQueryの$get()で叩いて テキストを取得したいのですが、具体的にどのような記述にすればよいのでしょうか?
707 :
Name_Not_Found :2011/07/14(木) 19:52:43.95 ID:Xx379buy
>>705 連打するヤツのこと?
楽天鯖に迷惑かけないように、インターバル時間には気を使ってな
岡崎市立中央図書館事件みたいなことも無くはないわけだから
>>707 常識的に何秒位のインターバルが必要ですか?
人気の商材は本当に数秒で売り切れる・・・・・
サーバ側から何かアクションがあるまでは好きなようにやってよし 自分だけアクセス制限が掛かるのか利用者全体へのリロード規制なのかオマワリサンを召喚するのか どんなアクションがあるかは不明だけど
>>710 試してみたけど0.25秒あたりが、インターバルの境目っぽいんで、0.3秒くらいの設定でいきます・・・・
素人が適当に組んだスクリプトじゃ お巡りさんを召喚しかねないな
リクエストを送信するってのは、相手に手紙を送るようなもんだからね。 相手は内容見て対応を考えるけど、対応しきれない量を一気に送られたら処理しきれない。 具体的にどのくらいが処理しきれない量なのかは、相手による。 ここで重要なのは、相手が処理できるかどうかじゃなくて、相手がイヤがるかどうか。 「このぐらいなら処理できるけど、1人でこの量送ってくるのは業務妨害だな」と判断したら それが正常に処理されたとしても、おまわりさんがあなたに連絡を取ってくるかもしれない。 相手(楽天)は商売でサーバ(店)用意してることを忘れずに。店先で暴れるのは基本厳禁。
じゃぁ、スクリプト組んだ意味ないじゃないですか・・・・・ どうしようかな・・・ 一般的にマウスのボタン連打とかでも0.5秒位は反射神経でいけると思うから、それ位かなぁ・・・
そりゃ意味ないよ。普通どこでも禁止スクリプトだもの。
迷惑なスクリプトだな。
ちょっと考えれば迷惑スクリプトだって子とはわかると思うんだけど、「じゃぁ、スクリプト組んだ意味ないじゃないですか」ってところからして自分のことしか考えてないんだろうな
まぁ、でも勉強になったから、意味はあったかな・・・・ 他に応用できそうだし。 インターバルは1秒にします。 これで、繋がらなかったら、普通に諦めよう。。。。。 繋がれば数万儲かるけど・・・・
自分が該当ページを表示したときにだけスクリプトが走るんだろうからいけるでしょ 目的の画面が取得できるまでの間だけ走るとか条件つけてるだろうし
720 :
Name_Not_Found :2011/07/14(木) 22:26:50.76 ID:Xx379buy
>>720 いや、長くても30秒で売り切れるんですぜ?w
「長期的に在庫が復活してつながる」 とかじゃなくて 「短期的に○時から一斉限定○個販売」 とかだから、普通に手動でやってる奴でも多分2秒位のインターバルでポストしてるはず
723 :
Name_Not_Found :2011/07/14(木) 22:29:52.63 ID:Xx379buy
一体何を買ってんだよw
あぁまた改行厨は池沼の法則が
在庫云々は完全にスレ違い。 ↓ここから別の質問か、もしくは以前の質問への回答↓
ドラッグできないのは何が原因なんだろう
>>708 すいません。自分で見直して書いてみたのですがいまいち不安だったので
自分で書いた物は以下の通りです。
テキスト取得してエラー、正常でアラートを呼び出すように書きましたが
これをonClickで実行させるように書いたのですがテキストが取得できませんでした。
(IE8)
$.get(
'
http://api.twitter.com/1/statuses/public_timeline.json ',
function (data) { alert(data[0].text); },
'jsonp'
).error(function() { alert('error'); });
>>727 そのコード自体は動いてるみたいだけど。
.error()が書けるのはjquery-1.5+から。動かないならバージョンの確認。
バージョンが足りてるなら、他を見直してみ。
appendChildで<div id="a"><div id ="b">あ</div><div id="c">い</div></div>を追加して document.getElementById("a").onmousedown = dragIn;が書かれた関数呼び出しても ”あ”とか”い”とか書かれた部分押してもdragInって動かない?
動くとしてもfunction dragIn(evt)内でevt.tagetを拾ってもaじゃない可能性がある?
onMouseMoveで画像の入った要素を移動させようとしても、 画像の場合どこかにドラッグすれば画像をコピーできるような状態になっちゃうけどこの状態をOFFにできますか?
質問です。 replaceが上手く動作しません 原因は何でしょうか 以下ソースです <html><head> <script language="javascript"><!-- function test() { var value = "hogehogehoge"; value.replace("hoge", "hage"); alert(value); } --></script></head> <body onLoad="test()"></body></html> 上記HTMLファイルを読み込むと、「hagehagehage」というアラートが出てくると思っていたのですが、 全く置換されず「hogehogehoge」がそのまま出てしまいます
value = value.replace(/hoge/g, "hage"); valueにいれなおさないと
>>733 入れてるつもりになってました…
先入観って怖いですね…
ありがとうございました
>>730 event.currentTarget を使えばいい
しかしここって荒らす人も居ませんし良いスレですね
そういうのいちいち書かなくていいから
俺もそうは思うけど、直にそういう事言われるとリアクションに困って 大抵汚点をレス抽出で見つけて貼る
var re = new RegExp(str, "g"): // str = クソレス正規表現 while (var i = 0; i < thread_res.length; i++) { var arr = thread_res[i].match(re); for (var j = 0; j < arr.length; j++) console.log(arr[j]); } } 問題は、クソレスの正規表現をどう定義するか
740 :
Name_Not_Found :2011/07/15(金) 16:23:08.45 ID:GCrjyMLc
きっと単体の正規表現ではできない複雑な処理になるだろうから 正規表現でレスを抽出してreplaceで処理したい
TwitterのiPhone Safari版とか、スクロールが加速してスムーズなんだけど ああいうのはJSで自作してるんでしょうか。 フレームワークとかで導入できるのはないですか?
742 :
694 :2011/07/15(金) 20:20:06.51 ID:Cfry+3Ln
694ですが ソースを書いてみたのですが function timerset(){ setTimeout("countdown()",1000); } function countdown(){ var min = 5; var sec = 60; var count = 5*60; count = count -1 ; min = Math.floor(count /60) % 60; sec = count %60; if(sec < 10) { sec = "0" + sec; } var value = min + ":" + sec; document.form1.text1.value = value; if (count <= 0) { clearTimeout(timerset());} } カウントが止まったままになってしまうのはなぜでしょうか?ご教授お願いします
>>742 カウントを開始する処理はどこにあるの?
a:hoverとかあるじゃないですか? あれをjavascriptでどう書くんですか? ×a:hover.style.color ×a.style.hover:color とかしてみましたがだめでした
750 :
Name_Not_Found :2011/07/15(金) 21:52:54.01 ID:q5DYW9eS
>>749 hoverになったらmouseoverイベントが飛んでくるからそこで処理すればいい
onmouseイベントだとどう考えても遅いし スタイルシートで指定できたらそうしたいんだろう ただJavaScriptで指定してる以上・・・
JSで動的にスタイルシートを埋め込む。
>>752 >onmouseイベントだとどう考えても遅いし
それが体感できるほどの化石PCを使ってんの?
>>754 いや例えば例だとaだったけど
これがtdの各セルになると結構厳しいぞ
自分がどうとかより訪問者第一に考えないと
>>755 不特定の訪問者第一に考えるなら、tdにhoverなんて使えねえよ。
スタイルシートなら別に問題ない
>>755 アホか
>>754 を書いた真意がまだ分からんのか
つかtableの各セルとかそんなの
>>746 のどこにも書いてないし、そもそも質問した本人でもないのに
横から「JavaScriptは重い」とか的外れなチャチャ入れんなよks
何こいつ
>>742 var timerID = setInterval(countdown, 1000);
/* setTimeout : 設定間隔後に一度だけ実行される
setInterval : 解除しない限り設定間隔で実行され続ける
戻り値はタイマIDで、タイマ解除(clear〜)にはそのIDを使う
タイマ処理で関数を呼び出すだけなら、関数名だけでよい */
var count = 5 * 60;
/* カウント数を入れる変数は関数の外に出さないといけない
でないと値を保持しないし、関数が呼ばれるたびに初期値に戻されてしまう
関数外に出したなら関数内のcount操作部分にはvarを付けてはいけない
関数内でvarを付けると、同名だが別の変数ができて
そちらをカウントダウンしようとしてしまう
検索キーワード : ローカル変数、変数のスコープ */
function countdown() {
count = count - 1;
// 中略(表示処理)
if (count <= 0) {clearInterval(timerID);}
// 設定時に戻ってきたIDを引数として与えてタイマ解除
}
hoge.attachEvent('click', function(){alert(this)}, false) addEventListnerではちゃんとhogeオブジェクトを返してくれるのですが、 attachEventではwindowが返ってきます。 attachEventでもhogeを返すにはどうしたらいいですか?
762 :
761 :2011/07/16(土) 02:10:57.56 ID:???
すみません。自己解決しそうです。 メモリリークの心配があるそうですが、クロージャーとやらを使ってなんとかなりそうです。
var outer3=function(){ var x = 1; var jj=function (n){ alert(x+n); return x = x +8+n;}; return jj;}; outer3()(2);//3 outer3()(2);//3 outer3()(2);//3 var aaf=outer3(); aaf(2);//3 aaf(2);//13 aaf(2);//23 という挙動になりouter3()(2);ではxの値が保持されないのは 何故ですか?
>>763 >>684 の人かな?
「outer3()(2);」ではouter3関数をその都度実行しているから、
xもその度に初期化されて値を保持できない
「aaf(2);」でxの値が保持されているのは、
変数としてのaafに、実行されたouter3関数の状態と共にjj関数が代入されて、
その状態のxがaaf関数に対するレキシカル変数になっているから
「outer3()(2);」で値を保持するなら、xをouter3関数に対するレキシカル変数にしないと
具体的にはouter3関数外でxを変数宣言し、outer3関数内では代入だけに留めてみるとか
>>764 ありがとうございました。よくわかりました。
766 :
694 :2011/07/16(土) 06:03:50.12 ID:+GNitYfH
>>760 少し書き直してみたのですが
min = 5;
sec = 60;
count = 5*60;
function timerstart(){
tim = setInterval(countdown(),1000);}
function countdown(){
count = count -1 ;
min = Math.floor(count /60) % 60;
sec = count % 60;
if(sec < 10) { sec = "0" + sec; }
document.form1.text1.value = min + ":" + sec;
if (count <= 0) {
clearInterval(tim); } }
4:59のまま止まってしまうのはなぜなのでしょうか?
>>766 setIntervalの引数のところ、countdownの直後の丸括弧は要らないです
関数名(関数を参照している識別子): countdown
関数呼び出し: countdown()
というのに注意してください
例)
setInterval(countdown, 1000);
// countdownを呼ぶようにsetIntervalでタイマ設定
// →OK 設定間隔で呼び出される(countdown() される)
setInterval(countdown(), 1000);
// まずcountdown()と呼び出して、その戻り値をsetIntervalでタイマ設定
// →NG countdown自体は戻り値を持たないので動かない
setInterval("countdown()", 1000);
// 文字列に収められたコードをsetIntervalでタイマ設定
// →OK 設定間隔で文字列内のコードが実行される(countdown() される)
>>767 setInterval(countdown, 1000);
にしてみたのですが、カウントされていかないのは他にダメなところがあるのでしょうか?
>>767 色々いじってたらカウント始まりました
ありがとうございます。
ただ数字が倍々に減っていくので、もうちょっと調べてみます
ありがとうございました^^
771 :
Name_Not_Found :2011/07/16(土) 08:58:49.93 ID:i4Jg6kyq
772 :
Name_Not_Found :2011/07/16(土) 09:02:57.62 ID:i4Jg6kyq
>>761 event.targetでなんとかなろうに
>>772 JScript の attachEvent なら event.srcElement ですが、これはいわゆる this (event.currentTarget) とは違います。
>>770 のリンク先のp要素部分で click してみれば違いがわかるかと。
まあ、hogeに子要素がない条件であれば同じノードを返すのですが。
# 「event.srcElement から parentNode をたどって判定すればいいだろう」とのことならそれも有りだと思います。
ただ、ラッパー的な発想なら実装依存(DOM Eventsで未定義)な this よりも event.currentTarget を書き換えた方がいいかなーとは思います。
ついでに event.target も書き換えればほぼ DOM Events 形式のコードが書けますし。
http://jsfiddle.net/hcvJs/2/ こだわり出すと重くなるので必要最小限のコードがいいかも。
https://gist.github.com/882821
onMouseMoveで座標を変えてあげるだけだと画像をドラッグしようとしたとき ブラウザのデフォルト仕様?で画像データをドラッグする状態になってスムーズに移動しない状態になります。 これを修正するにはどんな記述をすればいいのですか?画像ドラッグ時の動作を無効化?
775 :
Name_Not_Found :2011/07/16(土) 09:44:54.39 ID:dG9aa+zW
>>774 イベントキャンセルしていないじゃないの?
>>776 全部コードを読んで試してくれ、ってこと?それぐらい自分で試して欲しい。
>>775 で解決しないの?
>>779 Google Chrome なら event.preventDefault で解決すると思うけど。
>>778 「課題と関係ない」と自己判断しないでとりあえず試してみたら?
ミスリードする人も中にはいるけど、間違いがあれば訂正する人が現れると思うよ。
回答者の脳みそが高度すぎてよくついていけなくなるな 回答者の脳内で出来上がった答えを質問者が想像できないパターンがありそうだ
>>781 ついていけない内容を質問すればアドバイスがもらえるんじゃないかな?
そもそも画像のドラッグ&コピーのデフォルトイベントはpreventDefaultで解除できるのですか? window.attachEvent("onmousemove", dragmove);で呼び出している function dragmove(evt){の先頭に evt.preventDefault();を差し込んでみましたが特に変化はありませんでした。 img画像の上をドラッグしたらキャンセルされるような気がしましたが気のせいだったのか自分のコーディングのせいなのかすらわかりません
>>783 そっちは
<a id="nyan" onClick="return addimg('nyan');" href="img/nyan.jpg">img/</a>
でaddimgからfalse返してるので今のところ問題ないです。
今の課題は、addimgで追加したimgを結果としてはドラッグできるけど、ドラッグするときに
>>779 の状態に陥ります。
>>780 を受けて
>>784 してみましたが変化がありませんでした。
786 :
Name_Not_Found :2011/07/16(土) 10:30:51.47 ID:dG9aa+zW
イベントの伝播をとめるstopPropagation()ってのもある var cancelEvent = function (e) { e.preventDefault(); e.stopPropagation(); return false; } 俺はこんな感じで書いて使ってる
>>787 >>778 です。
自ソースで
document.getElementById("nyanko").addEventListener("mousedown", dragSetIn, false);
から呼び出しているfunction dragSetIn(evt){の先頭に
evt.preventDefault();を差し込んだらうまくいきました。
ありがとうございます。
>>786 わかって書いてるのかとも思いましたが、やっぱり変なので一応指摘を…。
event.preventDefault を使えない実装のために return false を併記しているようですが、event.preventDefault がなければ TypeError でスクリプトが停止してしまうので return false まで進みません。
あえてそうするなら下記のようになるかと。(stopPropagation も同じで IE8- は TypeError になると思います)
if (event.preventDefault) {
event.preventDefault();
} else {
return false; // IE対策なら event.returnValue の方が扱いやすいかも
}
あと、イベントの伝播とデフォルトアクション抑制は別物なので
>>774 のケースでは併用する意味がないです。
イベント伝播の抑止(stopPropagation)は親ノードでイベントを受け取りたくない場合に使います。
なぜかその辺混同して一緒くたに説明しているサイトがありますが、信用しないでください…。
>>789 解決して何よりです。
一応、HTMLの onmousedown 属性なら return false; でクロスブラウザできますが、外部スクリプト化するとFAQのように書く必要があります。
return false; は独自実装だったところをHTML5で再定義された「古くて新しい仕様」ですが、実装が追いついていない現状ではあえて選択する理由がないと思います。
stopPropagation は使ったことないなあ。有効な使い道が思い浮かばない。
if (event.preventDefault) { event.preventDefault(); } else if(event.returnValue){ event.returnValue(); }else{ return false; } こうしておけば良い感じ?
>>791 複数のユーザがイベント仕掛けるときに変な動きしないためとか
htmlならあんまり使わないかもね
>>792 どうしてreturnValueを呼ぼうと思ったんだ
<div> <a id="x001" href="#">x001</a> <a id="x002" href="#">x002</a> <a id="x003" href="#">x003</a> </div> とリンクを並べたときこれらのリンクのみクリックを検知したい場合、もっとシンプルでスマートな方法はありませんか? 現状は以下のように全パターンセットして同じ関数に飛ばして飛ばした先でevt.targetで拾っています。 document.getElementById("x001").addEventListener("click", clickon, false); document.getElementById("x002").addEventListener("click", clickon, false); document.getElementById("x003").addEventListener("click", clickon, false);
間違った event.returnValue = false;だ
>>796 失礼。return false; は return event.type === 'mouseover'; に置き換えてください。
すみません、嘘つきました。 if (event.returnValue) は event.returnValue === false の状況で正しく働きません…。 if (typeof event.preventDefault === 'function') { // [[Call]] を持つnativeオブジェクトなら event.preventDefault(); } else if ('returnValue' in event) { // returnValueプロパティを持っているなら event.returnValue = event.type === 'mouseover'; } else { return event.type === 'mouseover'; }
IEで if(window.attachEvent){は通るのに window.attachEventで関数は実行されないの? document.body.attachEventは動くけど……
>>796 ありがとうございます
divにidつけておけばgetElementsByTagName('div')[0]を
getElementById("XXX")でもできそうですね
>>801 うそん
アラートとか仕込んでも無反応だったよ
バージョンは8.0.7601
thisって未定義だったのか
何故俺の環境だとwindow.attachEventが動かないんだろう 何かがおかしいんだろうけど
>>784 ondragstart="return false;" ondrag="return false;"を仕込んどけ
イベント属性として直接書いた方が都合がいい
完全分離を目指してそうだけどどうなのかね
CSSセレクタのようにパターンと即値が分離されていれば 即値であるノードの変更に影響されることがない IEのbehaviorやMozillaのXBLはこの点で優れていた 即値である個々のノードに直接ハンドラをぺたぺたくっつけて 何か分離したかのように主張するのは、何かを勘違いしている ま、dragstartもdragもバブルするから嫌なら祖先にでもつけておけ いずれにせよイベント属性として書いておけば document.body.innerHTMLを書き換えるような乱暴なスクリプトを使われても ハンドラが生き残る可能性が高い
800超えたので、「今」テンプレ論議あればどうぞ。次のテンプレ からはFAQを復活させるということでFA?
FAQのナンバーを本スレと別サイトでバラバラなのを直せよ 本スレの1〜9を前にもってきて残りを足せばいいだろ これ書いた奴頭悪すぎ
>>396 でいわれてるけど名前をレス番にするルールも加えたらどうだろう
複数の人が長時間いると対応関係がわからなくなってくる
あと、IDもだしてくれると分かりやすい気がする。
難しいところだな 強制することに異論はないが、強制したことで「ID出せやゴルア!」な連中が出てくるのは避けたい とはいえ、ここは良識ある人が多いからさりげなく指摘してくれるかもしれない
>>811 おまえは上から目線過ぎ
作った人はバラバラだし更新義務のあるカスタマーサポートでもないんだから
choromやFirefoxでは動いたのですが、IE8だと動きませんでした。どうしてでしょうか。 window.onload = function(){ if(window.addEventListener){window.addEventListener("mousemove", move, false); }else if(window.attachEvent){window.attachEvent("onmousemove", move); }else{window.onmousemove = move;} } function move(evt){ var msg2 ="move";alert(msg2); }
善意が前提の上でオナニーを原動力に成り立っております
屈折した人だねえ
こういう人の原動力は悪意だから気にしないのが吉
>>819 windowじゃなくてdocumentにつけろ
それとonloadなんて忘れろ、いらん
(案1) ID推奨、レス番を名前推奨 (案2) ID推奨、レス番を名前強制 (案3) ID強制、レス番を名前推奨 (案4) ID強制、レス番を名前強制 (案2) が妥当かな。ID強制するなら (案4) を推すが守るのが難しそうだ。 1ヶ月で1スレ消費するようだから様子見で試してみる手はある。
>>823 もう少し詳しく教えていただけるとありがたいです
window.onclick = function(){window.addEventListener("mousemove", move, false);} ってやって画面をクリックしまくるとメモリ上では何が起きるのですか? window.addEventListener("mousemove", move, false);を複数回実行してしまうと何か問題がありますか。
>>825 document.attachEvent
何で window につけたん?
>>828 いろんなサンプルを見た結果です。
windowで動かなかったので今はwindow.document.body.attachEventにしてます(これだと動きました)。
上の方にあるできないわけがないよ!って意見やwindowにそもそもattachEvent入ってないよ的な意見をネット上から拾えましたが
そもそも何でIE8で動かないのかという理由に辿りつけなかったため、ここで質問しました。
>>830 ありがとうございます。現状だとdocumentにつけておけばよさそうですね
>>831 現状というか、将来的にも mousemove を window で待つ意味がないように思えます…。
document ではダメで window でなければならない状況ってあります?
window はそのままで document だけ書き換えるとかいう状況がある…のかなあ。
ビューであるwindowと文書木であるdocumentは別空間だから documentのイベントがwindowに伝播するというのが本当はおかしい 時空を超えてるわけだからな windowに伝播するのはHTML5というか ネスケIE時代のwindow.documentの挙動を追認したもの
ちなみに
>>827 は複数回登録されて複数回実行されるようなのですが正しいですか?
どっかで読み込んでるときはどっかで消しておかないと不味そうですね
何度も仕様リンク出てんだから読んでやれ addEventListenerは同じフェーズでの同じリスナ登録を無視する それだけだ
attachEventは登録されるようだから不要になるタイミングで削除しておけばいいんじゃね?
window.onloadいらないってのはどういうことだろう
attachEvent周りの出来事はよくわからないものだらけ 二重登録だのメモリリークになるだの すでに登録されているかどうかを確認するには配列用意して関数とか登録しておくしかないのかね? 登録する前に削除すればいい?エラーにならない?
だから何年も前にこのスレで「エセ外人」がたびたび言ってただろ
ほとんどの奴は理解できずに流してたようだが
バブルするイベントはdocumentに一個リスナを取り付ければ十分
この方法で二重登録が生じるとしたら、コードのバグに他ならない
documentはグローバル変数だから、メモリリーク対策にもなる
バブルしないイベントはHTMLの属性で書き、eventを使う
これは
>>808 のようにinnerHTML対策の他、cloneNode()対策でもある
DOM Events仕様では、ノードを複製してもイベントリスナは複製されないからだ
二重登録が生じやすいのは、複製したノードにイベントリスナを付けるとき IE7ではノードの複製でイベントハンドラも複製されるため IE7とそれ以外で重複管理を分けなければならないからだ エセ外人の方針でやれば、この重複管理の手間がいっさいなくなる クロージャとか面倒な工夫を凝らしてエンバグするより 仕様をベースにシンプルに考えろ
自分のコードが他人のコードと共存するのは普通に想定されることだが、 その他人のコードがHTMLをぐちゃぐちゃに書き換えることまで想定しなきゃならんとしたら、 俺は自分のコードがまともに動くことを保証する方をあきらめるだろうな。 document.body.innerHTMLで丸ごと書き換えるような乱暴なコードを許容するほど寛容なら、 window.undefined = 3; とかやられても許容する寛容さも持ち合わせてるんだろうが、 俺はそこまで仏にゃなれない。
IDには固執しないほうがいいよ PHPスレを見てきてご覧 あんな風になる
\u306f\u308d\u30fc\u308f\u30fc\u308b\u3069 closure compilerでスクリプト中に日本語があると こんな具合に変換されるのですが innerHTMLとかの指定でも日本語をそのままJavaScriptにかくのはよくないんでしょうか?
>>841 ん?二重登録で失敗するのは自分という話だろ?
undefined変数なんて使うのは普通に不用心なだけで、だからどうという話でもない
ついでに、attachEventで登録したハンドラの実行順は(ほぼ)ランダムだから
実行順が必要になるようなシビアなコードを書いたことのある奴なら
エセ外人の方針を応用すれば、かなり簡単になることが分かるはず
どうせキャッシュを使うだろうから、重複チェックはそれでも可能だ
あいつは本当にいいことを言ってたんだが、スレの奴らはほぼスルーだったな
>>844 イベントハンドラの登録方法をゴリ押ししたいのは分かったから。
そんなもん、理屈を分かってない奴は説明されても理解しようがないし、
サイ本読んでる奴はいちいち「おおなるほどすげえ!」なんて賞賛レス返さない。
スルーされて当然の内容だから。
俺が言ってるのは、自分が操作対象にしてる部分を
他人のコードが無節操に掻き回すなら、
俺は自分のコードの動作保証をしないってことだから。
javascriptの操作対象は多岐に渡る。たとえばCSSだって対象になる。
自分の捜査対象範囲のtableにposition:absolute;つけといて、浮動表示前提でスクリプト書いたら
他人のコードでルールを削除してやがったとか普通にありえる。
イベントハンドラの登録なんていう、ほんの極一部だけ他人のコードを気にしたところで
どうにもならん時はどうにもならないし、ダブリ登録なんてのは
そういった他のコードとの干渉を自分で作り上げてるのと大差ない。
限度を超えて干渉してくる側を修正しなけりゃどうにもならないことを、 干渉される側でどうにかしよう(どうにかできる)と考えるのは無駄すぎだと言いたいわけ。
MDCのDOM documentのページのイベントハンドラの項目にはononlineとonofflineしかないから documentにはイベントはこれらしか付けちゃだめなんだと思ってました
>>845 DOM Eventsのイベントフローってのが『他人のコードが無節操に掻き回』しても
『自分のコードの動作保証』をするための仕組みを提供しているのに
それを使わないで『干渉を自分で作り上げてる』のは何故だ?
あんた自身が『理屈を分かってない』から、ではないの?
>>846 あんた自身が言うように、イベントデリゲーションは基礎の応用にすぎない
それだけでいろんな問題を解決できる、と言ってるわけで
『限度を超えて』とか、何でそんな大層な話にしたがるのだろうか
本当はここからノードパターンの識別という話をしたかったんだがな
イベントのバブリングは、実はセレクタと非常に相性がいい
>>848 提供されてねえよw
Array.prototype.length = 0;
他人の書いたこの1行だけでもプログラムは崩壊する。
こんなのが山ほどあるのに、いちいち対応してられるかよ。
>>850 イベントフローの話から、なんでArrayが出てきた?
まあそれならそれで、『崩壊』するコードの例と実行環境を出してくれ
あんた、ひょっとしてプロトタイプチェーンもよく理解してないんじゃないのか?
さっきundefined変数を普通に使ってるようなことを書いてたし、心配してはいたんだが
>>850 で、俺はイベントデリゲーションのメリットを挙げたが、あんたはデメリットを挙げない
あんたが「自分には必要ないと思っている」のは分かったが、それは俺の主張に対する反論にはならず
俺が『ゴリ押し』している根拠にもならないことは、理解しているよな?
イベントデリゲーションのデメリットは大きく2個あると俺は考えるが
あんたからそれが出てこないということは、大した問題ではないのだろう
さるさんも出てきたし、俺はここまでにするよ
>>824 その4つの中なら1だなぁ・・・
>>842 でも出てるけどほんと悲惨
IDに関してスレに記述した当初はさほど問題は無いけど
そのうち強制じゃなきゃだめだという風にかわってく
>>852 横からだけどイベントバリデーションは話の発端となっただけで
>>850 はイベントバリデーションの話はしてないと思う。
「初心者にJavaScriptの基礎(イベントバリデーション等)を覚えさせるより、初心者がいい加減なコードを書いても動くように上級者が書いた方が手間が少ない」
彼はこれしかいってない。
prototype汚染を回避するために Array.prototype を定義しないのと理由は同じ。
「addEventListener を封印してHTMLのイベント属性を使えば初心者でもわかるだろ」ってこと。
理屈はわかる。裾野を広げればどこまでもルール無用のコードになって保守性が著しく低下するから賛成しないけど。
そもそも、コーディング規約を作って初心者に教える努力を怠らなければ解決できる話。
>>853 IDは確かに強制しない方がいいかもね
ただ、レス番を名前は複数人が質問したときにホント困るから守って欲しいんだよなあ
「IDなし、名無しの状況で誰が誰かわかれ」って方が無理があると思う
(案1) ID推奨、レス番を名前推奨
(案2) ID推奨、レス番を名前強制
(案3) ID強制、レス番を名前推奨
(案4) ID強制、レス番を名前強制
(案5) ID推奨、レス番を名前強く推奨
(案6) ID強制、レス番を名前推奨 or ID推奨、レス番を名前強制
(案5) > (案6) > (案2) かなあ
(案6) は複雑すぎるかもしれないけど、強制対象を選択できる自由度はある
856 :
Name_Not_Found :2011/07/17(日) 11:07:10.98 ID:EPI/oGvW
わざわざ名前欄に番号を入れるのを忘れることはあっても メ欄を空のままにすればID出るから と、ここまで書いて、専ブラでsageをデフォにしてるヤツのことを思い出した
匿名掲示板で名前を強制すると自演が増える法則
(案1) (3) メール欄は空欄、2回目の投稿時は「前回のレス番」を名前にすることを推奨します。長い間連続して質問する場合にレス番を名前にしてあれば、質問の流れが回答者に伝わりやすくなります。 (案2) (3) メール欄は空欄を推奨。2回目の投稿時は前回のレス番を名前にして下さい。長い間連続して質問する場合にレス番を名前にしてあれば、質問の流れが回答者に伝わりやすくなります。 (案5) (3) メール欄は空欄を推奨。2回目の投稿時は前回のレス番を名前にすることを強く推奨します。長い間連続して質問する場合にレス番を名前にしてあれば、質問の流れが回答者に伝わりやすくなります。 (案6) (3) 「メール欄は空欄」「2回目の投稿時は前回のレス番」のいずれかを守ってください。長い間連続して質問する場合にレス番かIDを明示すれば、質問の流れが回答者に伝わりやすくなります。
レス番を入れて貰った方がいいな IDは日付を跨いだときに質問の流れを追うのが面倒
attachEventのdragとかはdocumentにそれぞれ1個だけつけておいてその中でどの領域がドラッグされただのを検知してやればいいって話? 登録時にgetElementByIdとかで指定するんではなく
>>851 まず第一に、JavaScriptが操作対象にしてるのは、別にDOMに限ったことじゃない。
document.body.innerHTMLを誰もが操作できるのと同じように、
Array.prototypeも誰もが操作できるし、
そうしようと思えば、誰もが document.addEventListener = null; なんてことができる。
JavaScriptの環境ってのは、そもそもが、カギのかかってない倉庫みたいなもんなわけ。
誰かがdocument.body.innerHTMLに丸ごと干渉するコード、
たとえば丸ごと書き換えるようなコードを書く可能性がある。それ自体は正しい。
だが、それに対する対処として正しいのは、そんなバカげた処理をしないように
干渉するコードを書き直すことであって、そのコードと共存する側のコードが
そんなバカげたコードの存在を前提にして、面倒な処理をするのは無駄すぎる。
標準化されたDOMが提供しているものがあるとすれば、
それは、他者のコードに極力干渉することなくコードを書く手段を提供している。
全員が全員これに従って、お互いに極力干渉しないコードを書けば、
問題が発生する可能性は非常に小さくなる。
だから標準に従うことは重要だし、干渉しないことに注力することも必要。
だが、DOMの実装が、JavaScript内でJavaScriptに普通に従って実装されている以上、
DOM標準に従ってコーディングしたからといって、他からの干渉に完璧に対処して
正常な動作を保証することができるというわけじゃない。そんな優れたサンドボックスは提供されてない。
>>860 質問者になりすました第三者が荒らしたりする
下手にテンプレを大きく変えようとするからおかしくなる 今まで上手くいっていたのをわざわざ変える必要はない プログラムとおんなじだよ
クロージャは罪なの?
ここまで当然のように語られてるから聞くのが怖いのですが エセ外人さんが言っていたレスはどこまで辿れば見れますか?
問題視されてるんだから上手くいってない面もあるんだろう 実際流れがわかりにくい
(案7)2回目以降レス番を名前推奨 俺これね
detachEventしようとしたイベントがないとエラーになるの?
(案1) ID推奨、レス番を名前推奨 // >853 (1票) (案2) ID推奨、レス番を名前強制 // >824 (1票) (案3) ID強制、レス番を名前推奨 (案4) ID強制、レス番を名前強制 (案5) ID推奨、レス番を名前強く推奨 // >855,869 (2票) (案6) ID強制、レス番を名前推奨 or ID推奨、レス番を名前強制 (案7) 2回目以降レス番を名前推奨 // >870 (1票)
した
うわかぶった
(2) ユーザの迷惑になるスクリプトの質問はご遠慮ください。 ↓ (2) 迷惑になるスクリプトの質問はご遠慮ください。 迷惑するのはユーザーだけではなくなってるから変えたほうが良いのかもしれない
エセ外人ってか、 やたら「アホ外人が俗に言うイベントデリゲーション」とか書いてた人だろう。
>>862 「俺がグローバルにiを使うからお前らは使うなよ」
「いやvarがあるんだから使ってよ、こっちも使いたいんだから」
「そんな馬鹿げたコードの存在を俺は認めない」
「…わかったよ、こっちがvarすればとりあえず回避できるから、君らもそうしな」
「まったく馬鹿げたコードを書く奴は困る」
お前の言ってるのはこういうことだぞ?
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。 …とか。
(2) 迷惑な質問はご遠慮ください。
>>884 862のなにをどう解釈したのか知りたくもないが、
とりあえずカケラも理解できないレベルなんだってことは分かった。
俺の言ってるのは、飲酒運転する車が道路を走ってる場合に、
飲酒運転の車を取り締まれよってことだ。全員が道交法を守れば問題ないと。
ゴリ押ししてる奴の論理は、飲酒運転する車がいることを想定して
歩行者が避けりゃいいと言ってるわけだ。被害者にならないように自衛(笑)しろと。
たとえ話は馬鹿っぽいからやめたほうがいい
>>887 だから、お前自身が飲酒運転の酔っ払いだってことにはよ気づけ
道交法を守るべきはお前であり、直すべきはお前の糞コードなの
>>887 お前みたいな酔っ払いがいるから
歩行者はちゃんと歩道を歩きましょうと言ってるんじゃねーの
>>887 グローバル変数を避ける
組み込みオブジェクトのプロトタイプを拡張しない
ホストオブジェクトを上書きしない
これらと同じく、イベントデリゲーションも『道交法を守』って事故を起こさないためなのに
なぜこれだけをやたらと嘲笑しているのか、ちょと意味が分からない
>>862 Array.prototype ならともかく、 document.addEventListener = null; でも動作するようにはしないと思うんだが
document.body.innerHTMLに丸ごと干渉するコードは方法としてはあり得るが、それで既存のイベントを派がして期待通りに動作しなくなるなら正しいとはいえない
その辺のQAサイトを見てみろ body.innerHTMLや、広範囲のinnerHTML書きかえの回答にベストアンサーが山ほどついてる 単語のハイライトとか、Ajaxで範囲置きかえとか
結局なんなの?結論をどうぞ
ところでaddEventListenerやattachEventはdocument全体にやるのと getElementByIdなどで個別に追加するのとではどちらがクールなの?
>>889 酔っ払いを排除するという方針を言ってるに過ぎない俺を排除したとして、
結果はいずれ撥ねられる初心者と撥ねるボケコードが残るだけだが?
>>891 違ってるぞ。
「グローバル変数を避ける」「組み込みオブジェクトのプロトタイプを拡張しない」
「ホストオブジェクトを上書きしない」は、自分・他人のコードを両方とも共存することを保証するためのもの。
で、今回この話の発端は
>>808 や
>>839 だが、俺からすれば808の
「ハンドラが生き残る可能性が高い」なんつアホなコメントは前述の3つと全く別次元の話。
共存できることを『保証』できなければ意味がない。
まとめて書き換えられてハンドラが対象にしていたオブジェクトがデタラメな変更されてたら
生き残ったところでデタラメな動作するかせいぜいエラーがオチだ。
>>892 JavaScriptの動作環境は、いかようにもブチ壊せるというたとえ。
いかようにもぶち壊せるのだから、他人のコードに求めるのは、壊さないよう祈るだけにしとくに留めて
それ以上のことをしようとすることの意味はほぼ0だと悟るべきだってこと。
>>893 他人のコードと共存せず、自分のコードだけで動かすならどんな実装だろうが問題なかろう?
>>895 対象が1つならそれそのものにつけても不便はないし、実装は簡単にできるな。
同じような内容がたくさん必要な場合、たとえば1年間のカレンダーをtableで表示して
1日ごとのセルをクリックで個別処理するなら、tableにでもくっつけて
クリックされたセルで分離した方がメモリなんかも効率がよくなる。
ケースバイケース。確定の回答なんてない。
酔っ払いが「酒に飲まれてはいかん!」と説教しながら飲酒運転するの図
>>895 バブリングを使っとけば、例えば表データの行を増やしたときに
ハンドラを付けるか悩まずに済む
クライアント側スクリプトは、1つの文書木を皆が争って使ってる状態なわけだ
自分のハンドラをそういう争いに巻き込ませたくなければ
震源地からできるだけ遠くで監視させた方が良い
であれば、震源地の情報を問い合わせるeventオブジェクトの存在意義が分かるだろ
イベントフローやeventオブジェクトは、そういう必要性から考案されている
まあ、IE4とNN4を単純合成しただけってのもあるけどな
>>896 俺が『ハンドラが生き残る可能性が高い』と言ったのは、バブリングしないイベント属性の方な
とりあえず、イベントデリゲーションにデメリットがあるなら、まずそれを書け
それとも「イベント属性」が気に入らないなら、俺の主張する「メリット」に反論してみせろ
自衛(別には自衛だけを語ったつもりもないが)が「愚かしい」という
お前の価値観は分かったが、「手法」に対して「価値観」で反論してくんな
>>900 説明ってのは、説明して理解できる人にならば簡単だが、
そこまで達してない人には非常に困難なものなわけで。
ここまでのやりとりで、既に「とことん低いところだなぁ」としか見えてないわけよ。
「undefined変数なんて使うのは普通に不用心なだけで、だからどうという話でもない」
なんて平気で書いちゃうとなれば、いかに経験不足なのかは自ずと知れる。
そのレベルに合わせるために、できる限りリアルのたとえ話に置き換えてきたし。
ぶっちゃけると、分かるレベルまで引き落として説明できる自身がないw 教師じゃないんでね。
undefinedを使うのが無用心。笑い話すぎるが、反論できるかい?
はっきり言っておくぞ。この1行は、俺は上からモノを言ってる。
俺の上からモノを見て言ってるつもりなら、とりあえずまともな反論見せてくれ。
それで少なくとも上下が分かると思うぞ。
湧いてるなぁ
上から物をいってたら議論にならないのは明白だな
>>901 > そのレベルに合わせるために、できる限りリアルのたとえ話に置き換えてきたし
あー、頼むから『リアルのたとえ話』ではなく「リアルのコード」で説明してもらえると助かる
> undefinedを使うのが無用心
んー、お前がundefinedをどう使ってるのか「リアルのコード」で見せてもらえんかのう
で、順番としてまず「お前の反論」が先な、道交法はしっかり守ろう
極力他人のコードに干渉しないようにクールなコーディングをすればいいだけでしょ? いつまで喧嘩してんの?
そうなんだが、コーディングそっちのけで上下関係にこだわるゴリラがいる 適当なメスにでもマウントしとけっての
議論は構わんのだがIDか名前を出してくれんかのう
>>904 ああそう。じゃ、先に。
あるデータを別の形式に変換するクラスを設計するとする。とりあえず myConv にでもしておく。
このクラスには set と get メソッドがあって、AAA・BBB・CCC...という複数の形式のデータを受け取って、
任意の形式で返すことにする。
// AAA 形式のデータ data1 を BBB形式にする
var obj = myConv();
obj.set(data1, "AAA");
var data2 = obj.get("BBB");
こういうデータ変換クラスを使うと、特定の形式への変換が多くなるのはよくあることだから、
setやgetに対して引数で形式を指定しなかった場合、デフォルトで AAA 形式を指定したものとなるように仕様変更する。
そうするとsetやgetの内部では、2つの実装方法が考えられる。
1つは arguments.length を見る方法。もう1つは形式であるべき引数がundefinedであるかどうか。
まあ、これだけなら arguments.length を見た方が確実だろう。
追加の仕様変更として、そもそも形式名は特定の文字列なのだから、
形式名をそのままメソッドにして、setやgetを引数に応じて呼び出せたら便利だという要望がきたとする。
つまり data2 = obj.set(data1, "AAA").get("BBB"); は data2 = obj.AAA(data1).BBB(); と書けた方が楽だと。
形式名メソッドの実装は、arguments.lengthを見て、setかgetを区別してそれぞれ呼び出せばそれで済む。
さて、さらなる仕様変更として、形式FFFの対応を要求されたとする。 形式FFFは引数にdataだけではなく、もう1つ別のパラメータを受け取る可能性がある。 とりあえず -10 <= param <= 10 となる整数とする。 FFFの呼び出しは obj.set(data1, "FFF", param); data2 = obj.get("FFF", param); となる。 形式名メソッドなら obj.FFF(data1, param); data2 = FFF(param); これも形式名同様に、省略されたら特定の値をデフォルトとして使いたいとする。 こうなると、arguments.length を見るだけで区別しようとするのはむしろやっかいになってくるのが分かる。 この上さらに、形式GGGを実装し、パラメータを2つ受け取る可能性があり、それぞれデフォルト値がある、 なんてことになると、分岐はいくらでも複雑になる。パっと見では手がつけられないスパゲッティの素となる素質十分。 ここで最初の設計に戻って、そもそもundefinedであるか否かで判断するように仕様変更してしまうと、 この複雑さは全て解消される。 ここまで読んで「パラメータを全部1つのハッシュで指定すればいい」という考え方を持ってる人も出るだろうけど、 それだと obj.set({ data : data1, type : "FFF" /* param指定なし */ }).get({ type : "GGG", param1 : 2, param2 : 3 }); は読めても、 obj.FFF({ data : data1 }).GGG({ data : null, param1 : 2, param2 : 3 }); なんてやられた場合に判断がやっかいになるし、 そもそも形式名でメソッドを作って短縮形にするのは、短く単純に書きたいのだから、obj.FFF(data1).GGG(2, 3); の方が見通しがよく、 クラス利用者のタイプ量も少なくなる。
できるだけ小さな例で説明するように頑張ってはみたが、そもそもundefinedを有効利用できるのは、 引数の処理部分が複雑になってくる辺りからだから、どうしても小さな例では説明しきれなかった。 だが、こんな感じで、指定されなかった引数をundefinedで判断することで大きく見通しがよくなるパターンというものが ちゃんと存在するのは間違いない。大きなプログラムになればなるほど、そういう箇所が増えてくる。 この程度のことも思いつけないのならば、今までずっと小さなプログラムで満足して、価値を知る機会がなかったってことだろうよ。 だからあんな笑い話を平気で書いてしまう。
>>908-910 そこは俺の「イベント関連の手法」に対する反論を書くところだろ……
まあいいや、イベント関連の俺の主張に瑕疵はなかったということでで良いんだな?
この議論はこれで終わり、と。
で、undefined に関してだな
> undefinedであるか否かで判断するように
うん、そうだね
それをどうやって判定するの?と聞いていたのよー
あんた、ホントに議論が下手だなあ
mousemoveで構造にかかわらず対象の範囲内でドラッグされれば移動するクールな方法はありますか? たとえば<div id = "xxx">[<p>とか<div>とか状況によって変わり、<div>の中にさらに<div>など階層も変わる]</div>で囲まれている 今はgetElementById("xxx")でaddEventListener or attachEventをセットして eventが役に立ちそうにもないのでdocument.getElementById("xxx").style.leftで直接要素指定してleftとtopの値を変えている
>>862 の
>誰かがdocument.body.innerHTMLに丸ごと干渉するコード、
のくだりは、ユーザースクリプトを作る上では正しいと思うけどな。
サーバー側で実装するなら好きにしろという感じ。
jQueryだか何だかよく解らないのですが たまーにサイトで背景が電気を消したみたいに黒くなって YES or NO みたいなの出るヤツがありますが、アレ知ってる人います?
ライトボックスっつーライブラリ
>イベント関連の俺の主張に瑕疵はなかったということでで良いんだな? よくねえよ。日本語読めよ。 >説明ってのは、説明して理解できる人にならば簡単だが、 >そこまで達してない人には非常に困難なものなわけで。 で >既に「とことん低いところだなぁ」としか見えてないわけよ。 なんだよ。 お前に説明できるレベルまで落として書こうにも、 if (変数 === undefined) すら理解してないレベルの奴に、 どう考えても5レスじゃ納まらない量の、お前がずっと要求している サンプルコード書く気力がないよ。
>>915 おお、これでした
ありがとうございます
>>912 よくわからないからサンプルコードを掲示して
919 :
911 :2011/07/18(月) 06:55:13.76 ID:???
>>916 >if (変数 === undefined)
よし、やっとこれが出てきたな
でだ、undefined=1される危険性を知りながらtypeofもvoidも使わないのは何故だ?
また、
>>909 の例なら==nullでも十分だが、「わざわざ危ない橋を渡っている」理由は何だ?
そして、あんたの日本語読解力のために言っておくが、俺はundefined「変数」を問題視していることを確認せよ
>でだ、undefined=1される危険性を知りながら そんなもん単純だろうってか、もう何度も書いてるじゃねーかーーーーーーー!(苦笑) 「そんなもんを気にするようなバカげたコード書く奴は頭冷やせ。 JavaScriptの実行環境は、言語が安全な提供を保証するべきことまで簡単にブチ壊せる。 カギのかかってない倉庫だ。誰もが簡単に道具を持ち出し、偽の道具を置くことだってできる。 そこを気にするヒマがあったら、そうならないよう注意深くコードを書くことを周知徹底しろ」 これだけの話だ。 大きなプログラムになるほど他者のコードと干渉するかもしれない部分が増えてくる。 極力干渉しないコーディングをすることだけに注力するとしても、どれだけ努力してもまだ足りない。 くだらない誤魔化しテクで醜いコード書いて自惚れるようなチャチなプログラマがいても別にかまわんが、 それを知ったかして他人に広めようとすんな。 変数が undefined であることを比較するなら変数 === undefined が最もわかりやすい。 こういうところをバカげたくだらないテクニックでコーディングする奴は 極力干渉しないコーディングをすることだけに注力することが全くわかってない。
>>912 例えば、イベントターゲットがセレクタ #HOGE ~ div #xxx の文脈にあるか調べる
function handleEvent(e) {
for (var context = [], n = e.target; n; n = n.parentNode)
if (n.id === 'xxx') for (context.push(n); n = n.previousSibling; )
if (n.nodeName === 'DIV') for (context.push(n); n = n.parentNode)
if (n.id === 'HOGE') {
context.push(n);
context.reverse(); // 0=#HOGE, 1=div, 2=#xxx
}
}
922 :
921 :2011/07/18(月) 08:33:19.54 ID:???
セレクタの後方から順に、上方探索と前方探索でマッチングを行う これはCSSの結合子仕様に書かれている方法で、各単純セレクタにマッチしたものも全部わかる このマッチング自体は、どのノードでイベントを監視するかに左右されない documentだろうがdivだろうが#xxx自身だろうが、全く同じ文脈マッチングを適用できる イベントデリゲーションが嫌でも、どうせ文脈確認は必要になってくるだろうから
923 :
Name_Not_Found :2011/07/18(月) 08:35:57.85 ID:QreuXFBs
>>920 俺もこう思う
言語的にundefined=1出来るのはいいけど
undefined=1をする状況がよく分からんし、素人でもするかな
undefined==変数を間違って書いているかもしれないけど、この書き方はなんか気持ち悪いw
undefined は [[Writable]]: false なので ES5 を実装しているブラウザなら書き換え不可能です。Fx5 はこの規定に従っているようですね。
http://es5.github.com/#x15.1.1.3 undefined = 1; // 評価値は1
undefined; // 評価値はundefined (書き換えられてない)
書き換え可能な実装に対しては undefind を初期化し直すか、ローカル変数 undefind を定義すればいいのでは?
(function () {
if (typeof undefind !== 'undefined') { // undefined でなければ undefined で初期化し直す
undefind = void 0;
}
})();
function の中を複数人で共有しているなら「undefined を書き換えない」というコーディング規約をあらかじめ取り決めておくのが普通だと思います。
>>920 もう一度言うが、「手法」の話に対して「価値観」で反論すんな
この意味は分かってるか? 分かってないんだろうが、まあいい、次
と行こうと思ったら、
>>924 に先書かれちまったよ
まあつまり、undefinedを書き換えられる心配なんぞ、するだけ無駄ってこったよ
おっと、
>>925 は俺(
>>911 ,
>>919 )な
ついでだが、『大きなプログラム』ならプリミティブの数値・文字列・真偽値と
オブジェクトのNumber、String、Booleanとを区別する判定が必要になることも多い
何だかんだでtypeofは使うことになるんだがな
くだらない論議かましてる割に 生産性にかけてるなあお前ら
rubykaigiすらでてないとか本当にかわいそうだなあ かわいそう
ここは Ruby スレじゃないよね
別に関係なくないかあ? だってお前らもRuby使ってんだろ jsの連中もきてたが、ああ お前らはステルスアマノの腰ぎんちゃくかあ。
まあ地方の愚民どもはrubykaigi出れなくて当たり前だよな カントー地方くらいか東京周辺 お前たちってある意味悲惨だよね
可哀想な人…
C++とJava使いなんだけど
それ昭和スタイルじゃん 時代遅れ いまさらRubyくらい使える用紙他方がいいんじゃないかな
>>924 は typo でした。(undefind → undefined)
>>924 のローカル変数はvar undefined;だけでいいんじゃね
判定する意味はないような
なんだこのクソコテ ぶっこ すぞ
>>921 地道に.parentNodeで辿るしかないですかね?
>>918 いろいろ省略する(IE対応箇所とか座標計算とか)けど
document.getElementById("xxx").addEventListener("mousedown", draga, false);
document.addEventListener("mousemove", dragb, false);
document.addEventListener("mouseup", dragc, false);
function draga(e){dragObj.flag = true;//idがxxxのとき限定でtrueにする}
function dragb(e){if(!dragObj.flag){return false;//flagがtrue出なければ抜ける}
document.getElementById("xxx").style.left = event.x;//xxx上でのみ通過する前提なのでxxx要素の座標を直接変更
document.getElementById("xxx").style.top = event.y;}
function daragc(e){dragObj.flag = false;}
聞きたいことは直接変更箇所を指摘しなくてもeventなどから変更すべき箇所でのドラッグかを判断するにはどうすればいいですか?
そもそもmousedownをdocument.addEventListener("mousedown", draga, false);のみで記述できませんか?
getElementById("xxx")で動く箇所を制限しちゃうのは正道ですか?正道でない場合の記述法はどんなものがありますか?
document.addEventListenerで反応する関数内に通過する前提で式を置くのはやばいですか?(他との干渉など)
上記の結果としてのクールなコーディング例はどんなものがありますか?
こいけりくwwwwwwwwwwwwwwwwwwwwwww wwwwwwwwwwwwwwwwwwwwwww こいけりくが2chwwwwwwwwwwww wwwwwwww ww おい、小池いい加減にしろよ小池wwwwwwぶっとばすぞ小池
ssig33=小池陸
http://twitter.com/ssig33 真性キチガイのRuby使い(rails)
Rubykaigiのトイレで、親指の腐った肉を洗い流すなど血をばらまくなど
衛生害テロをやったキチガイ
奇声をあげるなどキチガイ行為
挙句の果てに、Perl使いのOと大喧嘩して殴りあいになって、警備員に追い出されるざま
Perl使いにパッシング浴びて退場
そのあとツイッターで反省無し
こいつRubykaigi一生立ち入り禁止だってさ
>>937 それも考えましたが、今回の争点となりそうな [[Writable]]: false の性質が消えてしまうのであえてグローバル変数 undefined を残す実装にしてみました。
http://jsfiddle.net/3DS2v/1/ >>939 イベントバブルを利用するなら parentNode を辿るのがいいんじゃないですかねえ。
以下、スマートに見えて効率は良くないです。(未検証なので参考程度に)
function handleMousedown (event) {
var target = event.target;
if (!Array.prototype.some.call(event.currentTarget.querySelectorAll('#a *'), function (element) { return target === element; })) {
return;
}
// 処理
}
document.addEventListener('mousedown', handleMousedown, false);
var scope = document, dragObj = {target:null}; scope.addEventListener('mousedown', drag, false); scope.addEventListener('mousemove', drag, false); scope.addEventListener('mouseup', drag, false); function drag(e) { var c; switch (e.type) { case 'mousedown': c = e.target; do if (c.id === 'xxx') break; while (c = c.parentNode); if (c) dragObj.target = c; break; case 'mousemove': c = dragObj.target; if (c) { c.style.left = e.clientX + 'px'; c.style.top = e.clientY + 'px'; } break; case 'mouseup': dragObj.target = null; break; }}
944 :
Name_Not_Found :2011/07/18(月) 16:33:06.79 ID:QDgLkaxz
カウンターを増やしていきたいのですが function hage(){ var poo = document.getElementById("text1").innerHTML; var boon = document.getElementById("text2").innerHTML; if(poo<boon){ HP = parseInt(poo) + 1 ; document.getElementById("text1").innerHTML = poo; } else if(poo> boon){ clearTimeout(timerID); } timerID = setTimeout(hage,1000);} 途中で止まったりするのですが、どこがいけないのでしょうか?
945 :
Name_Not_Found :2011/07/18(月) 16:35:29.14 ID:QDgLkaxz
<<943の訂正です カウンターを増やしていきたいのですが function hage(){ var poo = document.getElementById("text1").innerHTML; var boon = document.getElementById("text2").innerHTML; if(poo<boon){ poo = parseInt(poo) + 1 ; document.getElementById("text1").innerHTML = poo; } else if(poo> boon){ clearTimeout(timerID); } timerID = setTimeout(hage,1000);} 途中で止まったりするのですが、どこがいけないのでしょうか?
945は944でした( ´Д`)y━・~~
( ´Д`)y━・~~ じゃなく( ; ; )でした
議論こそID出すか名前にレス番入れるかしてほしい
とりあえずテンプレ議論は終わり?
結局
(案1) ID推奨、レス番を名前推奨 // >853 (1票)
(案2) ID推奨、レス番を名前強制 // >824 (1票)
(案3) ID強制、レス番を名前推奨
(案4) ID強制、レス番を名前強制
(案5) ID推奨、レス番を名前強く推奨 // >855,869 (2票)
(案6) ID強制、レス番を名前推奨 or ID推奨、レス番を名前強制
(案7) 2回目以降レス番を名前推奨 // >870 (1票)
これとかどーすんの?
とりあえず最新っぽいテンプレ用サイト
>>872
>>945 「text2の数までカウントアップ」を意図してるのなら、動作すると思います。
http://jsfiddle.net/S5keM/ ただ、カウントアップは止まってもhageの繰り返しは止まりません。
hage内で setTimeout で繰り返しなわけですが、
hage内で clearTimeout では間に合わずに繰り返されてしまいます。
(945のままでは clearTimeout まで到達しないので else if (条件) {...} を else {...}にしていますが、
到達しても止まるわけではありません)
setTimeout での繰り返しの場合、繰り返されるコード自身に止めさせたいなら
「条件次第で clearTimeout する」のではなく、「条件次第で setTimeout しない」処理が必要です。
どう書けばよいかは難しくないと思うので、ご自身で考えてみてください。
setInterval の場合と同じように止められない理由は長くなるので、次のレスに分けます。
952 :
951 :2011/07/18(月) 22:31:34.34 ID:???
* リファレンスに書いてあるようなこと setTimeout / setInterval は、 引数として与えられたコードと、実行までの間隔と、 set〜 がキャンセル用に生成するIDとを、 実行キュー(実行順番待ちの列)に設定します。そしてIDを返します。 このIDは、setTimeout / setIntervalするたびに新しいもの(連番)が生成されます。 clear〜は、指定したIDのコードを実行キューから外します。 実行キューに収めたコードの実行が始まってからそのIDでclear〜しても その回の実行が中断されるわけではないことに注意してください。 * 繰り返しを止めるには setInterval で指定間隔での繰り返し実行が出来ますが 実際のところ実行キューに入るのは次の1回分のみです。 繰り返しになるのは、コードを実行するとともに 同じコード・間隔・IDで自動的に再設定されるものだからです。 つまり一度設定すれば同じID再利用で繰り返しなので、 実行されるコードの中からであっても clearInterval にそのIDを与えてやれば 次回分は実行キューから外され、繰り返しは止まります。 実行されるコードの中に setTimeout を書いて繰り返しさせる場合には、 実行されるコードの中で clearTimeout しても繰り返しは止まりません。 IDは使い捨てだし、clear〜するタイミングが遅すぎます。 「繰り返しを止めたいところでは次回分の setTimeout しない」ように書く必要があります。
プログラムの良し悪しなんて全部価値観なのにな。 もちろん、動作しないのは論外だけど。
>>953 方法の良し悪しは目的の達成度で測れるから、価値観が入り込む余地はない
「コードを破壊されない」が目的なら、より「破壊されない」方法が「正しい」に決まっている
目的を批判するのは価値観にもとづく
「コードを破壊されるのは仕方ない」から「破壊されない方法を求めるのは無駄」と主張することはできる
だが「var、prototype には注意」し、「undefined はどうなっても良い」のなら、一貫性に欠ける
目的ではなく価値観で方法を採用するから、こういうチグハグなことになり、バグを生む
955 :
954 :2011/07/18(月) 23:50:38.27 ID:???
例えば「打鍵コストを下げる」という目的で「undefined には目を瞑る」と言うなら、まだ一貫性がある 「保守する」という目的で「自分に理解できないものは使わない」と言うなら、正直で好感が持てる だが価値観の話を延々とされた所で、そいつの目的が分からなければ、方法の是非など議論できるはずがない まして、そいつの目的が単に「相手の論破」であるなら、そいつの価値観の話なんぞ付き合うだけ無駄だ 方法の是非だけを問えば良い、どうせそいつには答えられない
ここは質問用スレなんだから チラ裏日記なら他所でやれよ
http://blogs.wankuma.com/kacchan6/archive/2008/01/28/119508.aspx にあるクロージャの動作、というか関数定義のタイミングがよく分かりません
window.onload = function(){
for(var i = 1; i <= 3; i++){
var button = document.getElementById("button" + i);
button.onclick = function(){
alert(i);
};
}
};
これはbutton.onclick=以降の関数定義時のスコープに、ループカウンタの変数iが入っているので
それに対する参照を持ってしまうのは分かりますが、
window.onload = function(){
for(var i = 1; i <= 3; i++){
var button = document.getElementById("button" + i);
//もう一つ関数で囲む
(function(n){
button.onclick = function(){
alert(n);
};
//iを渡す
})(i);
}
};
これが前のものとどう違うのかがよく分かりません。
iを引数として渡しているので、それを参照してもよさそうな気がするのですが・・・
button.onclick=…を匿名関数でくるんだときにスコープが変わるのでしょうか?教えてください
>>957 上のはiを直接参照してるからループが終わった後の値を参照する事になる
下のだと個無名関数でスコープを作ってるからiと切り離せて参照できるためループが関係なくなる
>>958 下のは無名関数にわたされてる引数の i がループカウンタの i を隠してるって感じですか?
関数定義のタイミングと変数定義のタイミングが違うから・・・とか変なこと考えてましたが、これは全然関係ないっぽいですね・・・
>>959 下でやってるのはこれとだいたい同じ
window.onload = function()
{
for (var i = 1; i <= 3; i++) {
var button = document.getElementById("button" + i);
setButtonClick(button, i);
}
};
function setButtonClick(button, n) {
button.onclick = function() {
alert(n);
};
}
for内で呼ばれたsetButtonClickは、ループごとに n がそれぞれ別の値になっている。
alertは、onclickが実行された時点で引数を探しにいって、nをみつけて表示している。
よって、alertはそれぞれ別の値になっているnをみつけて表示できる。
>>957 の前者では、alertが実行されてiを探しにいった時点で、iはループを終了して3になっているから、
どれを実行しようとも3が表示されてしまう。
3じゃなくて4だな
962 :
945 :2011/07/19(火) 08:39:27.74 ID:???
書き忘れてる所があったらアラートで教えてくれるようなの作ったんですが アラートってもしかして嫌われたりしてますか?
なにを書き忘れてて、どういうタイミングかにもよる。 多分フォームのこと言ってるんだろうけど説明足りなすぎ
965 :
951 :2011/07/19(火) 12:20:29.06 ID:???
>>962 肝心なところを見落としてました。
例えばidが text1 の要素を 0 、text2 の要素を 10 とかにしてあると、
text1 のほうは 2 までしかカウントアップしません。
innerHTMLでpoo には文字列 "0" 、boon には文字列 "10" が入り、
if (poo < boon) が、数値としての大小ではなく
文字コード順を比較するものになってしまっています。
text2の数値までカウントアップなら、 poo boon ともに parseInt などで
数値に変換しておいてから比較しないとダメでしたね。ごめんなさい。
>>882 ,885-886
テンプレ議論はここらへんが残ってるな
IDに関しては完全に持ち越しだな
あほみたいな議論を長々とするから・・・
>>963 個人的にだけど、submitのタイミングならむしろ分かりやすいと思う
blurとかfocusで発動したら発狂する
969 :
945 :2011/07/19(火) 15:10:30.57 ID:???
>>965 わざわざありがとうございます。もう少しがんばってみます
>>963 <input type="text" required />
HTML5でname属性って必須じゃなくなったんだっけ?
mjd?
973 :
Name_Not_Found :2011/07/19(火) 17:25:31.84 ID:yjnQvp1X
ajax初心者です。ajaxでDBから取得した情報を特定のdivの中に反映させたいと思っているんですが 取得した情報(多次元連想配列)を任意の形にレイアウトするのはどのタイミングでやるべきなんでしょうか? $.post( "/ajax/aaa.php", {var:val}, callbackfunc() ) 上記の書式でaaa.phpにアクセスして以下のような形で返ってきた値を array( array('tag'=>'dog', 'val'=>'1'), array('tag'=>'cat', 'val'=>'2'), … ) 以下のようにcheckboxのフォーム要素としてレイアウトしたいと思います <input type="checkbox" name="pet" value="1" />dog <input type="checkbox" name="pet" value="2" />cat このレイアウト(html化)はaaa.phpでやった上でreturnするのか 配列を受け取ったあとのjs(callback関数?)でやるのか、わかりません どっちがいいんでしょうか? .postメソッドの理解も不十分なので変なことを書いていたらすみません
普通はcallback内で必要なデータだけ取得してレイアウトする PHPでレイアウトもやっちゃう場合もあるだろうけどね(テンプレートとか使う場合等)
975 :
945 :2011/07/19(火) 18:13:48.17 ID:???
>>965 今書き直したらおもい通りに動きました。
if の前にparseIntを置いたら大丈夫でした
ありがとうございました
976 :
Name_Not_Found :2011/07/19(火) 20:42:39.80 ID:CH4oI7ck
ライブラリを使わず フォームの各コントロールの選択された/入力された値を まるっと簡単に取得する方法を教えてください multipleなselect要素とかname属性の値が同じのラジオボタンとかチェックボックスとかが ほかと違うので面倒くさくなってしまって
そのためのライブラリだろ
>>974 ありがとうございます
つぎはjavascriptでの配列操作などを勉強してみます
981 :
Name_Not_Found :2011/07/19(火) 22:42:53.20 ID:IvPy3ovO
スレ立て人ですが、やっぱLv不足で立てられません。どなたかよろ。
テンプレは
>>978 であってると思われ。
>>982 すまんレベルは足りてるはずなんだがホストのせいで立てられなかったわ
どれどれおいちゃんがスレ立てにチャレンジしてみようかな
ありがとー
>>985 多謝!
ぶじ平常に復帰してめでたい。テンプレテロのアンタ、残念だったねー(笑)。
2ちゃんらしい煽りでした。
旧スレの余り、もったいない。リンクがついてないから誰もいないし。
居たりはするが 埋めでいいだろ
function ume(){ while (thread.length <= 1000) { thread.write("埋め"); } }
梅子
ume();
function ume(){ while (thread.length <= 1000) { alert("埋め"); } }
onload = ume;
var ume = function(){ while (thread.length <= 1000) { thread.write("埋め"); } }
setTimeout(ume, 10);
おいちゃん1000とっちゃうぞー
1000とったら
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。