+ JavaScript の質問用スレッド vol.72 +
【質問を書く上で】 1)ユーザ(閲覧者)に迷惑がかかる性悪スクリプトは回答されない。 例: 別窓開きまくり、閉じる/戻るのを妨害、全画面占有、etcは最悪。 答えさせようと「分からねえんだろ」と煽っても無駄(過去スレが証明)。 2)言葉でぐだぐだ書かずにソースを貼る、ただし要点を整理して。 そのまま貼って動かせると試してもらいやすい(ただし回答者に連結さすな!) 長い(1レスに入らない)場合はアップロードしてURIを貼る。 3)初心者という言葉は危険なので使わない方がよい。 初心者を言い訳に自力で調べない/考えない奴が最悪に嫌われる。 4)自分で調べたこと/試したこときちんと書く(調べもしない奴は最低)。 ただ「動きません」「エラーです」は何も情報がないため嫌われる。 エラーは「どの行で何のエラー」を書く(ブラウザをそのように設定すれ)。 ブラウザの設定すらできんヤシはFFxのJavaScriptコンソールを使え!!! OS、ブラウザ、バージョン、うまく行かない条件を明記しエラー再現可能に。 5)特に古いバージョン限定の時は必ず明記! 回答もチグハグになり回答者に2度 手間を食わせる可能性大(現行Ver.:IE5.5-6、N6-7、Opera7-8) 6)どういう時にどういう動作をさせたいのかを脳内にとどめずきちんと書く。 例:「自動ポップアップしたい」←どういう場合(マウスオーバー、クリック、 ボタン押し、select選択)に何(別窓、レイヤー、その他)が出るのか書け! 7)質問はまっとうな(他人に理解できる)日本語で。 前項の例に限らず、他人に理解できない質問文は煽られるだけで時間の無駄
【FAQその1】 Q1. 開いた別窓/フレームの内容にアクセスできないのですが… A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。 Q2. JavaScriptでローカルファイルを読み/書きたいのですが… A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに… Q3. 同じタグの中でonclick="foo()"とonclick="bar()"を同時に使いたいのですが… A3. セミコロンで複数の文を区切れます。onclick="foo();bar();"としましょう。 Q4. document.write(...)でページ内容を追加したいのですが… A4. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。 部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、 (2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。 innerHTMLは非標準ですがIE、Opera、Safari、Gecko(N6/N7/Firefox等)で対応済。 Q5. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが… A5. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるか <div><table>...</table></div>とでもしてdivのinnerHTMLを書き換えましょう。 Q6. DOMでtable要素にtr要素を追加しても表示されないのですが… A6. DOMでは(XHTML 1.x除く)tbody要素にtr要素を追加する必要があります。 tbody要素はtbodyタグを書いていなくても自動的に作成されます。 またはtable.insertRow()/tbody.insertRow()を使いましょう。 Q7. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが… A7. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。 Q8. フォーム部品名を変数にした「...myform.変数名.value」が動きません… A8. 「document.forms.myform.elements[変数名].value」でどぞ。 JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。 Q9. Aタグのonclickで動作指定してるのですが時々動きません… A9. 「onclick="...;return false"」としないとページ移動しちゃうから。
【FAQその2】 Q10. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが… A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。 IEでは要素オブジェクトのプロパティcurrentStyleを使う。 Q11. 100*1.15の結果が114.999…998となってしまうのですが… A11. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。 Q12. 任意のデータをサーバ(別鯖ではない)から取り寄せたいのですが… A12. IE7/Gecko/Opera/Safariのnew XMLHttpRequest()、IEの new ActiveXObject("Msxml2.XMLHTTP.6.0") (または"Msxml2.XMLHTTP.3.0") を使えばできます。古いブラウザだと隠しフレームに読むなどのワザが必要。 Q13. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません… A13. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。 複数の関数を呼びたいときは obj.onclick=function(){foo();bar();}; という風に無名関数を作りましょう。中に書かれたコードが実行されます。 Q14. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが 「"...this..."」とか「function(){...this...}」ではうまく行きません。 A14. それらが実行されるときはthisは別のもの(window等)を指してしまってる。 「function(x){return function(){...x...};}(this)」のようにthisを別の変数に 束縛しその変数を使って。循環参照によるメモリリーク問題あり(この項記述検討中) Q15. 文字列の置き換えをするときにコードを使いたい(Perlのs///e)のですが… A15. string.replace(/.../,function(str,p1,p2,...,offset,s){...})としましょう。 正規表現にマッチした文字列がreturnで返された文字列に置き換えられます。 各引数はstrがマッチした部分文字列、p1,p2,...が1番目、2番目、…の()の中身、 offsetがマッチした位置、sが置き換え前の文字列全体になります。 Q16. input type="file"の値を設定(参照)できないのですが… A16. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。 Q17. getElementById('ID名')や$('ID名')で要素が取れないのですが… A17. コード実行時点でHTMLがそこまで読まれてない。onload中でやるとか。
【主張の対立:他人の嗜好は尊重。損得の議論は歓迎】 ・仕様を読む:回答者なら仕様の該当部分は読んでいるべき。質問者でも 仕様を読まずうだうだ書く奴は注意されて当然。読み間違いは生温く指摘。 ・英文文書:翻訳の努力を惜しむべからず。 読めないなら和訳を探し、 なければあきらめよう。翻訳サイトを知っている人はうまく誘導してあげて。 ・IE専用/アンチIE/クロスブラウザ:「○○は不要」「○○だけであと は無視」は不毛。質問者が分かって選択していれば尊重する。無知か らIE専なのは指摘してあげると親切。 ・標準準拠 vs 使えればよい:標準はブラウザが変わっても維持される 可能性大。非標準機能も損得を分かった上で使うならよい。 ・MS vs アンチMS:MS固有の情報はMSのサイトで見ないと分からないが、 そこだけ見ているとIE専になる。あとは上2件と同様。 ・別窓、イベント抑止など:一般には迷惑スクリプトだが質問者に正当 な理由があることも。尋ねて分かってないようなら煽っても可(w ・innerHTML vs DOM:それぞれに長所/弱点があるので理解した上で選 択するべき。一概にどちらは駄目、とは言えない。 ・on属性 vs addXXX():ハンドラが1つだけと分かっていればon属性 で簡単にハンドラを設定もあり。上書きが心配ならaddXXX()。
9 :
Name_Not_Found :2009/07/19(日) 00:50:09 ID:HgmPgDOx
あげ
「クッキーはセキュリティのため、発行したドメインに対してしか 読み取りできません」 って教科書に書いてあるのに、なんで、 XSSを使うと、アタッカーのサーバーにクッキー情報が 送信されてしまうの?
そういうお勉強はそういうことの解説サイトでも読め。 JavaScriptを使う開発者は熟知していないといけないことだから頑張って。
>>10-11 こーいう発言見てるとどこまで本気でどこから釣りなのか判断な難しいよね
13 :
Name_Not_Found :2009/07/19(日) 13:12:38 ID:bKwQLBDx
>>10 は全スレのラストの人かね。
Post自体は、投げたい値をGETパラメータの形にして、
XmlHttpRequest.send(値)でOK。
何言ってんだか
15 :
Name_Not_Found :2009/07/19(日) 15:22:33 ID:bKwQLBDx
勘違いだったらすみません。
他のドメインに送りたいんだからxmlhttprequestじゃ無理でしょう
既存で複雑なJSを利用したサイトではIE8対策のために、EmulateIE7としている
と思います。
EmulateIE7時はJSエンジンもCSSもIE7相当で動作します。
http://blogs.msdn.com/jpwin/archive/2009/04/03/ie8-jscript.aspx 例えば、getElementByIdが大文字小文字区別するようになりましたが、
EmulateIE7を付けると、IE8で大文字小文字区別しません。(標準モードであっても)
しかしAJAXやDOM構造など変更しているため、無理が出ている場所があるのでは
ないかと考えています。
ここが怪しそう!とか思いつくものを上げられますか?
例えば、セキュリティ設定はEmulateIE7でもIE8の設定で動作せざるおえないため、
その辺で矛盾している箇所があったりしそうと思っています。
「ABORT : これは画像の読み込みが中断されたときに発動します」 これって、どういうこと?
>>13-16 GETでもPOSTでも他のドメインに「送ること」自体はできるのでは。
できないのは他のドメインから送られて来た内容にアクセスすること。
>>19 他ドメインへのPOSTは画面変移なしという条件を満たせない
ヒント: 204 No Response
応答いじれるならcookieもiframeとlocation.hashでいける
>>18 そのまんま
画像の読み込みが中断されたときに発動する
--------------------
//初期状態
[タブ1][タブ2]...
タブ1の内容
(リンク1)
(リンク2)
--------------------
//リンク1選択後
[タブ1][タブ2]...
リンク1に設定された外部ファイル
リンク1に設定されたタブ内容
(リンク1)
(リンク2)
--------------------
リンク1をクリックしたら、
a.リンク1に設定された外部ファイルを読み込んで表示
b.リンク1に設定された内容を表示(同じHTMLファイルに記述してある内容を表示)
この2つを実現したいと思っています。
aは、
http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ のDemo #2を見てできたのですが、bを実現することができません。
実現したいことをまとめると、「外部ファイルからの内容」と「内部ファイルの内容」を一つのタブに表示したい、ということです。
実現できそうなライブラリなどがあれば教えていただけないでしょうか?
>>25 その説明では分からないな
言葉の意味してる対象が不明
>>26 説明が足らず、すみません。
まず作りたいと思っているのは、画面遷移をしないタブメニューです。
通常であれば、[タブ1]や[タブ2]を選択して、タブに設定されたdisplay:blockなどを変更すると思います。
それを、<a>タグなどのリンクで変更したいと思っています。
さらに、リンク1を選択した時、
・リンク1に設定された外部ファイル
・HTMLに記述してある一部をdisplay:inline
を同時に実現したいと考えています。
外部ファイルは読み込みに多少時間がかかるため、内部ファイルに記述するのがは困難であり、
HTMLに記述してある内容は、textareaなどのフォームであるため、他のリンクを選択したときでも値を保持したいと思っています。
>>27 さらに追記です。
タブは2つで固定と考えています。
また、これはかなり難しい気もするのですが、
リンク1を選択した時、
・タブ1に外部ファイルの内容+HTMLに記述してある一部をdisplay:inline → 表示
・タブ2に外部ファイルの内容+HTMLに記述してある一部をdisplay:inline → タブ2が選択されたときに表示
ということもできたら完璧です。
ここは (自らが組み立てた) Javascriptの (部分的に分からない事を) 質問するスレッドですよ。
30 :
Name_Not_Found :2009/07/22(水) 01:35:53 ID:0B12FuM1
>>28 タブの切り替えと内容のロードは別物として考えた方がいいと思う。
>>27 の「HTMLに記述してある一部」が何を指すのかが
いまいち分からないんだけど、
予め「HTMLに記述してある一部」にアクセスしておいて、
parentNode.removeChildするなりcloneNodeするなりして
キープしておいて、
リンクをクリック→/complete|loaded/.test(readyState)
→ロードした内容とキープしておいたノードを
タブ内容ブロックにappendChild
っていう流れでどうでしょうかね。
>>29 すみませんでした。
Javascriptに詳しい方が多いと思ったので、他のライブラリや機能変更なども教えていただけると思っていました…。
>>30 ありがとうございます。
>>HTMLに記述してある一部
これは、タブを選択した時に展開される、<div>タグなどで囲まれた内容のことを指しています。
ほとんどのタブ切り替えライブラリは、getElementByIdなどで、その内容をdisplay:inline/blockしていました。
説明が足りず、すみませんでした。
アドバイスは物凄く良く分かりました、ありがとうございます。
つまり、getElementByIdなどで内容を取得する→タブ内容にappendする…ということですね。
助言を元に、
http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ のライブラリをいじってみようと思ったのですが、知識が乏しいため、どこを変更すれば良いか分かりませんでした。
もう少し勉強してみようと思います。
32 :
Name_Not_Found :2009/07/22(水) 02:37:40 ID:0B12FuM1
>>31 > >>HTMLに記述してある一部
> これは、タブを選択した時に展開される、<div>タグなどで囲まれた内容
あー。だったら
>>30 のは少し的外れでした。まず、タブ自体を、
<a href="#tab1">タブ1</a><a href="">タブ2</a>…
それに呼応するブロックを、
<div id="tab1">ブロック1</div><div id="tab2">ブロック2</div>…
タブ自体がクリックされたら、呼応するブロックをdisplay:block、
他のタブに呼応するブロックをdisplay:none、とする(HTMLは例です)。
ここで、ブロックの表示非表示は関数化しておく。
「リンクをクリックしてブロックの中身を書き換える」は、全く別機能として考える。
タブ2が表示されている時に、リンク1をクリックしたら、Ajaxしてリンク先のデータを取得し、
タブ1を表示(先述の関数を使うと便利)して、ブロック1の中身を取得したデータで書き換える。
ですかね。
たぶんタブ・ブロック・リンクをまとめてクラスにした方が簡単だけど。
>>32 重ね重ねありがとうございます。
また説明不足でした…すみません。
タブの数と<div>タグで囲まれた内容の数は全く違っています。
タブの数は前に書いたとおり2つなのですが、<div>タグの数は30個以上あります。
できればその<div>全てをタブ化したいのですが、あまりに多いため、リンクからタブに内容を読み込もうと思っています。
・リンク1をクリックしたら、リンク1に設定された外部ファイルと<div>内容をタブ1に読み込む
・...
・リンク30をクリックしたら、リンク30に設定された外部ファイルと<div>内容をタブ1に読み込む
という様な感じで考えていました。
>>34 >>30 で書いたのでいけそうですね。
色々調べて実現したいと思います。
ありがとうございました。
【質問内容】
関数に送った単語と同じ名前の配列内から単語を取り出したいのですが、何か方法はありませんか?
下記のように配列を準備しています。
CE = new Array();
CE[0] = new Array(りんご,赤い,つるつる);
CE[1] = new Array(ぱいなっぷる,黄色い,とげとげ);
VE = new Array();
VE[0] = new Array(はちみつ,茶色,ぬるぬる);
VE[1] = new Array(砂糖,白い,こな);
この配列を利用し、関数に送った文字列で配列から取得する方法はないでしょうか?
function toridasi(rule, i){
var chk = "" ;
chk = rule[1][i] ; // ← ここで、送られてきた文字列での配列から検索したい
return(chk);
}
//↓本処理
var rule = "VE";
var i = 0 ;
kekka = toridasi(rule, i) ;
if (kekka == "ぱいなっぷる") {
document.write("YES");
}
>>36
文字列"VE"で変数VEにアクセスしたいってこと? eval("VE");とか、グローバル変数ならwindow["VE"]でできるけと根本的にお勧めできない var E = {}; E["CE"] = CE; E["VE"] = VE; alert(E["VE"][0][1]); // はちみつ
switch 文でもよさげだけど、砂糖って粉かな?
>>37 ありがとうございます。
言葉足らずですいませんでした。
E["VE"] = VE; とすると、VEの配列内を取得できました。
そのような方法でも取得できるのだということがわかりました。
ですが、
kekka = toridasi(rule, i) ;
のruleに入る文字列はその遣い所で変化します。
VEだったりCEだったりします。
ですのでレスの内容ですと、最終的に E["rule"][0][0] とし、その上で配列から文字を取得したいのです。
汎用的に、配列と同じ名前の文字列を関数に送り、その文字列と同じ配列から文字列を取得したいのです。
>>40 ,37
ありがとうございます!
できました!
>>41 検索してもよくわかりませんでした。
ruleは使うのは望ましくないということですか?
他のに変えておきます。
ありがとうございます。
<form> <input type="submit" name="submit" /> </form> のform.submit()を実行する方法ってある?
ある
こう? document.form.constructor.prototype.submit.call(document.form)
document.getElementsByTagName("form")[0].submit
document.forms[0].submit()
name 属性の値を "submit" にしてるからだな。 submitボタンの click()メソッドならいけたかな。
nameにヘンなものをつける奴が糞
Infoseekメールでも name 属性に "submit" 使ってるし。 元々あの糞重さからして、やる気ないんだろうけど。
type="submit"のvalueを送りたくないってことなのか? それならname属性削除してsubmitしたらいいじゃん 〜.removeAttribute("name")
javascriptも、ちゃんと動くようになるとおもしろいよね。
<SCRIPT type="text/javascript"> <!-- window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); window.open("","","width=300,height=200"); //--> </SCRIPT> いま、練習用にちょっと書いてみたコードなんだけど、 これをforループで書き直すと、どうなる?
<SCRIPT type="text/javascript"> <!-- for(i=1;i<=25;i++){ window.open("","","width=300,height=200"); } //--> </SCRIPT> でけた。 実行すると、非常にウザイことになる。
<SCRIPT type="text/javascript"> <!-- for(i=1;i<=25;i++){ window.open("","","width=i*2,height=i*2"); } //--> </SCRIPT> これを実行すると、 大きなウインドウになってしまうのですが、 なぜですか?
> 一、ユーザに迷惑となるスクリプトを書かない者 実験とはいえ、別の例なら答えるよ
<BODY> <div onMouseOver="this.style.fontSize='70px'" onMouseOut="this.style.fontSize='1px'" > aaaaa </div> </BODY> おもろいスクリプトができた
専用ブラウザの機能とかで、 ウザイやつの書き込みを1pxにする 機能とかって思いついたんだけど、どないだ?
>>60 どの専用ブラウザで使えるのか、また、どのようにウザイレスを判定させているのか書かない事には。
>>61 V2C
たくさんの人から
「ウザイ」認定されると、その
情報がXMLとかで伝わってきて、
自動で反映される。
>>62 V2C便利だな・・・
1pxだけじゃなくて派生も産まれそうだから公開してもよいかもしれない。
誘導されてきました。
javascriptのマウスオーバーについてです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " xml:lang="ja" lang="ja">
<head>
<title>----</title>
<link rel="stylesheet" type="text/css" href="---.css" />
<script type="text/javascript">
<!--
function naka(){
document.test.src="neko2.jpg";
}
function soto(){
document.test.src="neko.jpg";
{
// -->
</script>
<div>
<img src="neko.jpg" name="test" alt="pic"
onMouseOver="soto()"
onMouseOut="naka()">
</div>
下のbodyの文が違うようで、形式チェックに通りません。
どう改変したらいいのでしょうか?
根本的に間違ってますか?初歩ですいません
なんで XPathResult に __iterator__ 実装されてないの・・・
66 :
Name_Not_Found :2009/07/24(金) 14:24:17 ID:yRksX0HW
>>64 body文と形式チェックが何を指すのかはさておき。
ただ直すだけなら、こう。
function naka(element){ element.src = "neko2.jpg" };
function soto(element){ element.src = "neko.jpg" };
<img src="neko.jpg" id="test" alt="pic" onmouseover="naka(this)" onmouseout="soto(this)">
neko2.jpgをキャッシュしておくなら、コレを追加。
var neko2 = document.createEleme(img);
neko2.src = "neko2.jpg";
始めたばっかりっぽいけど、いろいろがんばれ。
67 :
66 :2009/07/24(金) 14:30:21 ID:yRksX0HW
>>64 書き忘れたw
このままだと、idがあまり意味ない。idを活かすなら
var neko2 = document.createElement("img");
neko2.src = "neko2.src";
window.onload = function(){
var img = document.getElementById("test");
var p_src = img.src;
test.onmouseover = function(){ img.src = neko2.src; };
test.onmouseout = function(){ img.src = p_src; };
}
で、ここからさらに、これを一般化してみたりとか、addEventListenerとattachEventを使ってみたりとか、
いろいろ夢がひろがりんぐ。
68 :
67=66 :2009/07/24(金) 14:32:12 ID:yRksX0HW
>>64 書きまちがえたw
このままだと、idがあまり意味ない。idを活かすなら
var neko2 = document.createElement("img");
neko2.src = "neko2.src";
window.onload = function(){
����var img = document.getElementById("test");
����var p_src = img.src;
����img.onmouseover = function(){ this.src = neko2.src; };
����img.onmouseout = function(){ this.src = p_src; };
}
>>64 どこから誘導されたのか知らないけど、(x)htmlの質問にしか見えない
70 :
Name_Not_Found :2009/07/24(金) 14:45:23 ID:yRksX0HW
71 :
Name_Not_Found :2009/07/24(金) 17:33:28 ID:CwgWMJEK
安易な気持ちでIE8をインストールしたら、自分のHTMLファイルがぜんぶ 大崩れになってます。どこが責任とってくれますか?JavaScriptも変な 感じでうまく動きません。
>>71 安易な気持ちで入れた自分で責任を取るべきなのと、スレ違い
安易な気持ちで・・セキニン・・><
74 :
71 :2009/07/24(金) 18:23:52 ID:CwgWMJEK
安易な気持ちというのは、更新の準備ができましたって言われてついその 気になってしまったからです。IE5のものをちゃんとフォローして正常に 表示してくれるのがベンダーの責任ではないのでしょうか。これでは、と てもJavaScriptにクロスなんかできません。IE6を再インスコできるので しょうか。
>>74 今までのIEの表示がおかしかったのです。
また、javascriptに限りませんが、IE6,7,8では挙動が変わります。
かなり有名な話なので「知らなかった」では仕事だとしたら通りません。
また私事での事でしたら情報不足です。
あと、あなたはこれから安易に責任という言葉を使わないようにしたほうがいいでしょう。
自己責任という言葉を噛みしめてください。
#親切心で付け加えると、互換モードがあります。
#情報を集めてください。 そうすれば理解できます。
>>74 >フォローして
フォローされてる。
>>75 の言うとおり自分で調べてこい。
これは煽りではない。
繰り返す。これは煽りではない。
これがゆとりのへいが(ry
ガチクレイマーw
>>70 質問者はHTML/CSSから誘導されてここにきた学生だよ
お察しのとおり課題らしい
一.正しい(validな)HTMLとは何か知っており書ける者
82 :
80 :2009/07/25(土) 01:34:54 ID:O2EE4vTk
>>80 >
>>70 > 質問者はHTML/CSSから誘導されてここにきた学生だよ
何も知らないのにフレームワークに手を出してここに来る
輩に、個人的に飽きていたので、なんかはしゃいでいっぱい書いちゃった。
さらに当事者が現れないのが恥の上塗り。
83 :
70 :2009/07/25(土) 01:37:00 ID:O2EE4vTk
>>64 は XHTML で書いてるから script タグの指定方法が違うとか、
img タグの書き方が違うとか、結局そんなことなんじゃね、まさか。
85 :
Name_Not_Found :2009/07/25(土) 03:08:28 ID:7UvtytO+
いずれにせよ、今年の夏休み第1号っぽいし、生暖かく 見守りたいです、俺は。
86 :
Name_Not_Found :2009/07/25(土) 03:11:30 ID:7UvtytO+
>>84 >
>>64 は XHTML で書いてる
よく見たらstrictなんだね(・∀・)
ギリギリ派だった俺には、夏休みの宿題に早々と取り組む態度は見習うべきかもしれん。
能力しだいでは今はじめるのが既にギリギリ
日本の教育はまず最初に、自分で調べる方法を教えるべきだと思うんだ。 理解できてないことを復習しなきゃならん奴が 自分で「適切に」調べることを知らないから、人に聞くなどという愚を犯す。
まさにそれが教えるべきことを3割削減して子供から考える力を 奪ってしまった「ゆとり教育」そのもの。
それやっちゃうと情弱を誘導できなくなって支配構造が崩れない? 4年前の郵政選挙も今回の民主ブームも意図して作り出されたものでしょ。
(キリッ
はいはいスレチスレチ。 javascriptの話以外はそれ以上盛り上がらないように。
夏だねえ…
95 :
Name_Not_Found :2009/07/25(土) 17:08:53 ID:IydX7OFj
質問です。alertというのはOS系メソッドですよね。だとするとどう して記述のとき、windowオブジェクト配下なのでしょうか。alertの テキストスペースにアペンドできるのも不思議でなりません。何か 設計上混乱しているのではないでしょうか。
>alertというのはOS系メソッド alertウィンドウを表示させるwindow系メソッド
混乱しているのはあなたではないでしょうか。
class属性にnumを含めると+-で 数字をインクリメント(デクリメント)する機能を作成しています。 この動作で通常の入力のようにchangeイベントを発生させることはできないのでしょうか? <html> <head> <script type="text/javascript" src="jquery-1.3.2.min.js"></script> <script> $(function(){ function changeValue(val, inc){ if(/(-|\+)?\d+/.test(val)){ val = parseInt(val); val+=inc; } return val; } $("input.num").live("keypress",function(evt){ var c=evt.charCode; switch(c){ case 43: this.value=changeValue(this.value,1); return false; case 45: this.value=changeValue(this.value,-1); return false; } }).live("change",function(){ alert(this.value);//test用 }); }); </script> <body> <ul> <li><input type="text" class="num" /></li><li><input type="text" class="num" /></li><li><input type="text" class="num" /></li></ul> </body> </html>
jquery使うほどの物じゃない
>>98 そのままでは発生しない
jQueryにイベントをfireする関数があったような
>>100 んと、発生自体は、$(this).change()で起こせるのすが、
+-以外の入力があるときは、普通に発生しますので
+-だけでいじったときにだけblurのタイミングで発生させることになると思います。
それを実装する方法がぴんとこなくて聞いたしだいです。
>>101 case 43: this.value=changeValue(this.value,1); return false;
case 45: this.value=changeValue(this.value,-1); return false;
よくわからんけどここに書いたらあかんの?
>>102 press に 書くと +-を押す度に発生してしまうからです。
普通に編集した場合と同じように、
フォーカスを失なったときに change を発生させたいのです。
classに .num を 追加するだけで上記機能が得られ、
他のイベントも問題無く発生するように作成したいです。
>>103 なるほど、それならフラグ立てて、フォーカス失った時にフラグ倒しつつfire
ん・・・?すまんたぶん変なこと言ってるw setTimeoutで1秒後とかにfireさせればいいのかな もちろん重複しないよう、setTimeoutするときに前回のtimeridはキャンセルしとく
focus でキャッシュ、blur で同一チェック・発火
ありがとうございました 以下で意図通りになりました var callChange,src; $("input.num").live("keypress",function(evt){ var c=evt.charCode; switch(c){ case 43: this.value=changeValue(this.value,1); return false; case 45: this.value=changeValue(this.value,-1); return false; if(callChange) callChange=false; } }).live("change",function(){ alert(this.value); }).focus(function(){ src = this.value; callChange = true; }).blur(function(){ if(callChange && (src!=this.value)){ $(this).change(); } });
108 :
Name_Not_Found :2009/07/26(日) 01:21:38 ID:Bt8nhPkz
拡大版画像は元から用意してる気がする たぶんしてることは、大きい画像からマウスの部分の切り出しだけ 画像表示用の枠を用意しておいて、切り出し元の画像の座標をいじるだけじゃないか?
110 :
Name_Not_Found :2009/07/26(日) 12:54:51 ID:GOjyU0kF
javascriptで用意されている関数を使う場合にどういう時に try〜catchをつけるのかが分かりません。 javaではメソッドに対してどういう、例外が起こるのかが 記載されているが、javascriptの関数には例外がどういう場合に 起こるのかが記載されていません。javascriptで用意されている関数はどういう 基準でtry〜catchをつけるんでしょうか?
処理が止まりそうな時 普通はつけない、つけなきゃ困ると言えるときにつける
XMLHttpRequestなオブジェクトを作るときに使うな。 var req = null; try{ req = new XMLHttpRequest(); }catch(e){ try{ req = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ req = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ } } } }
Iteratorで使う function g() { for(var i = 0; i < 3; i++) yield i; } var it = g(); try { while(true) alert(g.next()); } catch(e if e instanceof StopIteration) { alert('end'); }
yield…
2.0厨がくるぞ
>>110 日用品を揃えに買い物に出かけるとするじゃない?(関数呼び出し)
途中、道端に落ちてるう○こを拾って食べるんだけど(関数内定型処理)、
普段平気なのに、そのときの体調によってはお腹を壊すかもしれないでしょ?(例外発生)
こんなとき、うんこを食べる直前に try をかけておけば、ダッシュでトイレに駆け込めるの(catch)。
ここで外出前にも try をかけてあれば、汚れたパンツを着替える為に家に帰ることも出来るわ(throw)。
最後に finally を用意しておけば、仮に家に帰ることになってもコンビニで万引きはしていけるの。
また、お腹を壊さなくても、財布を忘れたことに気付いたときに家に帰っても良いわ(throw)。
こんな説明で分かって頂けるかしら。
function 買い物() { try { 家を出る(); try { う○こを食べる(); if(お腹壊した) throw new お腹壊した(); 買い物をする(); if(財布忘れた) throw new 財布忘れた(); } catch (e if e instanceof お腹壊した) { トイレに駆け込む(); } } catch(e if e instanceof 財布忘れた) { } finally { 家に帰る(); } }
118 :
Name_Not_Found :2009/07/26(日) 23:47:34 ID:GOjyU0kF
110です。皆様回答ありがとうございます。 なんとなく基準がわかりました。 基準は、処理が止まりそうな時ですね。 こういう場合が考えられるじゃん的な時につける。
実行してエラーが出るとき。 ただし、たいがいメソッドがないとか、nullに対してメソッドを呼び出そうとしたとか、 メソッドの引数があり得ない型のものを入れたときぐらいで、 事前にチェックすればほとんど回避できる。 実際使うのは一部のブラウザ依存コードを書くときぐらいかな。 上記のXMLHttpRequest以外だとこんなのとか。 var input = null; try{ input = document.createElement('<input type="checkbox" name="check1">'); } catch(e){ input = document.createElement('input'); input.setAttribute('type', 'checkbox'); input.setAttribute('name', 'check1'); } あとは、自作メソッドでnew Error()を投げてその捕捉用とか。
そういえばDOMだと例外を投げる属性だのメソッドだのは多かったな。
検証はIE8にて 以下のコードにて関数内のthisが常にwindowを指している気がするのですが勘違いでしょうか <html><head> <script type="text/javascript"> window.onload = function() { var ts = document.getElementsByTagName('span'); for(var i = 0, l = ts.length; i < l; ++i) { (function(n) { ts[n].attachEvent('onclick', function(e) { alert(this); //IEだと[Object Window] Firefoxだと[Object HTMLSpanElement] this.close(); //IEだとウィンドウが閉じられる Firefoxだとエラー }); })(i); } } </script> </head> <body> <span>あ</span><span>い</span><span>う</span><span>え</span><span>お</span> </body></html> FirefoxではaddEventListenerに変えてください IEって元々こんな仕様でしたっけ?
122 :
121 :2009/07/27(月) 02:59:08 ID:fOplKBoa
ごめんなさい sage外し忘れてました
123 :
Name_Not_Found :2009/07/27(月) 03:31:53 ID:GOsWrdK9
イベントターゲットとなるオブジェクトが別途わたされいるよ。 thisがグロスコなのはJScriptだから。
124 :
Name_Not_Found :2009/07/27(月) 03:36:22 ID:GOsWrdK9
途中で送信しちゃった。 attacheventに渡した関数の中で argumentsの中身を確認してみ。
125 :
Name_Not_Found :2009/07/27(月) 09:07:24 ID:PUM6N5J4
Firefoxで、その要素がswfかどうかを判別するには、 objectやembedの属性に書かれている値で判断するしかないかな?
目視。
Firefoxなら俺も目視だわw
128 :
Name_Not_Found :2009/07/27(月) 16:30:45 ID:VhD30XeU
popupblockがかかっているブラウザで、自分の作ったwindow.open(....)の リンクを例外化してポップアップさせる方法はありますか。何かおまじない のような設定があるのでしょうか?よろしくお願いします。
129 :
Name_Not_Found :2009/07/27(月) 17:17:12 ID:tdsia8Z3
質問です。 ///////////////////////////ここから var hoge = { foo: function(){ alert("foo!"); } ///////////////////////////ここまで 上記「ここから」〜「ここまで」に全く手を加えずに、 hoge.foo()を実行した際 alert("foo!")の処理の後に別の処理が走るように追加したいのですが どのように書けばよいのでしょうか?
130 :
129 :2009/07/27(月) 17:27:51 ID:???
要jQueryの書き方でも大丈夫です。
131 :
Name_Not_Found :2009/07/27(月) 17:43:18 ID:PUM6N5J4
var _foo = hoge.foo; hoge.foo = function(){ _foo(); alert("ちょっとは考えろよ"); }
すみませんどこで質問すればよいかわからなかったので・・・。 A.html, B.html, C.htmlの3つのページがあって、 それぞれのページに同じナビゲーション部(N.html)を表示したいのです。 A.html, B.html, C.htmlのそれぞれから、 SSIの<!--#exec cgi...を使って、N.htmlを読み込む(cgiはperl使用)のと、 AjaxでN.htmlを読み込むのとでは、どちらが実行速度が速い(ユーザーに不快感を与えない) のでしょうか? 実際は、htmlは、ABCの3つでなく40ページほどあり、それぞれがN.htmlを読み込んでいます。 また、ナビゲーション部だけでなく、ヘッダーフッターあたりも共通化したいのです。 よろしくお願いします。
サーバーサイドで出来るならそれがいい
134 :
132 :2009/07/27(月) 18:24:48 ID:???
>>133 ありがとうございます
Ajaxより軽いですよね・・?なんとなく体感で
135 :
Name_Not_Found :2009/07/27(月) 18:39:25 ID:PUM6N5J4
>>134 体感速度は圧倒的じゃないか?
Ajaxするってことは、自前でDOMにぶら下げなきゃならない、
つまり、本体のDOMContentLoadedを待たなきゃならないわけだから。
軽い(とユーザが感じる)かどうかはモジュール部のプログラム次第。
本体部分のロード時間に対して、十分に短い時間の処理で済むのなら、
サーバ側で処理してしまった方がいい。
けど、本体ロードが重いと感じるほど処理時間がかかるのなら、
先に本体をロードして、モジュール部は非同期通信して後からぶら下げた方が
ユーザフレンドリーだろうし。
なんで#includeではなく#exec?
137 :
121 :2009/07/27(月) 19:06:15 ID:fOplKBoa
>123-124 どうもありがとうございました で ちょっと別のコード書いてみました (window.Tags = function(){this.initialize.apply(this, arguments)}).prototype = { initialize: function() { alert("in initialize"); alert(window == this); //false test(); //true var span = document.getElementsByTagName('span'); for(var i = 0; i < span.length; i++) { (function(n) { span[n].attachEvent("onclick", function() { alert("in onclick function"); alert(window == this); //true }); })(i); } } }; function test() { alert("in test function"); alert(window == this); } window.onload = function() { new Tags(); } どうやら常にthisがwindowを指してるわけじゃないみたいですね なまじメソッド内だとちゃんとJavaScriptと同じ動作するので今まで気づかなかったです
>>136 includeでもできました
知らなかったありがとうございます
>>137 単にthisについて分かってないだけじゃないか?
callやapplyなどで明示的に指定されたときを除いてobj.method()の形でコールされればthis == obj
コールバックなどで関数が直接呼ばれるとthisはグローバルオブジェクトになる
というのがJavaScriptの仕様
140 :
Name_Not_Found :2009/07/27(月) 19:26:36 ID:PUM6N5J4
>>137 >>123 はちょっと間違ってたごめん。
element.attachEvent("イベントタイプ",function(){ /* やりたい事 */ });
第二引数の関数でのelement(イベントターゲット)への参照はevent.srcElementです。
いつも自前の関数でaddEventListenerと統合しちゃってるから勘違いした。
ごめんなさいごめんなさい。
141 :
Name_Not_Found :2009/07/27(月) 19:28:03 ID:PUM6N5J4
>>139 たぶん、addEventListenerだと
element.addEventListener("click",function(){ alert(this); });
で、elementが参照できるから、その辺で混乱したのだと思う。
>>141 そのへん盛り込もうとしたのに盛り込めてなかった・・・
callなどで呼び出し側が気を利かせた場合を除いて
143 :
Name_Not_Found :2009/07/27(月) 19:42:23 ID:PUM6N5J4
>>142 自分も普段は
element.addEventListener("click",function(){ alert(element); });
ってお気軽に書いてて、
>>123 で適当な事書いてしまったので…
144 :
Name_Not_Found :2009/07/27(月) 21:48:05 ID:PUM6N5J4
有名な話かもしれないけど、はまったんで書いてみる。
IEでURLのスキームがhttpsなページで、背景画像が貼ってある
要素をremoveChildすると、セキュリティの警告が出る。
var div = document.createElement("div");
div.style.backgroundImage = "url(foo/var/etc.jpg)";
document.body.appendChild(div);
div.parentNode.removeChild(div); // ←ここで警告が出る
対処法はremoveChildしないで
div.outerHTML = "";
わかんねーよそんなの…
http://support.microsoft.com/kb/925014/ja
145 :
129 :2009/07/28(火) 02:53:05 ID:???
>>131 遅くなりましたが、有難うございました。
alertwww
Ajaxって、どうやってサーバーに データーを送信してるの?
req.open("POST","example.php",false); req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); req.send("example="+encodeURIComponent("ググれカス"));
「要素が何のイベントハンドラを持っているか」という情報って取得する方法ありますか? やりたいことは、 1.divにdblclickが設定されている 2.そのdivの中にspanがあり、clickが設定されている 3.spanをclickする速度を上げるとdivのdblclickが反応してしまう この3番目を反応しないようにしたいのです。 stopPropagationを考えたのですけど、dblclickでイベントが発生しているspanのclickでstopPropagationを実行しても意味がなく。 eventのtargetでイベント発生要素を確認し、その要素がclickイベントを処理する要素ならdblclickを処理しない ということができないかなと考えてます。 良い方法ないですかね?
149 :
Name_Not_Found :2009/07/29(水) 16:44:45 ID:woN9Mic2
>>148 typeof element.ondblclick == "function"
typeof element.onclick == "function"
とかで条件分岐は駄目かね?
ちったあ確認して書けよ
>>149 試してみたのだけど、addEventListenerでイベント紐づけると判断できないみたい。
greasemonkeyのscriptということもあってaddEventListenerでbindしてるのです。
click 時に dblclick を stopPropagation するリスナを登録 そのリスナで自分を解除
>>152 直観的にかくと、
elem.addEventListener('click', function(e) {
var stopPropagation = function(e) {
e.stopPropagation();
}
this.addEventListener('dblclick', stopPropagation, false);
this.removeEventListener('dblclick', stopPropagation, false);
// 本来やりたい処理
}, false);
という感じであってます?
>>153 こういうこと
span.addEventListener('click' function(event) {
if (!とめたい) return;
this.addEventListener('dblclick', function(event) {
event.stopPropagation();
this.removeEventListener('dblclick', arguments.callee, false);
}, false);
}, false);
>>154 > 要素がclickイベントを処理する要素ならdblclickを処理しない
>>148 <div>
<span>なかみ</span>
</div>
っていう文書構造なんでしょ?
これ、span 要素の dblclick イベントに stopPropagation 設定すればいいんじゃないか?
それでダメなら、あとは div 要素の dblclick イベントに if (span.isSameNode(event.target)) { return; } みたいなコードを仕込むとか
> greasemonkeyのscript 文盲増えたね
>>148 spanのタブルクリックで空のイベントリスナーを登録
↓
spanのタブルクリックでストッププロパゲーションでどうかな?
>>155 あ。そっか。dblclick発生した時にremoveしないとaddした意味ないか。
ありがとうございます。
>>155 みたいにするか、元からspanのdblclickに設定しておくかくらいのパターンなんですね。
class付けて判断とかも考えたけど、無駄にclass付けるのも気持ち悪いし、
spanにdblclickのaddEventListener付けて判断しようと思います。
みなさんどうもです。
>>158 > > greasemonkeyのscript
言い方おかしかったですかね?あんまりgreasemonkey scriptって言わないのかな。
161 :
Name_Not_Found :2009/07/30(木) 10:12:40 ID:vzhXmUUE
ブラウザの表示領域のみを取得したいのですが opera,IE,Fx,safari対応のコードを紹介しているブログか講座サイトご存じありませんか?
163 :
161 :2009/07/30(木) 11:01:52 ID:???
4つの主要ブラウザに対応するために
ttp://d.hatena.ne.jp/onozaty/20060802/p1を見ると document.body.clientWidth
document.body.clientHeight
document.documentElement.clientWidth
document.documentElement.clientHeight
window.innerWidth
window.innerHeight
↑を全部書いておけばいいってことでしょうか?
164 :
Name_Not_Found :2009/07/30(木) 11:04:30 ID:ff8NQ+7S
>>163 一例。
//document.body.clientWidthが存在するならtrue
if(document.body.clientWidth)
screenWidth = document.body.clientWidth;
それは0の場合どうなるん
>>164 document.body.clientWidthで取得しても
document.documentElement.clientWidthやらwindow.innerWidthで上書きされることを前提にしてないよお前
>>160 いやいや、人のレスを読まない頓珍漢なレスが何個もあって
それは全部同一人物のものだと分かりきってるんだけど
あえて複数人いるかのように安価をつけず叩くという嫌味だったんだけど
気を悪くさせてすまん
168 :
Name_Not_Found :2009/07/30(木) 13:39:22 ID:nvOyVcaT
質問です。 javascriptでリファラーをとる場合document.referrerで取りますが、 そのリファラーのドメインを取得する方法はどのようなものがありますでしょうか?
>>167 同一人物かどうかなんて運営でもない限りわからないのに
お花畑でも見えてる人?
┏┳┳┓ ハイ. ┏┳┳┓ ┏┫┃┃┃ 雑談は ┃┃┃┣┓ ┃┃┃┃┣┓ ここまで ┏┫┃┃┃┃ ┃ ┃┃┏━━━┓┃┃ ┃ ┃ 雑談 ┣┫ . ・∀・ ┣┫. STOP!┃ ┗━━━━┛┗┳━┳┛┗━━━━┛ ┏┻┓┃ ┏━┛ ┣┻┓ ┗━━━┫ ┗━┓ . ┗━━━┛
夏だな
このスレはいつから宿題を手伝うスレになったんだよ
7/16頃からだよ
Javaスクリブトを最近習い始めたんだが、ちょっと疑問。 これっていわゆるブラウザ上で色んなことをするやつだけど、 あるボタンを押す→ボタンの下あたりに適当なデータぶちこんだテーブルを表示する とかっていうのも出来るの?できたとしてもやっぱりテーブルのデータはあらかじめどっかに書いて おかなきゃ駄目だよな。DBとかから引きずってきて表示、なんてハイレベルなこと できそうなかんじじゃないし。 一応調べたらなんか<div>タグにid=名前ってつけてやって何かするって奴が 近いようだが…。
明らかに間違ったことを書いてツッコミから情報を引き出すメソッドですね
>>176 JavaScriptはボタンを押されたらXMLHttpRequestでウェブサーバにデータを要求 →
ウェブサーバがDBにアクセスして整形してクライアントに返す →
JavaScriptがデータをレンダリング
という感じ。
>>177 頭悪くて悪かったな。
そんな腹の黒いことするか。
>>178 なんとなく動きは分かるような気がする。が、やっぱ明確には分からんのでちょっと出直してくる。
夏休みだ!
そんなんじゃ幸せにはなれないよ。
Javaスクリブト の時点で釣りだと判断した。
183 :
Name_Not_Found :2009/07/31(金) 21:42:47 ID:I+xBasH7
Google様がOS事業に参入しWeb上の覇権を握る戦略上、次期バージョンで のJavaScript規格策定で敗れはしたものの、ECMA会議で発言力を高めて行 くるとかつてのネスケvsIE陣営の主導権争いは一気にGoogleのデファクト S化で決着がつきますか?
184 :
Name_Not_Found :2009/07/31(金) 22:05:32 ID:Nr9zI3bt
____ / \ 3階層の重なり有りでドロップダウン作ろうと / _ノ ヽ、_ \ a:hoverにもz-indexつけたいのに / o゚⌒ ⌒゚o \ IE6だとめり込むお… | (__人__) | もう3日はまってるお… \ ` ⌒´ /
185 :
Name_Not_Found :2009/07/31(金) 23:14:54 ID:bqggOh5s
ajaxで通信する機能のみのライブラリを探しているのですが 何かご存知のものございませんか?
>>183 ググル様のOSは広告付くんだよ
いくら無料でもさすがに広告は見たくない
>>176 アフォのくせに生意気な口調だな。
自分で勉強しろ。
どこ情報だよw
>>187 179に出直す、とあるからきっと今頃勉強してると思うよ。
Javascript でグリッド(表)を作るのですが、表示件数が15万件と多く、一度に表示しきれません。 ページャをそのまま使うのではなく、スクロールバーの上下でページ移動ができるようにしたいです。 また、スピードを重視するため、表示する分+α程度のデータだけを AJAX で取ってきます。 ページャのページ指定をスクロールバーにバインドできるのか? というのが今考えていることです。
>>190 真面目な話
Javascriptでなければいけない理由が最大の要求でないかぎり
他当たった方が生産性高いと思うよ
>>190-191 それってズームしないGoogle Mapsのようなもんだよね。
スクロールバーをできあいのものを使おうとせずに自前で
作れば、位置の移動が把握できるから、Ajaxで周辺を先読み
もできるでしょ。
IE死ね
>>191 DoJoで実装することが決まっているので、javascript で実装しないといけないです。。
>>192 そっか。スクロールバーを自前で作ればいいのか。それは思いつかなかったです。
で、スクロールバーって自前で作れるものなの?
196 :
194 :2009/08/01(土) 10:25:58 ID:???
できないことだらけじゃねーかw
>>193 IEに対応できない奴は素人〜初心者までが許される
うーん。それはいえる。IEに悪態つくのは勝手だが 避けて通れないのも現実。
sagoolの実装を読むと参考になるかも
IE愛してる sagool重いお…
sagoolの検索ページ、永久スクロールになってるじゃん
>>190 15万件もあったら、スクロールバー1ドット動かしたら100〜200件くらい動かないか?
IEさえなければWebアプリケーションの開発効率が倍以上になる IE対応だけに何日も費やすのはきつい
IEが滅ばぬ限りゲッタも分割代入もジェネレータ式もletもWorkerも使えねー
206 :
190 :2009/08/01(土) 18:07:19 ID:???
>>203 そうなんですよ。
それと、スクロールバーを一気に動かしたときにどうなるか?とかいろいろ考えることが多くて。。
IE8でマシになったんじゃないの? 後は、MSがIE6、7を切り捨ててくれればいいだけで
<BODY id=InPrivate> <DIV id=titleHeader class=title>InPrivate は有効です</DIV> <DIV id=contentContainer class=mainContent> <DIV class=column1> <DIV class=tasksection> <DIV id=contentHeader class=tasks>InPrivate ブラウズが有効になっている場合は、このインジケーターが表示されます </DIV> <P><IMG id=inPrivateImage alt="アドレス バーの InPrivate" src="inprivate.png"></P><SPAN id=recentlyClosedTabsDescription class=description> <P> </P> <P id=contentLine1><I>InPrivate ブラウズ</I>は、Internet Explorer が閲覧セッションに関するry</P> <P id=contentLine2>InPrivate ブラウズを無効にするには、このウィンドウを閉じます。</P></SPAN></DIV></DIV></DIV> <DIV class=footer> <HR> 内部でこんなめちゃくちゃな展開されるブラウザがマシとな
15万件のデータがあって スクロールするたびに ajax で読みに行くなんて とても現実的じゃないと思う ajax にこだわる理由は何?
ヒント >190 というのが今考えていることです。 ~~~~~~~~~
>>209 逆でしょ。ちょっとスクロールしたら隣接してるキャッシュ
された情報を表示し、たくさんスクロールしたらその表示部分を
取って来るまでちょっと待たせる。Ajaxしかないじゃん。
>>206 洩れなら15万件を2次元に並べて2次元スクロールする。
水平に100件、縦に1500件なら無問題。
さいてーのユーザ体験だなw
スクロールバーをちょろっと動かしたら 5000 件くらい飛んじゃいそう。 レコード数が一桁少なかったらありかもしれないが。 自分だったら 15 万件って時点で行単位のスクロールは無いな。 1ページ 1000 件 150 ページ。 「1000 件目と 1001 件目にも関連性がある」ってんなら無理だけど。 どんなデータか知らないが ページ 1000 件も 150 ページも 人の限界を超えてると思うけどね。
Googleの検索結果○○○○○件が1ページに全部表示されるようなものだな
53件 × 53件 × 53件 ≒ 150,000件 3次元なら現実的。
真面目な話、時間を四次元目要素に追加するんだよ
時間の経過と共に勝手にスクロールするってかw 普通に空間n次元でいいだろw
15万件くらいなら日常的にベタな<table>で表示させている。というか昨日もちょうどそのくらいの数を表示させた。 この行数だとエクセルでは表示できないから、HTMLが重宝する。 レンダリング完了してしまえば、Ctrl+f でサクサクと検索できるし、確かに便利なものだ。 人が使う上で重要なのは、 1. 余計なこと(スクロールでHTTPリクエストなんて愚の骨頂だわw)を絶対にしないこと、 2. しかし、<thead>にクリックしてソートする仕組みを必ずつけること。
219 :
184 :2009/08/02(日) 10:03:16 ID:???
____ /⌒ ⌒\ /( ●) (●)\ /::::::⌒(__人__)⌒::::: \ IE6でも正しく重ね表示できるようになったお!! | |r┬-| | z-indexはどれが親要素をよく見ることが大事だお \ `ー'´ / 下から順番に設定してから削りまくるといいお!!
それがジャヴァスクリプトと何の関係があるんだお
JavaScriptでCSVを読み込んで配列にするのってどんな手がある? Ajax無しで。
textareaに貼り付けてパース
同期通信で読み込んでパース
サーバにパースさせてJSONPでも単なるjsでも CSVだろうがなんだろうが読み込む手段自体が限られるわな
phpでjson_encode()かけて外部jsとして読み込めば
iframeから読むとか
HTML中の
http://で始まる文字列をリンクに置換するスクリプトを書いています 。
var http = /(https?:\/\/[-_.!~*()a-zA-Z0-9;/?:@&=+$,%#]+)/ig;
document.body.innerHTML = document.body.innerHTML.replace( http, "<a href=$1>$1</a>" );
でリンク化はできたんですが、元々リンクだった所のリンクがおかしくなります。
元々<a href=''>内に入っている文字列を除外する方法を日曜一日潰して考えましたができませんでした。何か手はないでしょうか。
228 :
Name_Not_Found :2009/08/03(月) 02:22:31 ID:wge5fR1W
>>227 一番楽なのはhref=がURLの前に来ちゃダメってことで、
[^(?:href=")]
を/と(の間に入れることだと思うけどそれじゃダメなの?
>>228 dです。やってみたけど、動きませんでした。
あと、"JavaScript 正規表現"とかでぐぐってみてるんですが、そういう使い方が出てなくて意味も理解できません。
どこかオススメのページないですかね。
正規表現だろ、javascript関係無い コピペしか出来ないなら正規表現勉強するべきだと思うが
アンカー以外も属性に URL を含み得るんだから、引用符で囲まれてる URL を対象外にすれば? 後方に引用符がこない場合の指定。 var http = /(https?:\/\/[-_.!~*()a-zA-Z0-9;/?:@&=+$,%#]+)(?!\s*["'])/ig;
232 :
Name_Not_Found :2009/08/03(月) 12:51:16 ID:dH5LxOP7
>>229 innerHTML全てを相手にしないで、
textNodeだけを相手にやった方が良くない?
(function(node){
if(node.nodeType == 3){
//リンクに変換する処理
}
else if(node.nodeType == 1 && node.childNodes.length > 0){
var cn = node.childNodes;
for(var i=0 , l=cn.length ; i<l ; i++){
arguments.callee(cn[i]);
}
}
})(document.body)
※適当に書いた。
JavaScript & Ajax プロが教える“本当の使い方”ていう本 mdnがだしてるけどこれは使えるね
mdnって?
235 :
Name_Not_Found :2009/08/03(月) 17:42:04 ID:2sB0edpV
くせー!くせー臭いがするぜ。
Web上のオープンソース解読だけで十分
JSって基本的にどんなのでもソース読めるからいいよな。企業にとっては逆に悪いばっかりだろうが。 せいぜい難読化ぐらいだからなあ。
>>239 みんなが色んなソース見てレベル上がればいいんじゃないのかね。
オープンソースのものはみんな見れるけど、脆弱性つつかれてもそれによって性能は上がる気がする
phpみたいにクラスのときはclass ○○{}みたいに定義できたらいいのに・・
現在の言語仕様にクラスなんて無いんだから仕方ない
ニコ動のアカウントもってない友人にどうにか
ニコ動の動画を見せられないものかと考えて
閲覧ページを作っている者です。
http://pixiv.cc/ytt/?sm7812526 最初からちゃんとHTMLにスクリプトタグが
書かれていればIEでも見られるのですが
後からスクリプトタグを追加する方法だと
さっぱり動いてくれません。
ちなみにFireFoxでは見られるっぽいです。
上記のページのスクリプトで動かない理由が
わかる方は是非とも教えて下さい。
>>243 このスレでこんなこと言うのもなんだけど
一部のブログやはてなブックマークが外部プレイヤーに対応していて
貼り付けられた/ブックマークされた動画はアカウント無しでも見れるよ
ありがとうございました。ググれば一発でした つーかフツーにdocument.writeでスクリプトタグを 吐きだしたらIEでも動いてくれました (function(){})の中身をどうやって実行させるか 長時間悩んでいた自分が馬鹿みたいです
246 :
Name_Not_Found :2009/08/04(火) 18:26:26 ID:5ejlW5sr
クラス指定の際、従来はどこかで見たこんな感じで各ブラウザに対応してました。 var cls = (window.addEventListener) ? "class" : "className"; document.getElementById("hoge").setAttribute(cls, "somestyle"); これでIEではclassNameが選ばれるわけですが、IE8では標準化されてclassで指定するため classNameが選ばれたのでは動作しません(エラーにはならない)。 IE7以前と8の振り分け小技的なのって、もう出てますか? ブラウザ名とバージョンで判別すれば確実なんだろうけど・・・
setAttributeを使ってわざわざ面倒にしているだけ。 document.getElementById('hoge').className = 'somestyle'; これでMozも新旧IEも動くから。setAttributeを一切使わないのが吉。
>>246 好き嫌いはあるかも知れないが
IE なら「条件分岐コメント」というものがある
249 :
246 :2009/08/04(火) 19:37:07 ID:???
>>247-248 ありがとうございます。
>>247 確認できました。
そういえば確かに、以前setAttributeにこだわって
>>246 を書いたような、淡い記憶が・・・
IEの条件分岐コメント、初めて知りました。
こちらは機会があったら試してみたいと思います。
IE8ってまだaddEventListener対応してないんだ…
a=10; b=new Array(1,2); document.write('a='+a+'<br>') document.write('b='+b+'<br>') func1(a,b); document.write('a='+a+'<br>') document.write('b='+b+'<br>') function func1(c,d){ var c,d; c=20; d[0]=30; d[1]=40; } この結果が a=10 b=1,2 a=10 b=30,40 となります aとbはvarで宣言してないのでグローバル変数、cとdは関数内部でvarで宣言してるのでローカル変数 なので、ローカル変数のc=20がaに影響しないというのは理解できるのですが、 ローカル変数のはずのdがbに影響してしまうのがよく分かりません
変数っていうのは荷札みたいなもので、 b=new Array(1,2); Arrayというオブジェクトにbという荷札を付ける func1(a,b); bの荷札のついたオブジェクトを二番目の引数としてfunc1に渡す function func1(c,d){ 二番目の引数に、関数内のみで通用するdという荷札をつける d[0]=30; dの荷札のついたオブジェクト(つまりb=new Array(1,2);)を操作する という流れで、bのオブジェクト本体が書き換わる 余談だけど仮引数をvar宣言しても無意味
大事なことを言うの忘れてた function func1(c,d){ d=10 } と変数自体を操作した場合は、「dの荷札を付け替える」になるからbはなんら変わらない d[0]=30;は変数の中身に対する操作だからbまで影響を受ける
254 :
Name_Not_Found :2009/08/05(水) 02:27:18 ID:v3FToA9J
Javascript初心者です。至らないところも多々あるかと存じますがよろしくお願いします。ブラウザはIE7を使用しています。 当初以下のようなコードを動作させようとしたところ、 for(h = 1;h < 3;h++){ ※1 var mzu= "menu" + h; var kami = document.getElementById(mzu).childNodes; for(var x =0;x<5;x++){ var jiu = "suichi" + h; var sai = document.getElementById(jiu).offsetHeight; ※2 ☆kami[x].style.top = (sai*(x+1));☆ } } ※☆は後の説明用に付加しているだけで実際のコードにはありません 続きます
255 :
Name_Not_Found :2009/08/05(水) 02:28:08 ID:v3FToA9J
IDが"menu1"の要素については期待したような結果が得られたのですが、IDが"menu2"の要素について期待したような結果が得られなかったため、alert()を用いて原因を探ることにしました。 具体的には※1の部分にalert(h);を、※2の部分にalert(kami[x].style.position);を入れてみて、動作確認をしてみました。 私が期待しているようなメッセージの出る順番というのは 「1」が表示される→4回"kami[x].style.position"の中身が表示される(ちなみにabsolute)(★)→「2」が表示される→再び4回"kami[x].style.position"の中身が表示される というものですが、実際には★の部分までしか期待されたメッセージが表示されなかったため、forループ(一つ目の)が一回のみで終了してしまったのだと判断しました。 そこでひとつひとつの行を削除したり再び加えたりしながらforループ を一回目で止めてしまっている原因を探ってみたところ、 ※2(kami[x].style.position);の行と☆〜☆の行を削除した場合は メッセージが1→2と表示される、すなわちひとつめのforループがしっかりと機能していることから、おそらく原因は※2の行や☆〜☆の行で DOM要素にアクセスしていることだと思うのですが、どうも原因がわかりません。 もちろん元のコードでもエラーは出ていません。 詳しい方、どうぞお力添えいただけないでしょうか
2個目の for ループは 5周(0 から 4 まで)するんだけど、 document.getElementById("menu1").childNodes[4] はあんの? そもそもエラー出てないなら、ループは止まらないと思うけど。
257 :
Name_Not_Found :2009/08/05(水) 03:08:57 ID:v3FToA9J
>>256 ズバリでした。
なんというケアレスミス…orz
>>246 亀レススマソだが
多少面倒だが、setAttributeNodeでもいけるはず。
var classAttr = document.createAttribute('class');
classAttr.value = 'somestyle';
document.getElementById('hoge').setAttributeNode(classAttr);
259 :
Name_Not_Found :2009/08/05(水) 12:36:36 ID:AMzVKnOk
Yoshimune.parentNode.parentNode.parentNode.innerText; 家康頼宣光貞 ____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ 家康の名前だけ取得したいのに | (__人__) | 他もお邪魔してくるお… \ ` ⌒´ /
夏だ寝。
innerText はすべての子ノードの連結した値でした。
innerText(失笑)
263 :
Name_Not_Found :2009/08/06(木) 12:01:36 ID:8wr3Kt8v
Cのポインタのように変数に他の変数を参照させる方法はありますか?
できないけど、Objectかぶせればだいたい事足りる
265 :
Name_Not_Found :2009/08/06(木) 18:40:12 ID:MAVolJmo
プログラミング初心者です。 かなり初歩的な理解の間違いをしているかもですが、その都度指摘していただけたら幸いです。 ふとHTMLのdocumentを構成している全ノードの情報(具体的にはinnerHTMLとノード名について)を表示させようと思い、次のようなコードを書きました。 function getElementsinfo(anode){ if ((anode.childNodes.length) == 0){ alert(anode.innerHTML); alert(anode.nodeName); alert("最下層ノードです"); }else{ nagasa = anode.childNodes.length; for(j=0;j<nagasa;j++){ alert(anode.childNodes[j].innerHTML); alert(anode.childNodes[j].nodeName); getElementsinfo(anode.childNodes[j]); } } return 0; } getElementsByinfo(document.body);
266 :
Name_Not_Found :2009/08/06(木) 18:41:37 ID:MAVolJmo
私の意図するところとしては、最下位のノード(子ノードが存在しないノード)までたどり着いた場合に、forループを利用してnextSiblingにあたるノードの情報を表示できるようにしたかったのですが、 どうも最下位のノードまでたどり着いたところで関数の実行が終了してしまうようなのです。 つまり、ノードが 1 |_____ | | | 11 12 13 |_______ | | | 111 112 113 のような構造をしている場合 1→11→111→112→113→12→121→122…のようにノードの情報を表示させたかったのですが 1→11→111まで表示してプログラムの実行が止まってしまっています。 この問題に対し貴重なご意見をいただきたく存じます。 現状の私の理解では解決策を思いつかず、投稿させていただきました。 質問のわかりにくい点については随時補足させていただきます。
いや、非常に明快な質問だと思うよ。原因は変数が全部グローバルだから。 nagasa=... → var nagasa=... for(j=... → for(var j=... としてみたらどうかな。
本来なら15万行あるのに、レンダリング時間を短縮するために、AJAXをつかって例えば100件ずつ表示 するようにしたいのです。 つまり、スクロールボックスの値の個数は100件程度です。 このような状態で、15万件スクロールできるような領域をもつスクロールバーを作ることはできるんでしょうか?
268=190?
デジャヴ・・?
271 :
Name_Not_Found :2009/08/06(木) 21:33:50 ID:E76SDfGK
>>268 一応出来るだろうけど、UIとしては使い物にならない気がする。
仮にスクロールバーの幅が1000pxだったとしても、
1px動かすと150行も飛んじゃうのって、使いづらくない?
もしホントにやるんだったら、スクロールバーは純正ではなく
手づくりする必要がある。純正のは「表示領域」のスクロールだから。
何百行も一気に移動する為の補助的UIとしてなら、やってみる価値は
あるかもしれないね。
273 :
Name_Not_Found :2009/08/07(金) 02:40:44 ID:r+8nSQLn
なんだこりゃ。 こんなことも出来ねーのか、おまいら使えねーなプゲラ、 とでも言いたかったのだろうか。
>>258 ありがとうございます。確認してみたところ、IE6-8その他で同じ動作を確認できました。
ちなみにremoveAttributeNode("class")の方はIE8ではおkでしたが6-7ではダメだったようです。
removeの方の話題になってしまうのですが、いろいろ試していたら
removeAttributeの戻り値がIEとその他で違うことに気づきました。
IEだとブール値、他のブラウザではundefined(戻り値なし)になるようです。
document.getElementById("hoge").removeAttrubute("class");
=>IE8だと成功するのでtrue, IE6-7ではfalse, FireFoxなどではundefined
※そもそも削除対象の属性がなかった場合はIE6-7でもtrueが返る
ということでこう書ける様子です↓
if (document.getElementById("hoge").removeAttribute("class") == false) {
document.getElementById("hoge").removeAttribute("className"); /*IE6-7*/
}
setAttributeの戻り値も一瞬期待したんだけど、こちらはすべてundefinedでした。
既知かもしれないけど小ネタということで。
275 :
274 :2009/08/07(金) 10:28:33 ID:???
ゴメリ。上の2行目、removeAttributeNode(classAttr)でした。
javascript:showModel('A') 顔だろw
HTMLスレから誘導されてきました。先輩方、どうかご教授を。 <object>タグの中身が全て読み込まれた時にしたい処理があるのだけれども、onLoadで拾ってくれないんです。 <object>の中で何をしてるかと言いますと、外部csv(Shift_JISのテキスト)をデータバインドでobjectに突っ込んで これをJavaScript側で受け取って、と言う事をしようとしています。 どうすれば良いのでしょうか。
15万件のcsvデータで とか言いだしそうな予感
いやいやせいぜい300件程度ですわご安心を
280 :
Name_Not_Found :2009/08/07(金) 22:05:02 ID:r+342Vb4
>>277 readyStateを見張ってもだめかね。
あ、そもそもobjectにreadyStateがあるかどうかわからんけど。
>>277 objectがflashコンテンツならSWFObjectというライブラリを使うのも
既に表示されてるテーブルに対して"昇順" "降順" ボタンを作って ボタン押したらテーブルがソートされる動きをjavascriptで実現させ たいんですけど、良い方法はないでしょうか。
284 :
Name_Not_Found :2009/08/07(金) 22:36:34 ID:KaIlfn+p
>>282 jquery の tablesorter を使えば一発で解決
http://tablesorter.com/ <script type="text/javascript>
$(document).ready(function()
{
$("#myTable").tablesorter();
}
);
</script>
<body>
<table id="myTable">
・・・略
</tbody>
</table>
</body>
>>271 UIとして使い物にならないだろう、ということは、お客さんもわかっているようです。
単に全体を1ページで見たい、とのご要望でした。
>>280 >>281 レスありがとう。まず、objectはFlashじゃないのでダメなんです。Flashだったら色々とらくちんらしいですね。
次に readyStateは見張ろうとしたんですが
IEで、こんなコードを書いちゃって無限ループさせてしまい放置してました。
確認したのはIE6、明日にでもIE7, IE8でも試そうと思っています。
function sleep( time ) {
var time1 = new Date().getTime();
var time2 = new Date().getTime();
while( time2 < time1 + time )
time2=new Date().getTime();
return;
}
while( !(document.getElementById( objectName ).readyState == 4) )
sleep(300);
どうにも上手くいかないので、JavaScript側では無く 他の方法で
<object> のロード時イベントを取れればと思った次第です。見落とし等あったらぜひ教えて下さい。
上記のWhile()を通さないでいたら、IEに「 [Object Error] 」と怒られました。
// 何故か <object> 生成後に alert('test'); と書くとクッションになるのか上手く処理が流れたのですが…何故なのでしょう。
287 :
Name_Not_Found :2009/08/07(金) 23:01:20 ID:ZLTflHOM
すいません、このようなスクリプトはないでしょうか? 例えば7月10日(2008)から 今日まで何日経過したとかわかるサイトありませんでしょうか? javascritpのサンプルであると思い検索しても中々ありません。 知っている方いましたら教えて下さい
>>283-284 tablesorter.jsのダウンロードをしてはいけないと言われる可能性があるので
できれば直接javascriptを組みたいのですが、そうなると相当難しいんでしょうか。
>>287 var now = new Date(); //今の時間
var xday = new Date(2008,6,10)//2008年7月10日(月は0から始まるので1つ小さくなる)
var count = Match.ceil( ( now.getTime() - xday.getTime() ) / ( 24*60*60*1000 ) );
alert(count+"日経ったよ!!111");
>>286 > while( time2 < time1 + time )
> time2=new Date().getTime();
javascript でこれはやってはいけません
>>287 Dateオブジェクト
>>288 ソース読めばよくね?
個人的には再発明しても無駄だと思うけど
>>288 <td>の数を数えて配列に入れてうだうだするしかないかなあ
293 :
286 :2009/08/07(金) 23:56:13 ID:???
>>290 何がダメなんでしょう?
while()function(); って大括弧を省く記述がダメなのかな。
>>293 実行スレッドと UI スレッドが共通だから
295 :
286 :2009/08/08(土) 00:31:05 ID:???
>>294 ぐぐって色々読んできました。そこそこ長い間JavaScript触ってたのに全然知らなかった。
勉強し直してきます。ありがとう!
横レスだけど、どうゆうことか分かんね。 ループしてる間に描画が進まないってこと?
試してみれば分かるだろ
298 :
Name_Not_Found :2009/08/08(土) 02:52:10 ID:3ZhTtLft
>>286 イベントドリブンに書こうよ。
var o = objectElement;
if(!o.readyState){ /* そもそもreadyStateがない */ }
else{
o.onreadystatechange = function(){
if(/complete|loaded/.test(o.readyState)){
// ロード完了
}
}
}
こんなかんじで。
IEは一度キャッシュしちゃうと、readyStateが変わらなくなったりするから、
先にチェックしとくといいかも。
299 :
Name_Not_Found :2009/08/08(土) 11:31:06 ID:YRrBCxcg
クリックするとビロンチョと開くヤツの作り方が判らん、
>>298 いちいちゴミ書き込むなよ
それで何かしたつもりか
301 :
Name_Not_Found :2009/08/08(土) 13:08:29 ID:2vZBY5wT
クリックしてビロリンチョはCSSでやれるのか
302 :
Name_Not_Found :2009/08/08(土) 13:10:08 ID:+8gAJ8+Q
JavaScriptとJavaの違いを教えてください
はじめの4文字は同じ
>>302 あの、Googleなどで検索はされたでしょうか。JavaScriptはプログ
ラムを組めるほどの人でも勘違いしている人が大変多いので、ネット
では解説があると思います。もし探しても、どうしてもないというの
であれば、そのときはその旨を明記して再度ご質問された方がよろし
のではないかと思います。
>302 グレープとグレープフルーツみたいなもの。
308 :
302 :2009/08/08(土) 16:00:56 ID:p74pcunQ
なんだ誰も答えられないのか
CとC++とC#の関係に近い
310 :
Name_Not_Found :2009/08/08(土) 16:24:28 ID:SlBV2tO3
質問です。JavaScriptをどの程度できたらGoogleに入社できますか?
>>310 Googleの面接試験の問題
1.スクールバスにゴルフボールは何個入るか?
2.あなたは5セントコインほどのサイズに縮んでしまう。現在のあなたの身体の密度を保ったまま、身長に比例して質量は小さくなる。
そしてあなたはガラスのミキサーに投げ込まれる。ミキサーの刃は60秒で動き出す。さぁ、あなたはどうする?
3.シアトルのすべての窓ガラスを洗浄するとして、あなたはいくら請求しますか?
4.マシンのスタックがメモリ内で増えるか減るかしているのをどのようにして見つけ出しますか?
5.あなたの8歳の甥にデータベースについて3つの文で説明しなさい
6.時計の長針と短針は一日に何回重なりますか?
7.あなたはA地点からB地点に行かなくてはならない。そこに到着できるかどうかは知りません。どうしますか?
8.シャツでいっぱいの戸棚があるとします。特定のシャツを見つけるのは非常に難しいです。簡単にシャツを見つけるためにどのように整理しますか?
ttp://gigazine.net/index.php?/news/comments/20070909_google_job_interview/
身長に比例でいいのかいね。ふつー半分のサイズなら質量1/8でね?
まさかのマジ回答
Googleの社内でプロダクトを作るために使われている言語は4つ。 JavaScriptはそのうちのひとつなので、方向性としては間違ってない。 どの位できたら、ってのは難しいな。 JavaScriptでJavaScriptインタプリタ実装できるレベルなら二次面接くらいにはいけるんじゃないか?
>>296 JavaScriptは厳密な意味でシングルスレッドで動いているので
時間を測定してループして回しても、
処理A:「今、時間を測定してループさせている処理」
処理B:「一定時間が経過するまで待ちたい(データバインド objectのロード完了待ちとか)処理」
処理C:「処理Bが待っている、何らかの処理(外部からcsvを読み込んでデータバインドするobjectの生成とか)」
処理Aが動いている間、他の処理は、処理Aが完了するまで一切動かない。
処理Aが終わるまで他の処理が一切動かないから、処理Aでどれだけの時間をかけてループで待ってみても
処理Bが待ちたい処理Cは処理A(を含めた、処理Cより前にスケジュールされている処理全て)が終わるまでは実行されない。
つまり、どれだけ緻密に時間を計測しても無駄であり
while( !(objDataBind.readyState == 4) ) sleep(500);
などと書いてもwhileループ脱出条件が満たされる事は無いので永久ループになる。
…っていう風に自分は解釈しました。合ってるかな?
試してみれば永久ループになるかどうかはわかるはずだが なぜ試さないのかしら
>>286 sleep(3000);
とでも単独で実行してみればわかると思うけど、三秒間フリーズした後開放される。
で、なんでダメなのかはCPU使用率を見てればわかると思う。
sleepじゃなくてstopだな
(function(){ try{ オブジェクト要素.recordset.MoveLast(); オブジェクト要素.recordset.MoveFirst(); } catch(e){ setTimeout(arguments.callee, 10); return; } //オンロード処理 })(); readyState対応してない場合はこんな感じでいけるだろ
321 :
Name_Not_Found :2009/08/09(日) 14:12:44 ID:uu3aZGA1 BE:3443523697-2BP(0)
HTMLを作らずに、javascriptだけで空の新規ページを作って、 document.writeでそのページに文章を書きたいんですが、 そういうことってできますか?
>>321 中身がjavascriptだけのhtmlファイルを作ることは可能
javascriptだけで空のhtmlファイルを作ることは不可能
適当な名前でwindow.open()して中身書き換えれば、出来るんじゃないか と思ったけど【HTMLを作らずに】【javascriptだけで】【新規ページ】ってムリじゃない? phpやperlみたいなサーバ側の言語使うかサーバ設定いじれるならともかくも。
>>322 >>323 どうもありがとう。
window.open()のurlにnullを入れてみたんですが、
ページが見つかりません。になってしまいました。
javascriptで新規ページを作るのは無理っぽいです。
Fx3でwindow.open("");とやったらabout:blankになった 他は知らない
>>326 IEでもできました。すげえ!ありがとう!
こんな感じです。
var pop = window.open("", 'popup', null);
pop.document.write("テスト");
うざいからやめて
なんか、すごいなぁ最近
すごいでしょー。
夏だから仕方ないよ。
API を使ってHPをつくろうと思っています。 サーバ側から渡されるデータはもともとJavaScriptを出力するものなのですが、 それを PHP で受けとって利用しようと思っています。 ここで問題が・・・。 サーバから受けとったデータが \u****\u****\u**** … という感じなのですが、 これはどういうデコード処理がされているのでしようか? JavaScript で UTF-8 をあつかうためにエンコードされたものなのかな・・・? とか予想しているのですが、この文字列をどのようにデコード処理をしたらいいのかわかりません。 詳しい方アドバイスをいただけると助かります。
333 :
Name_Not_Found :2009/08/09(日) 18:43:54 ID:+FviLVtY
いや、揺れてる!
ありがとうございます!!
utf-8からsjisに変換するには
すべての文字のマップを作ればおk
ページやスクリプトにしっかり文字コード指定してあれば ブラウザがよろしくやってくれないか?
340 :
337 :2009/08/10(月) 12:42:54 ID:???
いつの間にか直りました。 答えていただいた方ありがとうございます
341 :
Name_Not_Found :2009/08/10(月) 12:57:45 ID:TseukA0S
httpoj.send( data ) このdataの中身はどのように書けばいいんですか? 教えてください
343 :
Name_Not_Found :2009/08/10(月) 13:39:34 ID:NR0uOyEj
>>341 変数名=値&変数名=値&…
値はエンコード。
なんでも送れるが
JavaScriptって call by name なの?
定期乙
そして参照の値渡しがうんたらかんたら・・・・
引数渡しについては「Javaと同じ」でいいじゃん。
349 :
Name_Not_Found :2009/08/10(月) 18:12:34 ID:NR0uOyEj
>>345 そうだ(と思ってますが言い切っていいのか不安)。
基本的に関数スコープだし(ブロックスコープが無い)、今のスコープより外のスコープは
直接参照できるから、参照渡ししないで、渡す側が関数で渡したりするよね。
例えばsetIntervalとか、
var a = 0;
setInterval(function(){
a++;
} , 1000);
これだけで十分だと思ってしまうのは、JavaScriptに慣れてるからなのかな…
350 :
Name_Not_Found :2009/08/10(月) 22:38:00 ID:h+AHNmLv
1から100の間の数で、7の倍数のみを表示する コーディングを教えてください!!
for (i=1,n=i*7;n<=100;i++)
>352 >352 >352
for(i=1;i<=100;i++){ i%7==0 ? alert("7の倍数") : ""; }
7の倍数の証明は難しいよ。
>>350 w = [0,1,2,3,4,5,6,7,8,9];
x = [w[0],w[1],w[2],w[3],w[4],w[5],w[6],w[7],w[8],w[9],w[1]];
while(1){
x[10] = x[10] + x[w[1]];
switch(x[10]){
default:
i = (x[10]++)-w[1];
break;
}
if((x[10] /x[w[7]])==0 || (x[10] % w[7])==0){
if(x[10] < x[0]){
continue;
}else{
alert("7の倍数!");
}
}
}
7の倍数の証明は非常に難しい
最初から7の倍数の集合だけを扱えば簡単だろって話じゃないのか? そうじゃなければ、正数で縛ればmod7が0なら倍数だろ
359 :
ベテラン :2009/08/11(火) 08:53:28 ID:???
そう。 var arr = [7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]; for (var i = 0, len = arr.length; i < len; i++) alert(arr[i]); これが正解。
var a=0; do{ a+=7; alert(a); }while(a < 100);
for (var i = 0; i <= 100; i += 7) { alert(i); }
わざと微妙な回答をする流れだろ
364 :
350 :2009/08/11(火) 17:14:35 ID:Cw5Tk3aC
みなさん教えてくださってありがとうございます!!
比較するときにparseIntしたらいいんじゃね
ある会社の採用面接。 まず数学者が面接室に呼ばれた。 面接官「1+1はいくつですか?」 数学者「1+1は2に決まっています」 面接官「ほう、きっかり2なんですか?」 数学者「…そうです。ぴったり2です。間違いありません」 次は統計学者が面接室に入った。 面接官「1+1はいくつでしょうか?」 統計学者「おおよそ2になります」 面接官「およそ?ぴったり2ではないのですか?」 統計学者「平均して2。誤差率10%の範囲ですが、およそ2ということができます」 最後は会計士が面接を受けた。 面接官「1+1はいくつですか?」 会計士はゆっくりと立ち上がり、ドアの鍵とカーテンを閉めて面接官の隣に座った。 そして面接官の耳元でこっそり囁いた。 会計士「1+1をいくつにしたいんです?」
つまらな過ぎてワラタw
その数学者は偽物だな
プログラマーが面接室に入った 面接官「1+1はいくつですか?」 グラマ「1+1はたぶん2です」 面接官「たぶん?きっかり2じゃないんですか?」 グラマ「int型で計算すると2ですがfloatで計算すると2.00000000でstringだと11でry」
マジレスすると正解は 200 。
小学生『1+1=たんぼの田』
マなら10じゃね?
>>374 "1"+"1"="11"
プログラマが全て脳内で二進数計算してたらビックリだぜ
ペアノの公理系によれば、 1. 先頭元0が存在する。 2. 任意の自然数 a にはその後者 suc(a) が存在する。 ここで,定数記号を定義する。(公理における具体的な定数記 号は 0 だけ) suc(0)=1, (1は suc(0) の略記) suc(1)=suc(suc(0))=2, (2は suc(suc(0)) の略記) 1+1=2 は足し算なので,それを示すには数学的帰納法を使って和が 定義され,これは次の定理を満たすことが証明される。 定理 単位元 a+0=0+a=a 定理 suc(a)+b=a+suc(b)=suc(a+b) 定理1 suc(a)=a+1 証明 suc(a)=suc(a+0)=a+suc(0)=a+1 定理2 1+1=2 である。 証明 定理1 でa=1 とすると suc(1)=1+1 である。 1=suc(0)であるから suc(1)=suc(suc(0)) である。 suc(suc(0)) の略記は 2 であるから 1+1=2 である。
>>376 次 10000 + 10000 = 20000 の証明をお願いします。
有限群{0,1}では1+1=0
>>378 1 + 1 = 1
1 + 0 = 0
0 + 1 = 0
0 + 0 = 1
であるような群も構成できるだろうが
だから政治と宗教と野球の話は取引先でしてはいけないと言っただろう…
>>379 それは + を再定義したか、0 と 1 のラベルを張り替えただけ。
それをやりだすともう Romantic が止まらない。
あれ?何か違う・・・
1+1 は 1+1 ではない
流れぶった切って var a = new Array(); a[ 1000000 ] = "test"; var b = new Array(); b[0] = "test"; ここで a と b が、それぞれ、どれだけのメモリを食ってるかを調べるにはどうすれば良いんだろう
サイ本 p.115 JavaScriptは、配列の中で実際に格納する要素だけにメモリを割り当てる (値を初期化していないインデックスに対応する要素にはメモリを割り当てない)。
んじゃ
>>384 の例で言う a について、
alert( a.length ); の結果が 1000001 だとしても、使ってるメモリは a も b も同じって事かい?
配列のlengthプロパティは配列のインデックスの最大値より1つ大きい値になる (配列に格納している要素の個数とは限らない)。 配列に新しい要素が追加されるたびにlengthプロパティも自動的に更新される。 それ以外はシラネ。
Undefineだっけか? 添字1000000に代入した後1000001までチェックして、未初期化ならメモリには存在しないって事だろ
「初心者歓迎」は質問者にだけ許されるんだぜ?
PHPとかいじってるとよくごっちゃになってしまうから困るArrayをarrayとしたりa['example'] = 1とか書いたり
>>384 はデータ構造としてはこんな感じ
var a = { 1000000: "test", length: 1000001 };
var b = { 0: "test", length: 1};
>>387 の言うような仕掛けとかないから等価ではないけどね
undefinedって奥が深いよね nullみたいに予約後じゃないからundefined = trueみたいに出来ちゃうし
>>393 undefinedなんていう変数が存在も予約もされてないだけだぞ?
Undefined型というのが存在するし、言うなればobject = trueしてObject書き換えたと言ってるようなもん
>>393 まあそのへんは ECMAScript 5 で修正されてるから、そのうち各実装が対応はじめるでしょ
・・・と思いたい
undefinedって名前の変数定義できたのか。 初めて知った
小飼さんがいろいろ試してた
NaNとInfinityもなのか。感想は…小飼さんと同じだなあ。
そこら辺はGoodPartsにも書かれてましたね
プライベート変数のあるクラスを作りたい時ってどっちの方がいい? var hoge1 = function(){ var private; this.getPrivate = function(){ return private; }; }; var hoge2 = (function(){ var private; var func = function(){}; func.prototype.getPrivate = function(){ return private; }; return func; })();
>>400 クロージャによるプライベート変数は継承でハマる
var hoge1 = function(){
var private;
this.getPrivate = function(){ return private; };
this.setPrivate = function(x){ private = x; };
};
var hoge2 = function(){};
hoge2.prototype = new hoge1();
var a = new hoge2(); b = new hoge2();
a.setPrivate("a");
alert( b.getPrivate() );
>>400 後者はプライベート変数でもなんでもないぜ
シングルトンになっちゃうのか…
命名規則で対処するのが現実的 あとは使えるならgetter/setterを使って隠蔽するとか
後者は継承しなくてもハマるよな
シングルトンってこう作るのか…
407 :
Name_Not_Found :2009/08/14(金) 00:28:38 ID:uv8YKQM0
便乗質問です。 上記のような事態を避けるために、クラスの中では 使い捨て変数以外は盲目的にそのクラスのプロパティに してるんですが、何か弊害になるようなケースが ありますでしょうか。
>>401 こうやって継承すれば解決する
var hoge3 = function(){hoge1.apply(this);};
var c = new hoge3(); d = new hoge3();
c.setPrivate("c");
alert( d.getPrivate() );
409 :
Name_Not_Found :2009/08/14(金) 00:45:15 ID:xiqVZsxU
質問失礼します。 firefoxで任意のサイト上でテキストの部分だけを置換したいです。 しかし、document.body.innerHTMLで置換しようとすると問題ありです。 たとえば、"a"という文字列を<b></b>で囲もうとすると document.body.innerHTML=document.body.innerHTML.replace(/(a)/g, "<b>$1</b>"); ■置換前 <a href="yahoo.co.jp">a</a> ■期待する動作 <a href="yahoo.co.jp"><b>a</b></a> ■実際の動作 <<b>a</b> href="y<b>a</b>hoo.co.jp"><b>a</b></<b>a</b>> となってしまいます。 ノードで辿っていくとかいろいろやったのですが、 やるたんびに新たな問題が出てきます。 IEなら var rng = document.body.createTextRange(); rng.findText("a", 1, 0)); rng.execCommand("bold", false, null); rng.moveStart("character"); のようにcreatetextrange関数とexecCommand関数で簡単にできるのですが、 Firefoxではcreatetextrange関数が用意されてないのでエラーになります。 何か簡単な方法は無いのでしょうか? よろしくお願いします。
>>409 具体的に何がやりたいか分からないから、もっと簡単な方法があるかもだけど、
childNodes をルート(body) から再帰的に取得して、各要素の nodeType を調べてから置換しては?
>>409 xpath でやるしかないかな?
document.evaluate('//text()[contains(.,' + 'a' + ')]', document, null, 6, null);
413 :
412 :2009/08/14(金) 01:53:46 ID:???
>>409 誤爆先で回答もらえててワロタ
確かに TreeWalker のほうがいいかも
FF限定ってことはグリモンか何か? jQueryあたり使うのが一番お手軽なんじゃないのか、とスレ違いのことを言ってみる
グリモンでjQuery使うやつは死んでいいよ
Firefox4.0にはprototype.jsが内部で組み込まれるらしいが…
Fx3.7でJetPackが統合されたらjQueryも組み込まれることになる
>>409 誤爆(?)先に回答書いた者だけどタグを使いたいというのを見落としてた。あれではテキストしか入れられないからダメ。
修正版↓
function replaceTextNodeWithHtml(textNode, regExp, repHtml){
if(regExp.test(textNode.nodeValue)){
var box = document.createElement('div');
box.innerHTML = textNode.nodeValue.replace(regExp, repHtml);
var newNode = document.createDocumentFragment();
for(var i = 0; i < box.childNodes.length; i++) newNode.appendChild(box.childNodes[i].cloneNode(true));
textNode.parentNode.replaceChild(newNode, textNode);
}
}
function getTextNodes(node){
var result = [];
var nodes = document.evaluate('.//text()', node, null, 7, null);
for(var i = 0; i < nodes.snapshotLength; i++) result.push(nodes.snapshotItem(i));
return result;
}
使い方 getTextNodes(document).forEach(function(node){ replaceTextNodeWithHtml(node, /(a)/g, '<b>$1</b>'); });
javascriptで比較演算子のほうが厳密比較演算子より速く動作するのはなぜですか 型変換がない厳密比較のほうが早いと思うのですが
ですよね。
424 :
Name_Not_Found :2009/08/14(金) 16:31:15 ID:ME+bLNwd
初めまして。javascritp初心者です。失礼ながら質問があります。ここでやりたいことは、10x10のセルをつくり、個々のセルをクリックできるようにします。 そして、クリックをすると、そのセルの背景色が変わるということです。 どうぞよろしくお願いします。 <title>10X10</title> <script type="text/javascript"> //<![CDATA[ function bgSwap(TD) { if (TO.style && TD.style.backgroundColor) TD.style.backgroundColor = 'pink'; else TD.style.backgroundColor='#ff0000'; } function gridtable(){ var table = document.createElement('table'); var tbody = document.createElement('tbody'); table.style.border = "0"; for(var i = 1 ; i <= 10; i ++ ){ var tr = document.createElement('tr'); for(var j = 1 ; j <= 10; j ++ ){ var td = document.createElement('td'); td.style.border = "0"; td.style.width = "30"; td.style.height = "30"; td.style.textAlign = "center"; window.event.onclick = bgSwap(td); tr.appendChild(td); } tbody.appendChild(tr); } table.appendChild (tbody); document.getElementById("T").appendChild(table); } //]]> </script> </head> <body onload="gridtable()" bgcolor = "aqua"> <div id="T" ></div>
文字が書き換えられたことを知りたいのですが、以下では動作しません。 何か良い方法があれば、ご教示ねがいます。 <span id="id1" onchange="javascript:alert()">aaaa</span> <input type="button" onclick="javascript:document.getElementById('id1').innerHTML='bbbb'">
span に onchange なんてねえ
429 :
427 :2009/08/14(金) 22:26:02 ID:PI4AdmN+
>>428 そうでしたか...ありがとうございました。
setIntervalで監視するとか
(function (){ element = document.getElementById("id").childNodes; if(typeof(tree) == "undefined"){ var tree = element; }else{ if(tree === element){ setTimeout(function(){arguments.callee();},100); }else{ alert("変更されたよ!!!1"); tree = element; } } })(); 100msごとに監視して変更されたら停止する まだ動かしてない妄想を書いただけだから分からない
432 :
Name_Not_Found :2009/08/14(金) 22:43:18 ID:xWuX7R6p
質問いたします。 以下のコードを実行すると期待した「test」ではなく undefined と表示されます。 function Test(arg) { this.arg = arg; } Test.prototype.a = function() { (function() { alert(this.arg); })(); }; var obj = new Test('test'); obj.a(); 後学のため、メソッド内の関数の中で this が使えない理由が知りたいです。 何卒よろしくお願いします。
433 :
Name_Not_Found :2009/08/14(金) 23:03:35 ID:AiYF2i84
>>432 function(){}はグローバルに属すからthisが変わっちゃうな。
Firebug使って、
console.log('out',this); // thisはTest
(function() {
console.log('in',this); // thisはwindowsオブジェクト
で、もし(function(){})()を使いたいなら
(function() {
alert(this.arg);
}).call(this);
こう書き換えればthisが引き継がれる。普通やらないけど。
みたいに中と外でthisを表示してみればわかる。
434 :
432 :2009/08/14(金) 23:10:28 ID:???
>>433 即レスありがとうございます。とても勉強になりました!
>>431 onchangeイベントを発生させるようにした。いろいろ面白いことが出来るな
function DOMonchange(e){
if((typeof(e)=="object")&&(e!=null)){
if(typeof(e.DOMloging)=="undefined"){
e.DOMloging = e.innerHTML;
}
if(e.DOMloging === e.innerHTML){
setTimeout(function(){DOMonchange(e);},10);
}else{
e.DOMloging = e.innerHTML;
e.onchange();//ここでonchange
}
}
};
window.onload = function(){
DOMonchange(document.getElementById("id"));//DOMonchange(element)な感じで呼び出す
document.getElementById("main").onchange = function(){ //onchangeイベントが呼ばれたらダイアログ
alert("onchangeイベントが発生したよ!");
}
};
ウィンドウを開く↓のjavascript window.open("./hoge.html", "", "width=500,height=400,top=200,left=200,status=yes,resizable=yes,scrollbars=yes"); で、サイズを示すパラメータwidth,heightを変数で渡したい ex) //こんな感じにしたい function fn_open(w,h){ window.open("./window.html", "", "width=w,height=h,top=200,left=200,status=yes,resizable=yes,scrollbars=yes"); } んだけれども、どうもうまくいかない〜〜orz どなたかご存知の人いたら、教えてください。
"width=500,height=400,top=200,left=200,status=yes,resizable=yes,scrollbars=yes" の部分はただの文字列 "width="+w+",height="+h+",top=200,left=200,status=yes,resizable=yes,scrollbars=yes"
438 :
436 :2009/08/15(土) 01:21:09 ID:???
>>437 >の部分はただの文字列
おお〜〜、知らなかったです。
ありがとうございました!!
439 :
Name_Not_Found :2009/08/15(土) 09:54:10 ID:2/WTGaYk
サンプルコードにむやみに無名関数やクロージャ使った解説サイトや解説ブログがいくらか見るのですが それぞれのコストや速度を通常の関数と比較したサイトはありませんか?
>>439 さも無名関数(JavaScript用語では関数式)やクロージャが遅いと
言わせたいみたいな書きぶりに見えるのは気のせいかな? ちょっと
計ってみたが、手元では関数: 1360、関数式: 1357 クロージャ: 1162
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<script type="text/javascript">
var x = 1, y = 1;
function f1() { return ++x; }
var f2 = function() { return ++y; }
function f3gen() { var z = 1; return function() { return ++z; } }
var f3 = f3gen();
var t0 = new Date().getTime();
var count = 1000000;
while(f1() < count) ;
var t1 = new Date().getTime();
while(f2() < count) ;
var t2 = new Date().getTime();
while(f3() < count) ;
var t3 = new Date().getTime();
document.write("f1: " + (t1-t0) + " f2: " + (t2-t1) + " f3: " + (t3-t2));
</script>
</body></html>
理論上はfunction文定義の関数の呼び出しにも無名関数呼び出しやクロージャと同じようなことが行われてるしなぁ
>>421-422 みたいなパターンもあるから測ってみないとなんともだけど
>>440 でクロージャが速い結果になったのは、唯一変数を参照しているからだと想像
xとyはwindowのプロパティだし(トップレベルでのvar宣言は無意味)
という仮説の元で、手元のWinXP Fx3.5.2において改めて
>>440 のcount = 500000に変えて実行した結果がf1: 4155 f2: 1638 f3: 1434 --(1)
さらに全体を(function(){ 〜 })();で括るとf1: 10 f2: 10 f3: 1090 --(2)
・・・あれ、おかしいなw
最後の状態に以下のf4を追加するとf1: 9 f2: 10 f3: 1069 f4: 69 --(3)
function f4gen() { var o = {count: 1}; return function() { return ++o.count; } }
var f4 = f4gen();
(1)と(2)の差はwindowへのプロパティアクセスによるものかと思ったけど
(3)からしてドット演算子が極端に遅いわけでもないのか
(1)のf1とf2の差も理解できない、Fx3.5でずいぶん意外な結果が出てしまった
>>441 Fx 3.5 は TraceMonkey の JIT コンパイラが動作してるから
Fx 3.0 でも測定してみることをオススメしたい
<tag> <tag id="x">X</tag> <tag>Y</tag> </tag> という木に <tag> <tag id="x">X</tag> <add>追加されたノード</add> <tag>Y</tag> </tag> このようにノードを追加するにはどうしたらいいですか
idがxのtagの後ろに追加すればおk
無理なのですね。わかりました
446 :
Name_Not_Found :2009/08/16(日) 01:20:17 ID:4hgBZPkk
誰だかわかんねーよw 無理だって言ってる回答が見当たらない
事故解決しました var add=document.createElement("add"); add.appendChild(document.createTextNode("追加されたノード")); document.getElementById("x").parentNode.insertBefore(add,document.getElementById("x").nextSibling);
448 :
Name_Not_Found :2009/08/16(日) 10:17:17 ID:xkMGy7Ub
てすと
449 :
Name_Not_Found :2009/08/17(月) 09:10:22 ID:dbbQhvjx
最近のwebニュースみてると prototype.jsよりjqueryのほうが主流みたいだけど やっぱりjqueryのほうが扱いやすいからなんですかね? 両方できることは同じような気がしますが
どちらも一時の流行りでしょ。自分で組めることが大切です。
>>449 速度面でprototype.jsは劣るからね
一番の問題はそこだと思う
まぁ使いやすいほう使うのがいいと思うよ
自分はjQueryの書き方がなじめないのでもっぱらprototype.jsだけどね
.NET開発でたとえるならjQueryがVBでprototype.jsがC#って感じだな
jQueryはかゆいところにまったく手が届かないし 毎度毎度セレクタ経由でアクセスしなきゃならない設計はクソ あれで喜んでるのって非プログラマだけだろ
無理にメソッドチェーンしなくたっていいんだぞ?
jQueryとprototype.jsの違いをまとめてくれ
455 :
光 :2009/08/17(月) 15:30:16 ID:whZHAZj1
JavaScript初心者です。
質問させていただきます。
先に
DM+="<td><select id='N"+i+"'>"+OP
とforとinnerHTMLの組み合わせのような形で画面上にN1、N2、N3...といったidをもつ<select>をたくさん作ります。
そして後から
document.all.("N"+j).selectedIndex=H3
とforの組み合わせのような形で選択された項目を読み込もうとするものなのですが、
docomo、ソフバンのフルブラウザ機能では問題なく見られます。
ところがau、PC(IE?)ではおそらく.("N"+j).の辺りがエラーになるようです。
説明不足で申し訳ありません。
どうか改善策をよろしくお願いします。
ちなみに僕はパソコンを所持しておらず、携帯でプログラムを書いています。
ちなみにページはこれです。
ttp://indexroom-id.hp.infoseek.co.jp/test/JSgazoushokunin.html
パソコンを買ってください
document.all.("N"+j) ↓ document.forms[?].elements["N"+j] ?は適宜変更
>>457 formの中にselectがあるとどこに書いてあるんだ?
__ , ‐' ´ ``‐、 / ̄:三} . /,. -─‐- 、. ヽ / ,.=j _,.:_'______ヽ、 .! ./ _,ノ `‐、{ へ '゙⌒ `!~ヽ. ! /{. / `! し゚ ( ゚j `v‐冫 , '::::::::ヽ、/ 無けりゃ加えようぜ! . {.l '⌒ ゙ 6',! / :::::::::::::::/ __ . 〈 < ´ ̄,フ .ノー'_ , ‐'´::::::::::::::;/ (_ノ)‐-、 . ヽ.、 ` ‐", ‐´‐:ラ ':::::::::::::::: ;∠. ヽ_} ゙ヽ ,.r` "´ /:::::::::::::::::::ィ´ `ゝ !、 / / / :::::::::::::::: ; '´ /´\ / r'\ . i ! ::::::::::::::/ | .!::::::::/ヽ、.._!ヽ. ヽ、 { {:::::::::::;:イ / ‖i:::::::/:::::::::::::/ \ . ヽ ヽ,.ァ‐'´ /ヽ 二 ,/`ヽ、::::::::: /
>>440 >>441 テストサンクス!
自分でもやってみてもかなり値のばらつきがあって
その原因もイマイチよく理解できないので、もうしばらく調べてみます。
ありがとー
PrototypeはRoR好きのJS初心者がRubyっぽく使うために作った玩具 jQueryはCSSとSQLしか知らないデザイナーのためにJS初心者が作った玩具
>>461 CSSとSQL知ってるデザイナーってレベル高いな
俺ってレベル高かったのか
jQueryはほぼ名前空間を汚さないのがいいな
jQueryの名前空間を汚すプラグインは山ほどあるがな
>>452 DOM や DOMの配列 に対して利用できるけど 他にどういう風に使いたいの?
あと、かゆいとこって どんな使い方?
名前からしてJSONを操作できなければ嘘だな jQueryのDOM操作なんて所詮ショートカット集 状況に応じたチューニングが必要な場面も多い
あ、宗教論争始まった?
宗教論争ということにしたいのですね:-)
本人達は宗教論争だとも気付かない・・・
>468 > 状況に応じたチューニングが必要な場面も多い 多くねぇよ糞が。 チューニングが必要な局面は絶対に存在するが、多くは無い。 世の中のJSのユースケースの8割-9割はjQueryで10行以内に収まる。 動作速度よりも、作業速度やド低能でもいじれる事のほうが求められる局面の方が圧倒的に多い。
>ド低能でもいじれる事 >ド低能でもいじれる事 >ド低能でもいじれる事
そうやってムキになってレスをする事が、例え荒そうとしたレスでなくとも 結果的に煽られたり荒らしを呼ぶ事に繋がり、荒れる事になる。
>>472 jQueryで10行以内に収まるような作業しかしたことないん?
476 :
462 :2009/08/18(火) 00:17:39 ID:bTSq2J+z
えぇ!普通のデザイナーってCSSもSQLもできるの? SQLとかマジで教えて欲しいわ。MySQLのパフォーマンスあげるのに苦しみまくり。 フロントエンドとバッグエンドできるなんて最強じゃないか
デザイナだけど応用もってます
うんこだけど、汲み取り持ってます
479 :
Name_Not_Found :2009/08/18(火) 02:56:36 ID:SKw/oRRH
両方読み込んでおけばええやん
IE8で <input type="password" value=""> <input type="password" value=""> なフォームに document.getElementsByTagName("input")[0].type = document.getElementsByTagName("input")[1].type = "text"; でtype属性の値が両方変化しない。Firefoxではちゃんと動作する、しかしこうしたら出来る。 document.getElementsByTagName("input")[0].type = "text"; document.getElementsByTagName("input")[1].type = "text"; でも document.getElementsByTagName("input")[0].value = document.getElementsByTagName("input")[1].value = "example"; は出来る。 なぜだろう
>>480 document.getElementsByTagName("input")[0].type に代入される値を
チェックすれ。つまり、下記を実行してみるべき。
alert(document.getElementsByTagName("input")[1].type = "text")
間違ってループ処理の中にalertを入れたときほど悲しいことはない
よくある
>>481 ありがとうございます
setAttribute("type","text")で変えてみましたがエラーになりremoveAttribute("type")で削除しても変化なし(両方ともFirefoxだと変わる)
IEでinput要素のtypeを変えるのは無理なようです
あるある。計測で2万回まわした結果をalertさせようとしたらスコープ に入っていた。コピペでそれを4個作ってたので大泣きした。
プロセス落とすしかないからな
スクリプトを停止できるOperaの勝ち
innerHTMLで書き出せばいいやん
DOMスキーな俺は.appendChild(document.createTextNode(""));
>>484 IEの実装上の制限で、たしか一度でも他要素の子要素になったinputはtypeが変えられなかったような気がする。
>>485 ESCキー上に物置いて放置ならよくやる
491 :
Name_Not_Found :2009/08/18(火) 19:05:53 ID:NHDHlzf4
2つのスクリプトを同時に使いたいのですが 設定するとどちらか一方しか動作しません(後に読み込んだほうが動作) 調べたら関数とかがかぶってるかもしれないと書いてあってそれは分かったのですが スクリプトがややこしくて気が遠くなってきちゃいます(><) うまく探すコツみたいなのを教えてください jQureyとmootoolsを同時に使いたいの
地道に全部読んで必要なものだけミックスしろ
console.logで十分…IEは知らん
フレームワークはソースを読んでから使えよ。
495 :
Name_Not_Found :2009/08/18(火) 23:55:37 ID:X46q9WC9
質問です。 objA = { "aaa": 1, "bbb":2 }; objB = { "ccc": 3, "ddd":4 }; 上の2つをあわせて objA = { "aaa": 1, "bbb":2, "ccc": 3, "ddd":4 }; という形にしたい時には for (var propName in objB) { objA[propName] = objB[propName]; } と上記のような for in で代入していく以外に効率の良い方法ありますか?
stringでつなげていってevaうわなにをs
JavaScript にはないね。 実際何をやっているかによっては他の方法もあるかもだけど。
498 :
Name_Not_Found :2009/08/19(水) 01:49:09 ID:nZKu/0El
prototype.jsやjQuery入れてextend
500 :
495 :2009/08/19(水) 14:40:13 ID:???
501 :
Name_Not_Found :2009/08/19(水) 17:41:42 ID:N7bYxvhg
$は自分で作るという方法も $=function(e){ return document.getElementById(e); }
$は機械生成コード何たら
jsって記号も変数にできるのか なんか気持ち悪いね
記号というかECMAScript3rdならUTF8での変数名が許可されているので、 var 小飼 = 'n00b'; console.log( 小飼 ); のような変態変数名も可能。
UTF8??
くぁwせdrftgyふじこlp;@「={ x : "ふじこ", } SyntaxError: illegal character ( ・ω・)
じゃあ他で訊いてくださいね さようならノシ
510 :
Name_Not_Found :2009/08/19(水) 23:38:58 ID:nZKu/0El
てすと
テストは他所でやれ。
ごめんボットネットのテストしてた
513 :
Name_Not_Found :2009/08/20(木) 10:21:56 ID:uT5ZAQvg
宇宙に統一原理があるとすれば、JavaScriptと同じものを異星エイリアン が開発している可能性はありますか?もっとすごいものでしょうか? IE124くらいのバージョン?教えてください。
君テレビの見すぎだよ
ver1.41じゃなかった?
516 :
Name_Not_Found :2009/08/20(木) 15:58:08 ID:x1Pa5yS5
var cup = ['AAA', 'AA', 'A', 'B', 'C', D', 'E', '巨']; var size = cup; alert(size[1] + 'カップ'); // 配列のコピーは参照型で、1つのメモリアドレスに対して変数を増やすことができますが var AAA = 5; var size = AAA; alert(size + 'cm'); // このような値のコピーのときに値そのものを格納せず // 配列と同じように参照型として代入する方法はありませんか?
ありません 以下のコードは的外れだけど、実際の設計はほとんどこうなるんじゃない? var obj = { AAA: 5 }; var size = obj; alert(size.AAA + 'cm');
javascriptだとArrayやObjectはいわゆる破壊的な書き換えが可能だけど NumberやStringはそれができない だから表面的にコピーと参照の区別はない 内部的にはNumberは常にコピー、Stringは常に参照(同じ文字列は同じオブジェクト)だったはず
519 :
Name_Not_Found :2009/08/20(木) 16:46:37 ID:x1Pa5yS5
>>517 ,518
var msg = ['%E3%80%80%E3%80%80%20%E2%88%A7%EF%BC%BF%E2%88%A7%E3%80%80%E3%80%80',
'%EF%BC%8F%EF%BF%A3%EF%BF%A3%EF%BF%A3%EF%BF%A3%EF%BF%A3%EF%BF%A3%EF%BF%A3%EF%B',
'F%A3%0A%E3%80%80%E3%80%80%EF%BC%88%E3%80%80%C2%B4%E2%88%80%EF%BD%80%EF%BC%89%',
'EF%BC%9C%E3%80%80%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%83%A2%E3%83',
'%8A%E3%83%BC%0A%E3%80%80%E3%80%80%EF%BC%88%E3%80%80%E3%80%80%E3%80%80%E3%80%8',
'0%EF%BC%89%20%E3%80%80%EF%BC%BC%EF%BC%BF%EF%BC%BF%EF%BC%BF%EF%BC%BF%EF%BC%BF%',
'EF%BC%BF%EF%BC%BF%EF%BC%BF%0A%E3%80%80%E3%80%80%EF%BD%9C%20%EF%BD%9C%E3%80%80',
'%7C%0A%E3%80%80%E3%80%80%EF%BC%88_%EF%BC%BF%EF%BC%89%EF%BC%BF%EF%BC%89'
];
alert(decodeURI(msg.join('')));
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ( ´∀`)< ありがとうモナー ( ) \________ | | | (__)_)
521 :
Name_Not_Found :2009/08/20(木) 18:43:37 ID:sra+GjLX
javascript で使用できるメモリ量を増やすことは可能ですか? java の -Xmx<size> オプションみたいなのがあればうれしいのですが。。
>>521 out of memory起こしてから考えろ
すんません、ASP.NETのページで下のスクリプトを実装したんですがtextbox1上でOnChangeが発生するとparentElemは定義されていないというエラーが出ます。 var a; function registerOnControl(parentID) { var parentElem = $get(parentID); // ASPのツールキットについてるスクリプト parentElem.onchange = function () { a = parentElem.value; }; } registerOnControl("textbox1"); ASPで下手なクロージャはしない方が良いのでしょうか?
524 :
Name_Not_Found :2009/08/20(木) 22:48:24 ID:uPhUfsFn
>>523 parentElem.onchange = function () {
a = this.value;
};
ではいかんの?
「webクリエイティブのためのDOM Scriptong」 ぜんぜんわからない
スクリプd…
527 :
Name_Not_Found :2009/08/21(金) 03:38:28 ID:6xvT0S6R
new すればよくね BK 臭プンプンだけどw
僕の中から赤ちゃんが生まれたようだ
Ajaxやprototypeなどのライブラリ集を学べるいい書籍何か無いでしょうか? 進化が早いせいもあるでしょうが、どれも今の時代では古い内容だとか書かれまくっててどんなのがいいのかなと思いまして。
公式のドキュメント。
532 :
523 :2009/08/21(金) 09:35:17 ID:???
コールバックでのthisはブラウザ依存あったような・・・
document.styleSheets.item(0)と言うのは、<head>部で定義した、別ファイルの一番上の(最初の)スタイルシートの事なのでしょうか? 例えば、最初に<link rel="stylesheet" type="text/css" href="main.css">としていればこの外部ファイルの事なのでしょうか?
>>534 その前に<style>がなければそうなるはず
>>535 thisは関数呼び出し時点で定義されるからクロージャ対象じゃない
>>530 prototypeはオライリー本で大丈夫だよ
「Prototype & script.aculo.us JavaScriptライブラリによるAjaxアプリケーション開発」
春ぐらいに学んだけど問題無かった
最新バージョンもIE8やchrome対応が主で外見は変わってない
自分でリファレンス作ってPDF化したら結構覚えられた
538 :
Name_Not_Found :2009/08/21(金) 11:59:31 ID:lv+izhl0
すみません。質問します。まずはソースから。 <html> <head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> <!-- function test(){ alert("■val()の中身■\n\n" + $("#comment").val()); // (1) alert("■text()の中身■\n\n" + $("#comment").text()); // (2) alert("■html()の中身■\n\n" + $("#comment").html()); // (3) if($("#comment").val() == "ああ\nいい") alert("valでtrue"); // (4) if($("#comment").text() == "ああ\nいい") alert("textでtrue"); // (5) if($("#comment").html() == "ああ\nいい") alert("htmlでtrue"); // (6) } //--> </script> </head> <body> <form> <textarea id="comment">ああ いい</textarea> <input type="button" value="テスト" onClick="test();"> </form> </body> </html>
539 :
538 :2009/08/21(金) 12:05:26 ID:lv+izhl0
条件と質問内容。 ・textareaタグの中には改行が入っています。 ・この場合のjqueryのval()とtext()とhtml()での出力の違いを調べています。 ・(1)(2)(3)はアラートで出力されるのは同じように見えます。 ------------ ああ いい ------------ ・(4)(5)(6)では、(4)しかtrueになりません。 ・(5)(6)でtrueになるには、"ああ\nいい"ではなく、どう書けばよいでしょうか?
Fxでalert($("#comment").val().toSource());とやるとどうなる?
typeof($("#comment").val())で何が帰ってくるか見てみたらいいと思うよ
542 :
538-539 :2009/08/21(金) 12:42:08 ID:lv+izhl0
>>540 FFで$("#comment").val().toSource()はエラー出ました。
ってかFFで538を実行したら(4)も(5)もtrueになりました。
IEでは、"ああ\nいい"ではなく一体何が入っているのでしょう?
543 :
538-539 :2009/08/21(金) 12:44:14 ID:lv+izhl0
>>541 IEでもFFでも、
typeof($("#comment").val())
typeof($("#comment").text())
typeof($("#comment").html())
全てstringが返ってきました。
でもこの情報からは解決に至りません。
IEのみっていうのがめんどくさくて自分で試す気になれないw (6)がfalseならたぶんこれもfalseだと思う document.getElementById("comment").innerHTML == "ああ\nいい" スペースが混入してるとかの些細な違いだと思うんだよなぁ IEでの出力方法もよくわからんし、いっそエンコードして見比べてみるか? alert(encodeURIComponent("ああ\nいい") + "\n" + encodeURIComponent(document.getElementById("comment").innerHTML));
545 :
Name_Not_Found :2009/08/21(金) 13:10:16 ID:WrPwJJEm
¥rも挟まってたりしてな。
>>545 目に浮かんだw
元のHTMLが\r\n保存で、IEのinnerHTMLやtextnodeでは\nに正規化してくれずに
そのまま吐き出してるのかねぇ
IEのnode周りはスペース混入しやすい とメモってた。
たぶん関係ないと思うけどIEは内部(innerHTMLとか)でタグを大文字で属性の値をくくる”をとってしまうから注意だな <p style="xxxx">ほげ</p>が<P style=xxxx>ほげ</P>に展開される
俺さ、まぁそこそこJavaScript出来るんだけどさ、昔から思ってるんだけど『サイ本』って難解じゃない? 良く、サイ本読めとか、サイ本薦める人がいるけれど、JavaScript始める人間に俺は到底薦められないな 分かりやすい事も難解に書かれていると思うし、例文も「何じゃこりゃ?」と思うような例文ばかりだし 確かにある程度のレベルになれば為にはなるし、ある部分では他の本に満足出来なくなったりもするけれど Perlとか他の言語も含めて、皆本当にオライリー本をメインで学習したの?
良書だとは言われても入門書として評価してる人はいないかと とはいえ他に入門書としての良書があるわけでもなく・・・ プログラム初心者が基礎力を学ぶにはjavascriptは学習環境悪いよ 言語やその環境自体は悪くないのにね 他で身につけた人ならjs初心者だろうとサイ本でおk
>>536 それが定義されるかどうかっていう話なんだけど・・・w
552 :
538-539 :2009/08/21(金) 17:37:50 ID:lv+izhl0
\nのとこを\rとか\r\nとかに変えて全ての場合について確認したところ、 何が入っているか判明しました。 【まとめ】 <textarea id="comment">ああ いい</textarea> というテキストエリアの、val()とtext()とhtml()の違い。 IEの場合 $("#comment").val() → "ああ\nいい" $("#comment").text() → "ああ\rいい" $("#comment").html() → "ああ\r\nいい" FFの場合 $("#comment").val() → "ああ\nいい" $("#comment").text() → "ああ\nいい" $("#comment").html() → "ああ\nいい" という結果でした。何が入っているかが判明したので質問としては解決なのですが、 IEでは val()が\n text()が\r html()が\r\n となる理由を解説できる方がいらっしゃったら嬉しいです。
改行コードは UNIX,Linux がLF (\n) Mac がCR (\r) Windows がCR+LF (\r\n)
>>553 3つの関数で\n、\r、\r\nという違いが出る理由を
IEだから これに行き着くだろう Fxだと全部おなじなんだから
556 :
Name_Not_Found :2009/08/21(金) 22:24:04 ID:6xvT0S6R
サイ本は個人的には読みにくかった
オライリーは中級者以上向け
>>557 ある程度のプログラミング経験があって、なおかつ javascript もそこそこ理解している人向け。
要するに、ある程度解ってから読む本。入門書ではないと思ったほうが良い。
が、他にまともな本もないから、サイ本に行き着く。
オライリーの本に共通する特徴として、 ・手取り足取り冗長なサンプル満載なHOWTO本では無い ・読み物というより、仕様についての解説が書かれたリファレンスとして使うのが良い ・基礎を学んで、それらをベースとした応用力を付ける用途に最適 良くも悪くもこんな感じなので、デザイナが片手間にプログラミングをする時の本としては向かないが、 プログラマ的には良書揃い。 js-users.jpとか立ち上げてヒャッホイしていた素人さん方にも是非読んでもらいたいね。
それでも初心者に勧めてる光景をよく目にするよね
で、買って呼んではみたものの早々に挫折ってパターンが多い
俺なんかプログラミング始めた当初はCもJavaも意味不明でとほほのJSだけが理解できたからJSを始めたんだが その後気合いでDOMを習得してからはJSのスキルアップも他言語の習得も早かった というのは非常にイレギュラーなんだろうなあ
マイコミのJSマスターブックは良かったよ。 Cの経験あったけど、9年ぶりのプログラミングでもおkだった。 その後、オライリーJS&DHTMLクックブックを全部解析してたたき込めた(と思う) まだ始めて1年経ってないけど。 サイ本は高くて買えなかった。
何であんなリアルな動物の絵ばっかなんだよ。
かわいい動物の絵だと買いにくいだろ
最初はDOM操作?何それおいしいの?innerHTML最高ーだったな
567 :
Name_Not_Found :2009/08/22(土) 07:58:54 ID:Nmbh4Dgf
オライリー本は デスクに何冊かインテリアとしておいておくと 出来る人っぽくみえる。
形から入るのは重要だな
>>562 同じくJSから入った口
ネット上のサンプルプログラムを切り貼りしただけでそれなりのものが作れてしまうJSは
入門用言語としてはいいものだと思う
コンパイラが要らないのが大きいわな。 セミコロン、型変換、数値、この辺りの理解を前提としなければ 本当に初めての人にはちょっと薦めたくはない。
これほど美しい言語はないと思ってる
俺もJSからだった
webってのは jsにはじまりjsに終わるって じっちゃんが言ってた
95年までのwebを知らないとは、お前のじいちゃん若いな。
スニーカーネットな時代もあったんだぜ
質問ですが、 以下のようなメタリフレッシュをJavaScriptから変更もしくは停止する方法があれば教えてください <meta http-equiv="refresh" content="30" />
それが出来たらメタじゃなくね?
>>576 なにを試したかとかは書いてほしかったな
まあHTTPヘッダ代替というhttp-equivの特性上、文章レベルでどうこうするのは難しいと思う
実際、Fx3.5でmetaをremoveChildしても、下記の無効なrefreshを足して上書きを期待しても無駄だった
var meta = document.createElement("meta");
meta.setAttribute("http-equiv", "refresh");
meta.setAttribute("content", "a");
30秒経つ前に JavaScript でリロードしちゃえばいいんですyo!
innerHTMLを正規表現でmetaとってdocument.write()したらいいとおもうよ!1
HTML内に、 <input type="hidden" name="hogehoge" value="ageage"> というタグがあったとします。(id=〜やclass=〜は無いものとします) このタグにjqueryのセレクタでアクセスするのに、 $("[name='hogehoge']") ↑これはOK $("input[name='hogehoge']") ↑これもOK $("[type='hidden'][name='hogehoge']") ↑これもOK $("form:hidden[name='hogehoge']") ↑これが× なんですが、この4つ目のように Form要素系と[attribute=value]系を組み合わせることは できないんでしょうか?
$("form[type='hidden'][name='hogehoge']")では?
それをいうなら $("input:hidden[name='hogehoge']")
584 :
581 :2009/08/23(日) 06:26:19 ID:???
>>583 そちらでできました!
ありがとうございました。
var w =null ; function closeWindow() { if (w) { w.close(); w =null ; } } これって、wがnull値なら、windowを閉めて、null値を代入しろっていう意味でしょうか?
サンプルを信じるな
なんのサンプルだ
589 :
Name_Not_Found :2009/08/23(日) 10:19:11 ID:oxPs9IUf
>>584 追記すると
formタグについてる属性じゃないからね、name="hogehoge"
>>582 wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
^o^)(^o^)(^o^)(^o^)(^o^)(^o^)(^o^)(^o^)(^o^)(^o^)(^o^) hiddenはプロパでしゅ。
Firefoxで自作のJavaScriptのプログラムを動作させてみたところ、 if(NN6){ ここにsyntax errorが出てしまうのですが、 if(NN6){ document.getElementById(lyr).style.left=x; document.getElementById(lyr).style.top=y; } これのどこかに構文の誤りがあるのでしょうか?
593 :
Name_Not_Found :2009/08/23(日) 16:53:45 ID:7uy9EibQ
なぜmsnのサイトは揃いもそろってみんなあんなに重いのでしょうか?よく は分からないですが、javascriptの組み方が冗長で解析に時間がかかって いるような気がしてなりません。ご存知の方、真実を明らかにして下さい。
>>592 x と y は数値じゃなく、単位 ゙px゙ まで含んだ文字列を代入してるか?
598 :
592 :2009/08/23(日) 18:14:49 ID:???
自己解決しました。 function lyrSetPos( lyr , x , y ) { if ( NN6 ) { document.getElementById( lyr ).style.left = x; document.getElementById( lyr ).style.top = y; } if ( IE5 ) { document.getElementById( lyr ).style.pixelLeft = x; document.getElementById( lyr ).style.pixelTop = y; } } このように変えれば、うまく行くみたいです・・・なんでかはわかりませんがorz
599 :
Name_Not_Found :2009/08/23(日) 19:05:20 ID:oxPs9IUf
>>593 MSNのソース確認したら
確かにJSファイルが大量に書いてあった。
ただ内部の処理が分からんからなんともいえぬ
なら全部読んでからレスしろよ。
質問です。環境はWinXp/IE8/JS1.3です。 form.text.valueの内容を、 何らかの手段でCR(\r)を削除したテキスト(最終的にはCSV作成の為のスクリプトにするので) を書き出したいのですが、 試しにdocument.openとwriteによって別窓にテキストのみ出力したけれども、 そのドキュメントをShift_JIS形式のテキスト(.txt)で保存すると 日本語が&#〜;という(すみません。正式名は分かりませんが)文字に置き換えられていました。 保存前のドキュメントの文字コードがEUCで灰色で選択されており固定だった事もあるのかと思いましたが、 ググってみるとcharsetで文字コードを指定しているという事が分かりました。 しかし、余計なタグは省きたいため、innerHTMLにタグを挿入してcharset="shift_jis"を埋め込む方法は避けたいのです。 文字コードの設定等、或いは間接的に\rを除外してファイルに持っていく方法がありましたら、教えてください。 お願いします。
602 :
601 :2009/08/23(日) 20:18:22 ID:???
ごめんなさい。 多分無理かもしれません。text.valueの時点で\r入ってるかもorz
> form.text.valueの内容を、何らかの手段でCR(\r)を削除したテキスト String.prototype.delcr = function() { this.replace(/\r+/g, ''); }; alert(form.text.value.delcr());
JavaScriptってさ、言語としては難しくないけれど、Ajaxを利用しHTTPの知識も入ってくると、とたんに難しくならない?
606 :
Name_Not_Found :2009/08/24(月) 11:43:00 ID:YFztsAu+
StaticなNodeはOnLoadされたときにまとめてキャッシュしておきたいのですが 何度もOnClickで呼び出す関数から参照する場合は どうやってキャッシュすれば速くなるのですか?
>>605 逆だ、おまえさんがJSを使って難しいことに挑戦してるだけ
非同期は一筋縄じゃいかない、それでもスレッドがないだけマシ
ライブラリ出てだいぶ楽になったけどね。 prototype.jsとかjQueryとか
GUIやらイベントやらが絡んでもシングルスレッドってのがJSを簡単にしてるよな
Ajaxって言っても結局ほとんどはresponseTextかresponseXMLを取るだけでそれ以上はCGI側の問題だし、 ライブラリ使わなくても同等なものの実装はたかが数十行だし。 それ以上のことをしようとしてるなら難しいけどさ
>>610 それはAjaxではない。Ajax言いたいだけ
mixiアプリってHTMLとJavaScriptとXMLから構成されると説明されてるけど mixiアプリのグラディウスとかってあれメインはJavaScriptで作られてるの? だとしたらJavaScriptすげえね
Firefoxのwindow.innerHeightと同じ値をIEで取るようにするにはどうしたらいいですか 今はdiv要素をappendChildしてスタイルをposition:absolute;bottom:0px;したものをoffsetTopで取っています
>>617 そのページがJS使ってるだけで、まったくもってスレチな質問だなw
ム板の画像処理スレあたりか?
基礎として二次元平面、特に三角関数は必須だけど
その辺押さえていればあと習うより慣れろでなんとかなるんじゃね
ajaxって言う割にはxmlはあんまり使われてないよな…
>>618-619 ありがとう
この本調べてみたけどよさそうだね
C++なのがちょっと不安だけど
二次元平面・・・三角関数・・・
聞いたこと歩けどどんなのだっけってかんじのものばかりだわ
頑張って勉強してみる
非同期にデータを読み込んでおくので ユーザーアクションと表示のタイムラグが小さいのがAjax ユーザーアクションと同時に非同期にデータを読み込むので 表示までのタイムラグが大きいのが似非Ajax
>>622 それはオレオレ定義だな。
極めて単純に、当時の実装であった Msxml2.XMLHTTP.3.0 を初めて見た馬鹿外人が感動をすなおに書き記したら、意外にも殆どの人間が知らなかった、というだけ。Mozillaの猿真似も含めて、そのバズワードで呼ぶようになった。
それ以前に、Msxml.DOMDocument のload()メソッドがよりポピュラーであり、何が便利だったかと言えば、非同期ではなく、同期できることだった。イベントドリブンなコードを書く必要がなくなったのは一部の非プログラマな人々には密かに好まれた。
>>620 実際のところ、その言葉が出た頃には、サーバーのスペックが過剰な傾向に進む兆しがあったわけで、馬鹿外人がその簡易クライアント作成APIに気づくのが遅すぎた感がある。
あるいは、IE5が出た瞬間から知っていた俺なんかが使って示してやれば、当時(1999年)はまだ有意義だったかもしれない。ちなみにその頃は一般にウェブオートメーションと呼んでいて、それで会話は成立していた。
今となっては、本当に必要としているサイトは極めて、本当に極めて、稀である。何故なら、全てをサーバーでやっても全く困らないほど、サーバーマシンのスペックは上がったからだ。
同時に、日本のサイトでケータイが主流になってきた時期とも重なる。日本の特殊事情から、ケータイサイト向けの処理命令は全てサーバーで行わなければならない(ならなかった)。従って、日本での使用はどれもが不要な遊びの域を出ていない。
もし現在でも有意義な使い方があるとすれば、responseBodyプロパティと ADODB.Stream の組み合わせによるファイルのやり取りだと、俺個人は思っている。
ローカルのデータで外に出して構わない物をやり取りする時に使える。この使用だと、時々ファイルサイズが巨大になるが、俺の狭い経験だけで言わせてもらえば、処理を完遂できなかった事は無い。
625 :
Name_Not_Found :2009/08/25(火) 13:58:04 ID:k9KZbshE
テーブルにマウスオーバーするとセルの色が変わるものを作っています。 ライブラリが結構ありますが、自作したいと思い、以下のようにしました。 <tr onMouseOver="this.style.backgroundColor='#CCCCCC'" onMouseOut="this.style.backgroundColor='#ffffff'"> これでセルがハイライトされるのですが、関数にまとめる方法がわかりません。 どうすればいいのでしょうか?
<head> <script type="text/javascript> window.onload = function(){ for(i=0;i<document.getElementsByTagName("tr").length;i++){ document.getElementsByTagName("tr")[i].onmouseover = function(){ this.style.backgroundColor = "#cccccc"; } document.getElementsByTagName("tr")[i].onmouseout = function(){ this.style.backgroundColor = "#ffffff"; } } } </script> </head>
こういうこと?いろいろ手抜きしてるのでそのへんは脳内補完よろ window.onload = function(){ var tr = document.getElementsByTagName('tr'); for(var i=0, n=tr.length; i<n; i++){ tr[i].onmouseover = function(){this.style.backgroundColor='#CCCCCC'} tr[i].onmouseout = function(){this.style.backgroundColor='#ffffff'} } }
628 :
625 :2009/08/25(火) 14:33:07 ID:k9KZbshE
>>626-627 ありがとうございます。
window.onloadをしないといけないのでしょうか?
ページによっては他で使っている場合があるので
windows.onloadをしない方法があればと思っていたのですが・・。
仕様的にwindow.onloadを使わないと関数としてまとめられない場合は
違う方法を考えてみます。
>>628 document.addEventListener / attatchEvent を使うか
<script>をbodyの最後に書けばOK
>>628 まだ読み込まれてない要素を参照するのは不可能。
1行目しか読み込まれてないのに2行目にあるものを知ることは出来ないといえば分かるだろうか
>>629 のようにしたらいい
631 :
Name_Not_Found :2009/08/25(火) 16:16:39 ID:q0HS8nzR
あげ
<tr onmouseover="onmouse(this, true);" onmouseout="onmouse(this, false);"> function onmouse(elm, mouseover){ elm.style.backgroundColor= mouseover ? '#cccccc' : '#ffffff'; } とか?処理本体をHTML内に書かないという意味では若干良くなってるかと
未だにonclickとかをHTMLに書く人っているのか
俺かくよ <div id="a" onclick="hoge('a')"></div> <div id="b" onclick="hoge('b')"></div> こういう複数ある状況なら ていうか書き方知らないだけなんだけど js内にかくときって document.onclick=function(){ } ってかんじだっけ?
未だにonclickプロパティとかを書く人っているのか
未だにonmouseoverとonmouseoutをセットで書く人っていたのか
addEventListenerじゃないの まぁクロスブラウザで楽にしたいならjQueryのbind使えば
bindってある意味レガシーの極みだよな…
>>638 今時っていうか前世紀からある方法なんだが
イベントのバブリングを利用すれば
あるノード(currentTarget,this)以下で発生したイベント(target,srcElement)は全て拾える
mouseoverとmouseoutはどっちでイベントが発生したかの違いに過ぎないので、
どっちかだけ監視しておけばrelatedTarget(fromElement,toElement)で両方分かる
イベントリスナーはcloneNodeとかinnerHTMLへの追記とかであっさり消えるので
できるだけ遠くから監視するのが無難
あるいはHTMLのイベント属性として書いておけば生き残る可能性が高い
状況によってはonclickプロパティよりもonclick属性をHTMLに書いた方がまし
この辺はライブラリの使用に関係なく
イベントモデルを知らないとどうにもならない
jsありきの文章(ウェブアプリとか)だったらonclick属性とか使うのもありだと思う
そもそもなんでそんな敬遠するのさ
流行り廃りが好きな人なんじゃね
>>643 ライブラリとかだとhtmlの記述から独立してる方が再利用性高いとかそんな感じ
646 :
625 :2009/08/25(火) 22:20:29 ID:k9KZbshE
>>632 この方法が一番良いですね。わかりやすいと思うし。
みなさん、ありがとうございました。
個人的にはロジック部分をひとまとめに書きたいから避けてる 再利用とかは余り考えてないけど、点在すると追うのがめんどい CSSでstyle属性よりもstyle要素でid指定のほうが主流なのと似たようなもんじゃないかと
>>633 >>635 トラッキング用のコードを埋めるためにa要素なんかにonclick属性ベタ書きさせる奴とかいるぜ
var class = { add: function(){ return a+b; }, sub: function(){ return a-b; } } alert(class.add + class.sub); a,bをclassのメンバ変数として宣言したいとき var class = { var a = 1; var b = 7; add: function(){ とするとエラーになりますが、 a: 1, b: 7, add: function(){ return class.a-class.b; とはせずに、add,subから参照できるa,bはどうやって宣言すれば良いでしょうか?
650 :
Name_Not_Found :2009/08/26(水) 02:26:46 ID:zUQPewIy
∧_∧ / ̄ ̄ ̄ ̄ ∧( ´∀`)< あげ ( ⊂ ⊃ \____ ( つ ノ ノ |(__)_) (__)_)
var class = (function (){ var a = 1, b = 2; return class = { add: function(){ return a+b; }, sub: function(){ return a-b; } } })();
あなるほど、ありがとうございます。
return周りをミスったけど察して
Ajax(HTTP非同期通信)ってどういうところに使われているのですか? パッと見た感じ有名なGoogleMapとかしか使われていないような気がするのですが・・・ それほど主流じゃないのでしょうか?
>>654 パッと見ただけgooglemapsにたどり着いたのがむしろすごいわ
むしろ最近ならgooglemaps以外の方が目立つだろ
>>654 YahooかGoogle開いて、適当なキーワード打ってみ
>>657 ごめんなさい、言っている意味が分からないのですが
>>658 まずやってみろ、文句はそれから言え
JSが無効ってオチはなしな
Googleに関していえばGoogleMapだけじゃなくあらゆるところで使ってるよ
GmailやGoogleドキュメントなんかのMap以外のWebアプリケーションにも使われてるし
普段よく使うものでは検索ボックスに途中まで入力したら候補がでてくるやつもそう
Ajaxが使われるWebアプリケーションで代表的なのはチャット
リッチ性を追求したEコマースアプリケーションでも使われる
http://examples.adobe.com/flex3app/flex15/flexstore/flexstore.mxml これはFlexの例だけどこれをAjaxに置き換えることも可能(購入情報の通信なんかで使う)
AjaxはPOST,GETメソッド等は使うがページ遷移を行いたくない
Webアプリケーションなんかを扱うときによく使われる
>>659 は結局Ajaxの事は何も知らないヤシとみたwww
659が言ってるのは検索候補表示のことでしょ たしかに一番身近なよい例だと思うけど 逆に身近すぎて初心者にはわかりにくいのかも
む、検索候補表示って言い方は無いか GoogleでいうSuggestの事ね
皆はライブラリは何使ってるの? 俺は基本のprototype・・・
中級者はオレオレライブラリをどんどん書いて黒歴史にしていけ
だいたい似たような機能はあるんだよな、オレオレライブラリ。 addEventListerとか、getElementsBySelectorとか、Array.eachとか。 はじめはよく使う関数をいくつかまとめただけだったのに、 いつのまにやらプクプクとふくれて…
去年getElementsByClassNameがほしいなとおもってたけど HTML5から標準実装だってな! BANZAI!IEは氏ね
document.querySelectorで全部できるようになるんだろ 昔作ったオレオレライブラリは見たくもない
問題はいまだに古いブラウザ使ってる阿呆が多いことだな PC初心者とかほどがあるだろ
getElementsByClassNameはふつーの感覚なら最初から候補に なってるでしょ。CSSとの連動思想が弱いんですよ。
ByNameはあるのにByClassNameが無いのはおかしいニダ
document.querySelector これいいね感動した
getElementsByClassNameは俺も作ったことあるけど、 Util.getElementsByClassName = function(parentNode, className){} とかいう格好悪い定義になったり、 使いまくると速度的にボトルネックになったり、地雷すぎたなあ。 querySelectorに期待だが、いつから解禁したものか。 俺の感覚だと非対応ブラウザのシェアが多くても5%未満にならないと使っちゃいけない気がするしな
>>674 querySelector実装したライブラリ使えばいいんじゃね
だから速度をどうするのかとw ページ内にノードが1000ぐらいあって、しかも1000周ぐらいするループ中でうっかり使ってみろ、目も当てられない
ライブラリでClassNameみたいなの実装すると必然的にノードを何周も駆け回る事になるから遅くなるね
へぇ、さすが。勉強になるわ(^。^)
対応ブラウザでもループ内では使わないわ
だがjqueryでは普通に見る罠
ブログ等で動画を貼ってあるのもAjax?
あれはただの埋め込み(embed)だろ
jqueryとprototypeはどっちが人気があって使いやすいのですか? 一応どっちも軽くはやったのですが、現場などで使うような場合は他ライブラリなどとの干渉問題などもあるのかもしれませんし そこら辺が分からないもので・・・ dojoにすればいいのでしょうが、巨大化するのもあまり好ましくないのかなとも思ったりするもので
example = { example : function(){ /*expression*/ } } example = function(){ example.example : function(){ /*expression*/ } } example.example()を呼び出すときはどっちが早い?
JavaScriptでおk
>>684 前者は "example" : function(){} って書かないとエラらない?
後者は文法的に駄目じゃない?
ためしてないけど。
example.example = function(){ でしたミスです
>>684 ,687
後者はexample()を一度実行しないとexample.exampleが定義されないから
クロージャ不要なら無駄手間
example = function(){};
example.example = function(){};
と前者の勝負だとわからんけどおそらく誤差
>>686 変数名として使える文字列ならダブルクォートいらん
誤差かー。どちらにしろ大きく変わりそうもないから見やすい前者がいいかな ありがとう
690 :
Name_Not_Found :2009/08/27(木) 17:40:18 ID:JAMXpo8a
>>688 >変数名として使える文字列ならダブルクォートいらん
むう、そうか。
既出のexampleとかぶるかと思っちゃった。
>>690 左辺は評価されないから変数展開とかもない
どうしても動的に定義したいなら
example = {};
v = "dynamic";
example[v] = function(){};
連想配列定義する時に、キーを""で囲む囲まないでパフォーマンスは変わる?
>>692 仕様上は変わらん、実装の都合はしらん
つーかお前らそんな細かいところで気になるならベンチとれ
window.onmousemoveとかって例えば<div id='test'></div>があったとき、 1.testの範囲だけ(から)の値を取得できないの? layerXで取れるけど、<div id=〜〜が一杯あるとき、別のdivにまで反応してしまうのです。 2.あと、windows2000、firefox3でやってるんだけど、 onMouseMoveだと上手く行かなくてonmousemoveだと上手く行く、 おそらく他のも同じなんだけどこれはどうしてなんでしょうか。 よろしくおねがいします
>>694 最小限でいいから再現できる実際のコードを
696 :
Name_Not_Found :2009/08/28(金) 10:04:18 ID:evFFHIQO
すみません、javascriptでラジオボタンの選択をさせるのはどうすればいいのかお教えください。 PHPで作成しています。ソースは <script type="text/javascript"> <!-- function sentid(param){ var tid = param.id; document.getElementById(tid).checked = true; } //--> </script> 中略 <? for($i=1;$i<5;$i++){ ?> <input id="radio<?= $i ?>" type="radio" name="radio" value="<?= $i ?>" style="width: 25px;" onclick="sentid(this);return false;" />ラジオ<?= $i ?> <? } ?> 中略 これでは作動しませんでした。javascript使わなくても選択できるのはわかってるんですけど、 onclickで選んだら下に次の選択肢が出るようにもしているので、onclickで選択できるようにしたいのですが・・。 習い始めなのでソースもおかしいとは思いますが、よろしくお願いいたします。
><? for($i=1;$i<5;$i++){ ?> PHP疎いからなんだけど、これほんとにPHPか? ブラウザで受信したHTMLのソースはちゃんと整形されてた?
<? 〜 ?> も存在はするのか、すまん でもオプショナルらしいけど、そのサーバで使えることは確認した?
>>696 ・onclickが呼ばれた時点で対象radioは既に選択状態
・return falseすると「クリックしなかった」ことになる
・onclickのparamはradioを指してるんだから、敢えてgetElementByIdをするのは無駄
んだから↓でいいんじゃないの?つかこれくらい自分でデバッグしろよ
<script type="text/javascript">
<!--
function sentid(param){
alert(param.checked);
}
//-->
</script>
<? for($i=1;$i<5;$i++){ ?>
<input id="radio<?= $i ?>" type="radio" name="radio" value="<?= $i ?>" style="width: 25px;" onclick="sentid(this);return true;" />ラジオ<?= $i ?>
<? } ?>
>>697-698 一応これで形成されます。きれいな書き方かどうかは別ですが。
>>699 ありがとうございます。javascript習いだして数日なもので・・・。それでデバッグして見ます。
>>899 ほんとだreturn falseした瞬間にcheckedが戻ってるw
その後の処理を止めるだけだと思ってたけど、UNDO的なこともするんだな
702 :
Name_Not_Found :2009/08/28(金) 17:15:14 ID:DGjLKm19
>>696 チェックボックスのチェックon/offは全く考えずに、
イベント→チェックボックスのクリック
実行内容→チェック状態を見て、onなら次の選択肢表示、offなら非表示
とするのが正解かと。
703 :
Name_Not_Found :2009/08/28(金) 20:18:55 ID:onBpXNIA
質問します。 以下のスクリプトを実行し、画像が読み込まれたら「hoge」と alert で表示させたい場合、Test.prototype.func2 の中の loadSuccess はどのように記述すればいいのでしょうか? 何卒よろしくご教示ください。 function Test() { this.a = 'hoge'; } var Test.prototype.func1 = function() { alert(this.a); }; var Test.prototype.func2 = function() { var loadSuccess = function() { // 画像読み込み後に実行する処理 func1(); // ここで Test.prototype.func1 を実行させたい }; var loadImg = new Image(); loadImg.addEventListener('load', loadSuccess, false) loadImg.src = '123.jpg'; }; var test = new Test(); test.func2();
こういうことか? var self = this; var loadSuccess = function() { self.func1(); }; どうでもいいけどプロパティは変数じゃないからvarいらない var Test.prototype.func2 = function() {
705 :
703 :2009/08/28(金) 20:57:55 ID:???
>>704 プロパティの件も含めて、ありがとうございました。
706 :
703 :2009/08/28(金) 22:09:44 ID:onBpXNIA
また重ねて質問します。今度はIEのattachEvent関連についてです。 以下のスクリプトをIE5.5以上で実行した時に loadSuccess 内で画像の情報を取得する方法はありますでしょうか? onclick や onkeyup などのイベント時には window.event.srcElement で イベント発生元の要素が取得できましたが、onload の時は srcElement は null になってしまいます。 また、window.event.type のみ「load」と取得できます。 ちなみに FirefoxやOperaなどでは target で取得することが可能でした。 連続質問ですが、よろしくお願いします。 loadSuccess = function() { // ここで読み込んだ画像の幅などを取得したい }; var loadImg = new Image(); loadImg.attachEvent('onload', loadSuccess) loadImg.src = '123.jpg';
善意のスレを踏み荒らす様な奴だな
708 :
703 :2009/08/28(金) 22:59:16 ID:???
>>707 調子に乗って連続して質問してしまった失礼をお詫びします。
申し訳ありませんでした。
>>706 の質問は撤回いたします。スレ汚し失礼いたしました。
javascriptの document.writeされた部分だけかすめ取って取得する方法ありませんでしょうか? hoge = getDocumentWrite("test.js"); とかそんなかんじで取得したいです。 phpのhttp_clientやperlのlwpみたいな感じです。
>>706 Imageオブジェクトからとれたよね?
var loadImg = new Image();
loadSuccess = function() {
// ここで読み込んだ画像の幅などをloadImgから取得
};
>>709 document.write()されるまえにdocument.writeを書き換えとけ
711 :
Name_Not_Found :2009/08/29(土) 08:38:04 ID:MPg+6ZpD
初心者質問です。java scriptってどうしていくつも書き方があるの ですか。正解を教えてください。「JAVAスクリプト」ですか?
あぁ、サーバ構築の大変さに死にたくなってきた・・・
714 :
Name_Not_Found :2009/08/29(土) 12:23:38 ID:RKb20JxY
ageてまで釣られんなアホ
やりたいこと:ボタンを押してframesetのframeを動的に増やしたい。 top.html <html lang="ja"> <frameset cols="*,*"> <frame src="memo.htm" name="f1"> <frame src="memo.htm" name="f2"> </frameset> </html> memo.htm <html lang="ja"> <script type="text/javascript"> <!-- function frameadd(){ var w = parent.document.getElementsByTagName("frameset")[0]; w.cols+=',*'; var element = document.createElement("frame"); element.src = "memo.htm"; w.appendChild(element); //引数が無効エラー } //--> </script> <body> <input type=button name=add value="枠増" onclick="frameadd()"> </body> </html> frame自体を増やすことには成功しましたが、黒い枠のまま。 location.hrefもダメでした。うまく行く方法を教えてください。
717 :
Name_Not_Found :2009/08/30(日) 02:42:05 ID:MGLsKUuH
frame.contentWindow.location.href でもだめかね。
frameはhtml5でもxhtml1.1でもサポートされてないし動作を期待しない方が良いよ
innerHTMLでも無理?
phpのクラスだとセッタとかゲッタをいちいち作ってるけど もしかしてプロトタイプベースのjavascriptはいらない感じ?
そもそも古いブラウザで未対応
参考書等のセミコロンを付けてる部分と つけない部分の違いが解りません!
調べずテキトーに言うと、function文や制御文の{ }の終わりには要らない(ブロック付きの「文」の末尾) { }でもfunction式とObjectリテラルには必要(文じゃないから) function f () { var v; v = { num: 1 }; if (flag) { v.method = function() { alert('test'); }; } } まあ良くも悪くも、多少間違っててもセミコロン自動補完がなんとかしてくれる
>722 「文」の終わりにはつけるのが基本。 JavaScriptの場合、セミコロンを省略しても、実行時に改行の位置に適当にセミコロンを補ってくれる。 たまに意図した場所とは違う場所にセミコロンが入る事があるので、文の途中で改行する際には注意が必要。
>>717 見かけ上,枠が見えてても、3番目のframeが未定義のため、設定できませんでした。また
var w = parent.document.getElementsByTagName("frame");
alert(w[2].contentWindow.location.href); ←未定義のエラー
>>719 topのframesetをinnerHTMLで書き換えようとすると、エラーで何もない画面に。
innerHTMLでの書き換え自身がエラーになる様子;
w.innerHTML +="<frame src='memo.htm' name='f3'>" //未定義のエラー
フレーム関係はセキュリティも絡むからちゃんと実行環境を書かないと適切な答えは帰ってこないと思うよ
727 :
716 :2009/08/30(日) 13:02:57 ID:???
環境はIE6、FIERFOX3、OPERA9.6です。 FIERFOX3は716で動作確認が出来たのですが、 IE6・OPERA9.6で動かない状態です。
outerHTMLはどうなん?
JavaScript勉強し始めてprototype.jsを落としてみたが…… うわぁ……これを理解して、使いこなせる先人の 代わりに職に就くとか出来そうにないわ……orz
特定要素に指定されたスタイルを無効、もしくは削除するにはどういうやればいいんでしょうか? <p>リンゴは<em>赤い</em></p> でem要素に指定されているスタイルだけ無効にしたい、という風な感じです。
>>730 理解しなくても使い方をバカの一つ覚えすればヨロシ
733 :
名無しさん@そうだ選挙に行こう :2009/08/30(日) 16:16:00 ID:jP2ecCRi
>>731 それならclassなりid付けてcssで操作した方が楽ですよ。
[html]
<p>リンゴは<em id="none_style">赤い</em></p>
[css]
#none_style {無効にする設定}
jsでやるにしてもclassかidが付いていた方が楽ですね。
[html]
<p>リンゴは<em id="none_style">赤い</em></p>
[js]
document.getElementById('none_style').style[PROPERTY] = VALUE;
734 :
名無しさん@そうだ選挙に行こう :2009/08/30(日) 16:20:43 ID:jP2ecCRi
>>733 の補足
jsでやる場合ドキュメントをロードしてからやること!!
方法はいくつかあるしイベント(この場合ロードしましたよって状態のこと)
を操作するとなるとブラウザに依っても若干変わってくるので。
window.onload = function()
{
document.getElementById('none_style').style[PROPERTY] = VALUE;
}
とかね。大抵のブラウザは大丈夫な書き方だけどこれだと1つの関数しか登録できないけど
回避方法は思いつくだけでもいくつかあるから良かったらやってみて。
>>730 コード量に引いてるんだったら根気出せ
分かってみると、結構大したこと書いてないぞ
Gin.jsはお手本にしてる
>>734 横レスしますが、すばらしい!
えらい勉強になりました♪
ありがとうございます\(^。^)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>Sample</title> <link rel="stylesheet" href="css/main.css" type="text/css" media="all"> <script type="text/javascript" src="js/prototype.js" charset="shift_jis"></script> <script type="text/javascript"><!-- Event.observe(window, "load", function(){ Event.observe($("area1"), "click", function(evt){ $("result").innerHTML += "Area 1,"; }, false); Event.observe($("area2"), "click", function(evt){ $("result").innerHTML += "Area 2,"; }, false); Event.observe($("area3"), "click", function(evt){ $("result").innerHTML += "Area 3,"; }, false); }, false); // --></script> (下に続きます)
(上からの続き) </head> <body> <h1>イベントの伝達を停止する</h1> <div id="result">...</div> <div id="area1">Area 1 <div id="area2">Area 2 <div id="area3">Area 3</div> </div> </div> </body> </html> コレを起動し、例えばarea3の部分をクリックすると、「Area3,Area2,Area1」と表示されますが、まぁ、コレはバブルアップで伝達されているのだと思います では、コレを「Area1,Area2,Area3」のように順番を逆に表示させる事は出来ないのでしょうか? 自分はuseCaptureをtrueにすればいいのかと思っていたのですが、そうなりません で、この動作からどうも自分は、キャプチャーの事を勘違いしていたように思えます すみませんがこの伝達部分の事教えていただきたいと思うのですが 長文、ごめんなさい
以下の記述で、フレーム越しにテキストボックスに自動入力する値を受け渡したいのですが Firefox3.0.13、3.5.2では機能しません。Opera9.64、Safari4.0.3、IE6、7、8では機能します。OSはXP SP3です なぜFirefoxでは機能しないのでしょうか? Firefoxでも機能させるための対処法があれば御願い致します frameset.html ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> <title>フレーム越しにテキストを入力</title> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> </head> <frameset rows="60,*" title="親フレーム"> <frame src="frame_a.html" id="frame_a" title="フレームA" /> <frame src="frame_b.html" id="frame_b" title="フレームB" /> <noframes> <body> <ul> <li><a href="./frame_a.html">フレームA</a></li> <li><a href="./frame_b.html">フレームB</a></li> </ul> </body> </noframes> </frameset> </html>
741 :
740 :2009/08/30(日) 19:12:47 ID:???
frame_a.html ■■■■■■■■■■■■■■■■■■■■■■■■■ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> <title>フレームA</title> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> </head><body> <form action="#" id="myform"><p><input type="text" id="txt" value="" /></p></form> </body></html> frame_b.html ■■■■■■■■■■■■■■■■■■■■■■■■■ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /> <title>フレームB</title> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> </head><body> <div><span style="cursor:pointer;" onclick="parent.frames['frame_a'].document.forms('myform').elements('txt').value='文字列';">文字列</span></div> </body></html>
>>738 trueで逆になるだろ?Area3クリックしたときに1,2,3の順。
IE使ってるんじゃない? とりあえずライブラリ使うのやめてみるといい
<meta http-equiv="refresh" content="60" />
うそつけ
javascriptのソースを保護することってやっぱ難しいんだな
>>742 それが逆にならないのです
自分も、trueで解決するものだと思って変えてみたのですが、変わらず、自分のキャプチャーの考え方が間違っていたのかと思い質問させて頂きました
>>743 FireFoxを使っています
ieの場合を考えないといけないのが非常にわずらわしい・・
>>748 prototype-1.5.1.2.js でやってみて
>>750 アレッ?
出来ました・・・
何でver1.6では出来ないのに、ver1.5では出来たのでしょうか???
何かバージョンアップして変わったのでしょうか???
<script type="text/javascript"><!-- Event.observe(window, "load", function(){ var total = 0; (10).times(function(value){ total = total + value; }); $("test").innerHTML = total; }, false); // --></script> 結果、45が表示されるのですが、この関数はどういう事なのでしょうか? valueは処理の回数にでもなっているのでしょうか? ちょっと混乱しています、お助けを
753 :
740 :2009/08/31(月) 14:39:12 ID:???
申し訳御座いません。記述が間違っていたみたいで、自己解決しました まずframe要素のname属性を、a要素などに指定するname属性と混同してid属性にしてしまっていました name属性に修正後、onclick属性値の( )となっている部分を[ ]に替えることで、無事Firefoxで機能しました 大変失礼致しました
754 :
Name_Not_Found :2009/08/31(月) 14:46:12 ID:gRrSq2Z+
>>752 0+1+2+3+4+5+6+7+8+9
>>754 この場合、valueは何を意味しているのでしょうか?
例えば、
for(var i=0; i<10; i++){}
のような形だと変数i が数字だとすぐに分かるのですが、times()には現在繰り返されている値が渡されるという事らしいのですが、
そもそもこの上記のコードの場合、渡されている値というもの自体が自分には分かりません
0 : 0 + value
1 : value + value
で、いったいどこでvalueが数字の0から始まるよう指定されているのでしょうか?
ライブラリの質問なら使ってるライブラリの名前とバージョンぐらい書いたらどうだ >いったいどこでvalueが数字の0から始まるよう指定されているのでしょうか? timesの関数を読め
757 :
Name_Not_Found :2009/08/31(月) 15:02:34 ID:xbe+ENJQ
>>754 0+1+2+3+4+5+6+7+8+9 これって45ですよね。
今すごいこと発見しちゃいました。
>>756 ごめんなさい、prototype.jsでした
バージョンは1.5以降です
う〜ん、関数のどこを読めばいいのでしょうか?
感覚的には結果は分かるのですが、実際何が起こっているのかという所までは理解できないでいます
ネットでtimes()の事も良く調べたのですが、良く分かりませんでした
>>758 times: function(iterator) {
$R(0, this, true).each(iterator);
return this;
}
$Rで0からthisまでのObjectRangeを作ってる
760 :
Name_Not_Found :2009/08/31(月) 15:21:36 ID:gRrSq2Z+
>>758 件のtimesもそうだし、JQueryのeachとか、
動作内容をコールバック渡しするタイプのループ関数は大抵、
その周回のインデックスが引数としてコールバックに渡されるもんなんだぜ。
じゃないと使い物にならないだろう。
>>758 今回はあんまり関係ないけど、二度手間になることがあるから
「以降」とか「最新版」とかではなく正確なバージョン書いてくれ
times: function(iterator, context) {
$R(0, this, true).each(iterator, context);
return this;
},
思いっきり0って書いてあるじゃん
$R()がどんなものかは自分で調べてくれ
もしかしてNumber.prototype.timesではなくString.prototype.times見てたりしないか?
>>759-761 まことにもうしわけありませんでした
理解できました
また、こういう場合、ググってばっかだったのですが、prototype.jsの中身自体を調べた方がいいのですね
そういう事は一度もしていませんでした
お答え頂きありがとうございました
なぁ、俺に彼女が出来る関数を誰か作ってくれよ!
>>763 これでいい?
function kanojo(){
return false;
}
そこはreturn nullで
いやいやそこはreturn TDN;ですよ
つ addEventListener(Event.KISEKI, mkGirlfriend);
あ、すまんJSのスレだった; ore.addEventListener( 'kiseki', mkGirlfriend, false);
769 :
Name_Not_Found :2009/08/31(月) 23:54:16 ID:9xLj5Ma2
if (kanojo != 3d) throw new Error("まて、それは妄想だ") 上のようにErrorを投げた場合、firebugで エラー: uncaught exception: undefined となるのですが、try catchを書かずErrorを投げる方法はどうやれば良いのでしょうか?
変数名や関数名に複数の英単語を使うとき、 先頭の単語だけ頭文字を小文字にする文化、 例えば iWasGay() みたいな。 あの慣習は一体なんですか?キモいです。どういう理由があるんですか?偏狭なナショナリズムですか?
>>769 エラー投げてるんだから
uncaught exception:
が出るのは正常
<img src="blue.gif" onmouseover="this.src='red.gif'"> これを外部ファイルtest.jsでprototypeで動かすにはどうしたらよいでしょうか。 一応自分でやったのは、 【test.html】 <img src="blue.gif" id="c_img"> 【test.js】 var modelImg_change = function(){ } modelImg_change.prototype ={ chTest: function(){ alert("ok"); this.src="red.gif"; }, addTest: function(elem, eventType, func, cap){ btn = document.getElementById("c_img"); btn.addEventListener('mouseover', this.chTest, false); } }; var mmc = new modelImg_change(); mmc.addTest("", "", "", false); ↑引数指定してもうまく受け取ってくれなかったのでaddTest("", "", "", false)にして、 とりあえずテストのために関数の中で直接値を放り込んだのですが alertしてみたのですが、chTestを実行してくれませんでした。(addTestは実行できました。) (prototypeではなく、普通にfunctionを何個か作ってaddEventListenerする方法だと成功しました。) よろしくお願いします
775 :
774 :2009/09/01(火) 05:12:53 ID:???
windowでloadするの忘れていたので、loadして さらにthis.chTestをmmcにしたらできました。
js初心者です。 変数の前に何か記号が欲しいです・・ #abcとか$abcとかなんでもいいです 見失いそうになります・・
着色できるエディタ使え
>>777 コーディングルール自分で決めて好きに付けたらいい
>>779 >>776 はつっこんでくれたけどスルーされた原因考えろよ
ローワーキャメルケース自体の話をしてるのかよくわからんし、そもそもスレチ
ソースの改行を置換で消して一行にするとエラーになります。なぜでしょう?
>>782 サンプルコードください。セミコロンなかったり、スペースまで消しちゃって意味変わったりしてない?
コメントアウトってオチじゃねぇだろうな
すみません、script.aculo.usのSound.play()とTransform.play()の.play()というメソッドの事調べているのですが出てきません コレはいったい何なのでしょうか? prototype.jsに組み込まれている関数なのでしょうか? 感覚的には簡単に分かるのですが、どこから来たのかが分からなくて
>>785 だからソース読めっての
sound.js
effects.js
ここで質問しておけば自分で考えなくても回答されることを学びました
質問です。 Selectメニューでvalueの値を複数種類セットで指定したい時はどうすればいいですか? <OPTION value1="0",value2="3">0と3</OPTION> のようなことがしたいのですが・・
ねぇ、やっぱ皆自分達で関数作って、script.aculo.usなんかのようなコード作れるんですか? 基礎を習得してから数ヶ月なんですが、未だに自分でとなると難しいのは出来ないです やっぱ色んなソースを見て自分で作っていって勉強されたのでしょうか?
仕事でやれば嫌でも覚える
>>790 指定できるvalueは1つだけだから、0と3を "0,3" みたいに
くっつけた文字列を指定して自分で分離して好きな方を取り出す。
または、valueには0から始まる連番を指定してvalue1やvalue2の
値は内部で持っておき連番に対応させて取り出す。何がやりたいか
に応じて適切な方法を選ぶべき。
visualEffect()って何ですかね? 何かライブラリに入ってるんでしょうか? 一応自分でソースや書籍で調べてみても出てきませんでした それに、ググっても出てこないのですが 例えばこの様に使われています $("sTrack").visualEffect("Appear", { to:0.5, duration : 0.1 }); 誰か教えていただければと思います
>>794 それはどこで見たんだよw
その呼び出しの前にあるライブラリに入ってるものでしょ
794です あぁ、effect.jsに入ってました
おならが臭いと大腸癌のおそれ有りだってよ お前らやばいな!
https絡むならセキュリティ的に試してみないとわからんけど location.hrefいじればできるんじゃないの? 自分で作る気ないならスレチ
800 :
Name_Not_Found :2009/09/01(火) 18:34:07 ID:FioYiHFw
>>798 普通にlocation.hrefをreplaceしたものに入れ替えればok
ウェブ開発で、ローカル/テスト/本番の切り替え用によく使う。
その話はもう終わったよ
idは、参照できないんですか?
>>803 document.getElementById(id)
【.html側】 <input type="text" name="txtA" id="txtA"> 【.js側】 onload = init function init(){ $("txtA").onfocus = function (){Focus(this);} } function Focus(obj){ obj.style.backgroundColor = "#ffff00"; } この場合のFocusの値、objは何の役割がありますか?
ひきすう
どうもです。 thisじゃ駄目なんでしょうか?
thisは予約語
何が疑問なのかまったく分からねえ
>>810 独学だから仕組みを理解したい
ってあたりじゃないか?
prototype.js勉強できる良いサイトおしえて ぐぐったらいっぱいでてきてどれみていいかわからんくなった
どれでも一緒
>>813 厳密には、どれでも一緒ってことはないと思います。
>>814 やはり一般的には、自国の言語で勉強したほうが
一番理解し易いのではないでしょうか。
一度、日本語で解釈されたサイトをご覧になってはいかかでしょう。
$一文字の関数が許されるんだから$から始まる変数名も 普通に考えたら許される気がする。
おい、prototype.jsなにこれ・・ 便利すぎるだろ・・ 今までのコードが半分になった・・
127KBもあんのか
objが、どういう時に使うかって事?
>>805 「objは何の役割」の質問の意味がよくわからないけど、それを作った人が
・Focus関数はstyleを変更したい要素のDOMオブジェクトを引数に取る
と決めてあるので、この場合は無名関数を使って引数thisをFocusに渡せばうまくいく
くらいの理解でいいんじゃないかね。
onload = initみたいに$("txtA").onfocus = Focusとして、
Focusの中でイベントのtargetかsrcElementでobjを取得する方法もあるからthisがどうのとか考えなくていい気がする
$("txtA").onfocus = Focus;
function Focus(evt){
var obj = (evt) ? evt.target : event.srcElement;
obj.style.backgroundColor = "#ffff00";
}
prototype.jsがまた流行ってきてるの?それかどこかで取り上げられた? イメージとしてはもう枯れてきたものな感じなのに最近prototype.jsの話題が多すぎる気がする あと、質問のレベルはどうでもいいけど、質問者の質問の意味がわからないのが多い
>>805 ,808
何故 this ではなく obj なのか、不満なら書き換えまくって試せ。
function Focus(obj){}、Focus が関数名、obj が変数名。
obj にはこの関数の呼び出し元の引数、呼び出し元の this が格納される。
このときの this は呼び出し元のオブジェクト。
this は予約語であり
http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/7_Lexical_Conventions.html#section-7.5.1 > 次のトークンは ECMAScript キーワードであり、 ECMAScript プログラム中で識別子に使うことはできない。
変数名や関数名として使うことはできない。
//元コード
function init(){ $("txtA").onfocus = function (){Focus(this);} }
function Focus(obj){ alert(obj); //→何がalertされるのか確認
obj.style.backgroundColor = "#ffff00";}
//変数名をthisに
function init(){ $("txtA").onfocus = function (){Focus(this);} }
function Focus(this){ alert(this); //→何がalertされるのか確認
this.style.backgroundColor = "#ffff00";}
//定義時変数名を空に
function init(){ $("txtA").onfocus = function (){Focus(this);} }
function Focus(){ alert(this); //→何がalertされるのか確認
this.style.backgroundColor = "#ffff00";}
呼び出し元 function (){Focus(this);} も書き換えて試せ。
823 :
Name_Not_Found :2009/09/02(水) 12:05:29 ID:8OBjdakU
>>816 PHPと平行開発していた時に、普通に$_GETとかいう変数作ったりした。
俺頭いい(キリッ)とか思ってたけど、普通に混乱してやめた。
>>821 枯れてきた・・・ってじゃぁ今はライブラリは何がいいの?
826 :
821 :2009/09/02(水) 13:13:56 ID:???
誰もが知ってるから話題性に欠ける
828 :
Name_Not_Found :2009/09/02(水) 19:52:05 ID:G5mS7NTD
各ブラウザ提供先のJavaScriptリファレンスってIEのMSDN LibraryとFxのMDC以外に Opera、safari、chromeからは出てないんですか?
830 :
790 :2009/09/02(水) 22:23:23 ID:???
>>793 ありがとうございます。後半のやり方ですが、
value0="0" value1="3"
value 0="0" value 2="3"
value.0="0" value.3="3"
といろいろ試しましたがうまくいきません。
具体的な書式を教えていただけないでしょうか。
何がやりたいのか分からんが、 option要素.setAttribute("value0","0") じゃダメなの?
勝手にHTMLの文法を変えるなよ value="value1=1,value2=2"とかにしてsplitやmatchで取り出せってことだろ
なにそのきめえコード
834 :
790 :2009/09/02(水) 23:51:12 ID:???
できましたーありがとうございます!
835 :
Name_Not_Found :2009/09/03(木) 06:31:43 ID:M4DdH0ys
ブラウザを閉じる際に確認alertを出したいのですが、どうすればいいでしょうか? onbeforeunload()がそれに近いのですが、ページ移動やPOSTの時は表示させたくありません。 純粋に閉じる時だけ確認を必要としています。 どうかお知恵をおかしください
無理
IEならActiveX使えば可能だったような
onclick(もしくはonsubmit) -> onbeforeunloadの順に発生するとしたらonclick(もしくはonsubmit)でなにかしたらいいんじゃないかな
単にあるdiv要素内でのマウスの座標を取得したいだけなのに なんでこんな処理がめんどくさいんだ
なぁ、最近JavaScriptで目新しいものって無いの?
俺今PHPの勉強してるんだけど、駄目だコレ どうもJavaScriptから習得した自分には面白くない それに、変数をvarで宣言するのが身体に染み付いているので、$で宣言ってのがまた・・・ prototype.jsとも違うし PHPってあんま面白くないね 俺はJavaScriptの方が遥かに楽しいと思うよ Cなんかは勉強した事無いんだけど、やっぱCにはPHPの方が近いのかな?
つーかJavaScriptが比較的異端な部類 JavaScriptの特徴的な部分を揃えてるのって、類似用途のLuaぐらいしか思いつかない 言語の総合的な評価、特に「楽しい」なんてものは人それぞれだからいろいろやってみれ ちなみにprototype.jsはRubyを模したものという印象 Railsに同梱なのは、卵が先か鶏が先かどうか知らないけど
楽しいっていうか、PHPはだれでも簡単に覚えられるようにしたスクリプト言語なのでは
844 :
Name_Not_Found :2009/09/03(木) 11:48:49 ID:B+4knO73
colorというユーザー関数を定義して使うとError: color is not a functionというエラーが起きます これをcolor1とかcoloraと名前を変えると正常でした colorは予約語なんでしょうか?
んなこたーない エラーを再現できる最小のコード作ってみてくれ それができなきゃ自分のコードが悪い
846 :
Name_Not_Found :2009/09/03(木) 11:56:43 ID:B+4knO73
解決してよかったね 次からは書きこむ前にググろうか
なぁ、本音言うとIE6が憎いんだろ?
>>846 Mozilla 1.0.0って・・・ブラウザなに使ってるの?
Fx3.5じゃ再現しないんだけど
getElementsByTagName には、$() みたいな奴は用意されてないの。
$$
853 :
Name_Not_Found :2009/09/03(木) 13:41:38 ID:ecpHy9yC
>>844 エラーは起きませんでしたよ。
同空間内に同名の変数がないか確認を。
854 :
Name_Not_Found :2009/09/03(木) 13:45:21 ID:ecpHy9yC
>>841 PHPで何がしたいの?ってか何したの?
皆さん、OSはWindows、Linuxどっちですか?
以下、マカー出入り禁止
858 :
Name_Not_Found :2009/09/03(木) 16:46:42 ID:fWpUouD6
Macは、windowsの値上げを防ぐ為のかませ。
Macはハードが高すぎるからだめだな
Macのハードルが高いとか
862 :
Name_Not_Found :2009/09/03(木) 18:52:01 ID:fWpUouD6
フォトショとイラレとオヒスが動いて、 使いやすいデスクトップ環境があるunixっつーことで、 愛用しとります…
Macは他社製PCと同性能でも価格が2倍高いからな ボッタクリもいいところだぜ・・・ OSとハードのセット販売じゃないとMSに対抗できないのがなんとも悲しい
>>844 Firefoxでname = {}でオブジェクトを代入した結果エラーだったもの
break = unlabeled break must be inside loop or switch
case = syntax error
catch = catch without try
const = missing variable name
continue = continue must be inside loop
debugger = missing ; before statement
default = invalid default XML namespace
delete = syntax error
do = syntax error
else = syntax error
false = invalid assignment left-hand side
finally = finally without try
for = missing ( after for
function = syntax error
if = missing ( before condition
switch = missing ( before switch expression
this = invalid assignment left-hand side
throw = syntax error
true = invalid assignment left-hand side
try = missing { before try block
typeof = syntax error
以下略
undefinedには代入できるワナ
> たまたま未定義 未定義じゃないよー undefinedはグローバル変数として定義されてる。その変数の初期値が未定義値なだけでw
JavaScriptだけじゃないじゃん。 CanvasあってのJSじゃん。 勘違いするな!!
さっそく既出厨きました
jsonで、 a = {"test1":"a1","test2":"a2"}; の(a1やa2ではなく)test1やtest2の文字を取り出したいんですけど どうすればよいでしょうか。
876 :
Name_Not_Found :2009/09/04(金) 15:49:13 ID:cp0cAsgZ
>>875 for(var i in a) alert(i);
こんなかんじで。
addEventListenerっていつから登場しました? 昔自分でfunction作ってた気がしますが 昔からネイティブで実装されてたのでしょうか?
ちょっと HTML を書くことになって、スレを通りすがりなんだが・・・
JavaScript はハンパなオブジェクト指向だと思っていたんだけど、
様子が変わっているのか。
>>878 >addEventListenerっていつから登場しました?
なにそれ。
Java 1.0 以降の Delegation Event Model かよ。
>>872 処理をJavaScriptで書くということはJavaScriptプログラムということなんだよ
>ハンパなオブジェクト指向 俺もお前も見る目がなかっただけ 2000年から言語仕様はほとんど変わってない DOMやDOM Eventも2000年には発表されてる とはいえ、2000年代初頭は90年代終わりのブラウザ戦争のせいで JavaScriptは焼け野原にしか見えなかったから仕方ないと言えば仕方ない・・・
DOMは言語仕様じゃなくてライブラリの仕様だけどな
>>879 addEventListenerは引数でハンドラ関数だけじゃなくてリスナオブジェクトも渡すことができる
その辺はJavaとかそういう関数オブジェクトの存在しない言語を想定しているんだろうね
883 :
879 :2009/09/04(金) 21:06:30 ID:???
てゆーか、名前空間はどうなった?
>>882 ライブラリがオブジェクト指向じゃないとOOPに見えない人もいるだろうと思ったから挙げた
Javaだって言語仕様よりも標準ライブラリのほうが目に付くし
現実問題としてモダンJavaScriptを学ぶ上ではDOMは切り離せない存在だろう
>>883 スコープに関しては静的スコープぐらいなもんで基本的に寛容
まあスクリプト言語だし、Javaなんかのようなお役所的な言語思想ではなくもっとルーズ
885 :
879 :2009/09/04(金) 21:32:38 ID:???
ググったら、namespace.js とか見つけた
ttp://d.hatena.ne.jp/nully/20090302 // include com/example/RemoteClass.js
Namespace.include('com.example.RemoteClass');
var obj3 = new com.example.RemoteClass();
これイイじゃね
E4XのNamespaceとバッティングする
<a>に対してのclick()メソッドってない?
aEventTarget#dispatchEvent(aEvent)
Gecko でイベントオブジェクトに設定される isTrusted をクロスブラウザで使いたいんだけど なんとか見わける方法ないかな
890 :
Name_Not_Found :2009/09/05(土) 03:43:51 ID:3YiyMv6U
htmlstring += "<script language='JavaScript' type='text/javascript'>\n"; htmlstring += "<!--\n"; htmlstring += "//-->\n"; htmlstring += "</script>\n"; すみません この記述って間違ってますか? 動かなくて困ってます
>>890 その部分だけ見れば間違ってる
htmlstring = "";
htmlstring += "<script language='JavaScript' type='text/javascript'>\n";
htmlstring += "<!--\n";
htmlstring += "//-->\n";
htmlstring += "</script>\n";
element.innerHTML = htmlstring;
だったとしても、innerHTMLに<script>書いても動かないのは仕様
createElementでおk
892 :
Name_Not_Found :2009/09/05(土) 04:16:51 ID:3YiyMv6U
>>891 ありがとうございます
createElementですか
ググッテ見ましたが難しそうですね
893 :
Name_Not_Found :2009/09/05(土) 04:40:04 ID:3YiyMv6U
defer属性ってのは関係あるんですかねやっちゃいけないっぽい感じのコードっぽいですが ググッテるんですがcreateElementでの記述方法がわかりません
894 :
Name_Not_Found :2009/09/05(土) 04:49:41 ID:H9ujyZJA
mixiアプリでユーザー情報を取得するクラスを作成したいのですが、 UserData.prototype={ type : "UserData Object", nickname : "名無し", id : null, getUserInfo : function(IdSpec){ var req = opensocial.newDataRequest(); req.add(req.newFetchPersonRequest(IdSpec), "user"); req.send(function(data) { var item = data.get("user"); var user = item.getData();//ここまではエラーはありませんでした this.nickname = user.getDisplayName();//うまくthis.nicknameを参照できない this.id = user.getId();// }); } }; このようにしても、メソッドの中でコールバック関数を呼び出す部分があり、その中でthisを使ってプロパティにアクセスできなくて困っています。どなたかよろしくお願いします。
非ユーザー定義オブジェクトでnewしなきゃいけないのってDateだけ?
空白ノードがブラウザで挙動違うのがうざいな
initメソッドってJavaのメインメソッド(public static void main(String[] args){})のようなものでしょうか?
スクリプトが動いているのにコメントアウトまでdocument.writeする男の人って・・
899 :
897 :2009/09/05(土) 07:00:05 ID:???
よくよく考えてみたら初期化ということはコンストラクタのようなものですかね
public static void mainに対応するのはあえて言うなら
window.onloadとかjQuery(document).readyかと
>>894 たぶんthisが期待してるものと違うはず
期待するthisがとれるところで、
var self = this;
とか書いておいて、そこではself.nicknameとかする
>>894 thisの代わりにUserData.prototype
ふと疑問に思ったんだけど、1次元配列の中に何個要素が入ってるかって どうやって調べればいい?lengthでやてたんだけどこれでいいのか不安になってきた。
903 :
Name_Not_Found :2009/09/05(土) 09:55:50 ID:bLL6/xF0
var ary = []; ary[10] = "hoge"; alert(ary.length); //11 このalertで1と出したいんであれば、配列の中身を全部チェックしてundefinedでないものを数えるしかない
ary = [0,1,2]; // = { 0:0 , 1:1 , 2:2 , length:3 } ary.length = 5; // = { 0:0 , 1:1 , 2:2 , 3:undefined , 4:undefined , length:5 } ary.length = 1: // = { 0:0 , length:1 } ふしぎ!
900超えたので、テンプレ論議があれば今どうぞ。
JSONってジェイソンでいいの?(赤面しながら
よく使うデータフォーマット(JSONとか)とかの紹介もテンプレに入れてほしいです
三項演算子ってifでいいんじゃないの?・・ なんであるの・・
可読性を悪くするため 難解=良 と勘違いしている人はいっぱいいる
915 :
894 :2009/09/05(土) 12:39:24 ID:H9ujyZJA
>>900 ,901
それでプロパティにはアクセスできましたが、書き換えても呼び出しもとに反映されなません。
ブロックの外で、
var self = this;
getUserInfoメソッドの中を
self.nickname = user.getDisplayName();
となおしました。
これで、
usr = new UserData();
usr.getUserInfo(opensocial.IdSpec.PersonId.OWNER);
alert(usr.nickname);
としても「名無し」と出てしまいます。
iepngfixというスクリプトを使ってるサイトがあるのですが 最近になってスクリプトが上手く働かなくなりました。 画像が表示されないマーク(×)が出た裏に画像が表示されている状態になります。 スクリプトの製作者のサイトはリンク切れで、どういうことなのかさっぱり分からず困っています。 ソース内にblank.gifというファイルのURLが書かれてるのですがこれもリンク切れで、このせいかとも思ってるのですが… とにかくとっかかりが掴めずどうしていいかわかりません。 どなたか検索のヒントだけでも教えていただけないでしょうか。
>>915 >var self = this;
これはgetUserInfoの中で宣言するんだお
919 :
Name_Not_Found :2009/09/05(土) 17:19:11 ID:TC8NxZAn
ttp://loadinfo.net/ このサイトでgifをダウンロードできるのですが
自分の好きな色と背景色を選ぶことが可能です
こんなことはスクリプトで可能でしょうか?
どのようなプログラムを作るとできるのでしょうか?
JavaScriptでやるのは難しいが 16進数でGIFのデータを生成 -> base64でエンコード -> dataURLスキーム形式で読み込み で出来ると思う
<hoge:fuga>というタグのXMLをパースしたくて、jqueryのfindメソッドを使っています。 しかし、ダブルコロンが曲者で (xml).find("hoge\\:fuga").each( function(){ なんらかの処理 } という風に、\マークによるエスケープでIE,Firefoxでは目的が達成できたのですが Operaで上手くパースすることができません。(\なしの記述も試しましたがだめでした。) ダブルコロンの処理方法について知っている方がいれば、教えていただけるとありがたいです。
iframe で読み込んだリンクを制御することってできるのでしょうか? 具体的にいうと、iframe内で読み込んだ外部ページのリンクがクリックされた場合、 リンク先URLの一部を書き換えてジャンプさせる…ということをしたいのです。 そのようなことはできるのでしょうか…?
なにそれこわい
>>918 ありがとうございます
どうも元になったものはそれみたいなんですが、うちにあるのはソース見ると作った人の名前が日本人なんです。
ただ原理は一緒ぽい?それを参考にして作った?みたいなのでちょっと色々やってみます。
ありがとうございます。
>>922 jsでやろうとすると、iframeで読み込んだリンクが同一ドメインの必要がある
アドバイスありがとうございます!
>>926 同一ドメインの場合、やる方法があるのですね!
よろしければヒントをいただけないでしょうか。
>>927 やってみろよ
ここは"やり方を教える"スレじゃないよ
929 :
Name_Not_Found :2009/09/05(土) 19:52:35 ID:06CVr2gZ
null、true、falseは予約語ではなくリテラルというのでしょうか?
予約語=リテラル?
932 :
Name_Not_Found :2009/09/05(土) 20:03:40 ID:06CVr2gZ
933 :
Name_Not_Found :2009/09/05(土) 20:09:13 ID:06CVr2gZ
char型とか何年経っても実装されないとおもう
>>931 予約語≠リテラルだけど予約語かつリテラル
>>933 厳密にはダメだし無理に使う理由もない
使えるのは場当たり的な独自拡張だと思っておけばいいんじゃない?
>>934 JavaScript 2.0をdisってんのか
>>928 やり方が全然想像つかないので、ヒントだけでもいただけないでしょうか?><
939 :
921 :2009/09/05(土) 22:28:23 ID:???
自己解決しました。ありがとうございました。
このスレ感じ悪いな
>>916 です。
>>918 のサイトより、blank.gifを貰って来て自サーバにアップして、
スクリプトのソース中のリンクを自サーバのgifにすることで解決しました。
今まで知らなかったこととは言え、他人のサーバに直リンしてたようで、申し訳ない…。
取り急ぎ報告&改めて
>>918 に感謝。ありがとうございました。
今までクライアント側の情報を横流ししていたわけだな
>>920 ありがとうございます
javaスクリプトしか知らない自分にはちんぷんかんぷんですが
勉強する道をみつけました
945 :
Name_Not_Found :2009/09/06(日) 05:35:07 ID:FE6pRMVX
初歩的な質問ですみません。 よくライブラリコードやサンプルコードを見ていると$で始めているところがありますが、これは何を指しているのでしょうか。 またコメントの中で@paramとなっているのも散見しますがこれもどういう意味を持っているのでしょうか。
>>945 $は、目立つから。
@は、インスタンスメソッドのつもり。
XP上のIE8とIETESTER6、7の現象ですが、 スタイルでboldをかけている英数字に jQueryのfadeToを使用するとフォントが汚くなるのですが、 これは仕様ですか? /*-------------------- javascript --------------------*/ $("#execute").toggle( function(){ $("#jqTest").fadeTo("slow", 0); }, function(){ $("#jqTest").fadeTo("slow", 1); } ); /*-------------------- HTML --------------------*/ <input type="button" value="fadeTo" id="execute" /> <div id="jqTest"> <p style="color:#666; font-weight:bold;">あいうえお<br />ABCDE<br />01234</p> </div>
>>945 $付きは動作が変わるといった特殊な効果はない
ライブラリ読み込み元と競合しにくくする狙いもあるんじゃないかと思う
後者はJSDoc形式のドキュメント
>>946 JavaDocも知らんのかw
たまに、vart test = {name:"名前",old:"年齢"};というような記述を オブジェクトとしてみることがあるのですが、これはジェイソンなのでしょうか? ジェイソンだとnameもoldもクォーテーションで囲まないといけなかった?はずなのですが。
ただのObjectリテラル JSONはObjectリテラルとしても解釈できる文字列
JavaScriptはbreak 2;のようなことはできますでしょうか? ラベル指定のみですかね?
>>950 なるほど文字列、わかりました。ありがとうございます。
>>951 言語仕様を読めば分かることだけど、ラベル指定のみですね。
訪れた覚えの無いサイトも表示されてる
>>956 ありがとうございます。取れてしまうんですね。
次スレは975越えたら。MSDNは直すとして、データフォーマット の紹介はどうする?何を入れるかとか議論してないので持ち越しかな。
>>945 ECMA262-3では、$は機械生成コードであることを意味する
テンプレートから動的生成とかドキュメント生成など
だがこの規約を守っているライブラリはほとんどないので
ECMAScript5でこの規約は削除された
よし!
slice,substring,substrメソッドの違いがわからん
負数指定で比較してみれ。 IE6はどれか対応してない。
substrは非公式だから忘れていい substringは負数が扱えない代わりに、引数の大小を問わない alert("JavaScript".slice(0,-6)); // "Java" alert("JavaScript".substring(0,-6)); // "" alert("JavaScript".slice(4,0)); // "" alert("JavaScript".substring(4,0)); // "Java"
964 :
Name_Not_Found :2009/09/07(月) 16:06:34 ID:pNchJXM4
>>963 >substrは非公式だから忘れていい
substrが非公式だってことはよく忘れるw
どちらも意外と遅いんだよなぁ ループするならexecでpushした方が良いんじゃねーかってくらいに。
iFrameのスクロール情報って親ページからは取得できないんですか? イメージとしては<iframe onscroll="***">みたいのを実現したいのですが。
967 :
Name_Not_Found :2009/09/08(火) 01:28:12 ID:3eviFrTF
>>963 >substrは非公式だから忘れていい
substrは非公式だが忘れられない
非同期処理を同期させる方法を調べていたら、以下の様なコードを見つけたのですが、 (たぶんshindigのコードだと思います。) callAsyncAndJoin=function(funcs, cont, opt_this) { var pending = funcs.length; var results = []; for (var i = 0; i < funcs.length; i++) { var wrapper = function(index) { funcs[index].call(opt_this, function(result) { results[index] = result; if (--pending === 0) cont(results); }); }; wrapper(i); } }; funcsに同期させたい関数の配列を代入すると処理完了時にcontを実行するというようなことが説明に書いてありました。 しかしこれを使おうとしても、firebugで funcs[index].call is not a function と言われてしまいます。どなたか使い方が分かる人もしくは非同期処理をうまいこと同期処理っぽくする方法がありましたら教えてください。
>>968 エラー通りfuncsの中身がおかしいんだと思うけど
funcsの由来(callAsyncAndJoin呼び出ししてる部分等)がないからわからん
firebugでfuncsをウォッチしてみたら?
970 :
Name_Not_Found :2009/09/08(火) 04:13:58 ID:21pQrGfX
>>969 ありがとうございます。
初心者なものでJSのfunctionの使い方があんまりよく分かってないんですけど、
funcs[index].call()というのは、引数で与えた関数を順番に実行してる部分ですかね?
そうすると、.call()というのはメソッドになるのかな?ということは、引数として要求するfuncには特別な仕様が求められているんでしょうか。
firebugで監視しながらもうちょっと弄ってみます。
★index.html <script src="js/prototype.js" type="text/javascript"></script> <script src="js/index.js" type="text/javascript"></script> <h2 id="content_swf">ここに出したい</h2> ★indez.js onload = init; function init() { swfLoad(); } function swfLoad(){ $("content_swf").innerHTML = '<img src="../images/top_image01.jpg">'; } index.htmlが読み込まれた時に指定の場所にタグを書き出したいんですが 上手くいきません。良い方法はありますか。
972 :
971 :2009/09/08(火) 05:52:25 ID:???
★indez.js → ★index.js です。
コンストラクタ関数はおいといて、 関数ってmath関数だけ? ほとんどメソッドとプロパティ形式で呼び出すのかな。
974 :
Name_Not_Found :2009/09/08(火) 07:42:34 ID:21pQrGfX
>>971 別にそれでうまく読み込めるけど
prototype.jsのパス、画像のパスが間違ってないか確認したら?
975 :
Name_Not_Found :2009/09/08(火) 09:35:07 ID:Qhjga5vA
無視
976 :
Name_Not_Found :2009/09/08(火) 12:28:16 ID:QElxcOuO
substrみたいに非公式のものをまとめたサイトってありませんか?
当たり前に使っているwindowさえ非公式じゃなかったっけ? HTML5が確定すればだいぶマシになるんだろうけど。
Canvasってこれからも進化していくのか、 新しい規格が誕生してしまうのか微妙なところだな
prototype.jsとか使っていて、CSS上のidが複数あっても内容書き換え(innerHTML)とかでちゃんと動くけど。 やっぱりCSSのidが同じものが複数あるのはまずい? もちろんCSS的にまずいことは分かってるけど、楽ちん出来るんだよね・・。
>>970 functionは全てFunctionオブジェクトのインスタンスで
Function.prototype.callが存在するから、なにもしなくてもcallはある
つーかそのぐらいは単純な例を書いて試しせばいいんだよ
var x = [ function () { alert("foo"); } ];
x[1] = function () { alert("bar"); };
function baz() { alert("baz"); }
x[2] = baz;
for (var i = 0, l = x.length; i < l; i++) { x[i].call(); }
だから呼び出し側の凡ミスだろうけど晒してくれないんじゃわからん
>>973 コンストラクタのプロパティ(クラスベースでいうクラスメソッド)は
StringやらDateやらにもある
>メソッドとプロパティ形式で呼び出す
グローバルは全てグローバルオブジェクトに格納されるから
厳密には、いわゆる「関数」は存在しない(例えばalertもwindow.alertの省略形)
せいぜいローカル変数にいれたfunctionぐらい
>>976 標準であるECMAやDOMを調べた方が早い
>>979 HTML的にダメ、つーかスレチ
981 :
979 :2009/09/08(火) 17:56:09 ID:???
>>980 レスありがとう。
xhtml+css的に問題あるのは分かるけど、JS的にはどうなのかなぁと思って。
動けばいいってもんじゃねぇって答えは大体分かってるんだけどねw
HTMLのidはIdentificationの略だから Identification ━━ n. 同一であるとすること, 同一性の確認; (死体, 罪人などの)身元確認; 身分証明(となるもの); 識別; 一体化, 同一化 ((with)).
>>981 それは無知初心者が書いたページ用の、ブラウザによる寛容動作だろ
>>981 既に存在していると上書きされるから最後に読み込まれたものが選択されるんじゃないかな
HTMLでダメならそれに基づいたDOMもダメで、DOMを使ってアクセスしてるJSもダメ XHTMLとは違ってHTMLは緩いからエラーでないだろうけど どの要素を受け取れるかすら保証はされない 実装の都合で、どうやってアクセスしても最初の要素しか出てこないとか アクセスするたびに別の要素が出てくるといったことが起きても不思議はない
>>985 > XHTMLとは違ってHTMLは緩いからエラーでないだろうけど
JavaScript 側ではどっちでもエラーは出ないが
XHTML/HTML どちらでも Validator ではエラー
つまり
> HTMLでダメならそれに基づいたDOMもダメで、DOMを使ってアクセスしてるJSもダメ
に引っかかるからそもそもダメ
DOMとvalidatorは関係ない 木構築にDTD/Schemaが必要となればSGMLに逆戻り HTML5はエラー対策のために敢えて逆戻りしているが
validでないHTMLだとDOMツリーが定義できるかどうか 分からないじゃん。だから動作するとしても「たまたま」 「次のバージョンのブラウザではどうなるか分からない」 というしかないよね。
l50くらい取ってもいい気がします
>>982 うん、どう見てもそれは知った上で言ってるでしょ・・
window.onload=test(); みたいに、なんで()つけちゃいかんの?・・
>>993 ()を付けたらtest関数を実行した戻り値を代入することになるから
埋め
埋め
埋め
このスレは1000の風になりました
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。