+ JavaScript の質問用スレッド vol.53 +

このエントリーをはてなブックマークに追加
949Name_Not_Found:2007/01/18(木) 08:26:23 ID:???
>>948
コンストラクタにreturn this;が必要だったことは一度も
ないと思うな。その必要だったブラウザでそんなものが必要
だった理由は覚えてないのかね。調べたんだろ?
950Name_Not_Found:2007/01/18(木) 08:28:05 ID:???
新スレは975超えたら。テンプレの変更はなしで。
951908:2007/01/18(木) 08:49:57 ID:LPKiuw3v
>>949
数年前のことで、はっきりしたことは全然覚えてないんです。

他のサンプルでも、 return this; しているケースを
Web上でいくつか見かけているので気になっています。
952945:2007/01/18(木) 10:19:04 ID:???
>946
出社したのでsageるが許してや〜

書き方の違いかぁ…
その書き方は、完全にウェブデザイナーとプログラマーが別れてるところでよく見たなぁ
Smartyとかテンプレート使い始めたら、タグに直書きがうちの周りでは増えてきたんだが、どなんだろ。
↓一応こんなんで遷移するお〜

<html>
<head>
<title>test</title>
<script type="text/javascript">
function f_main_onsubmit()
{
alert("foo!bar!hoge!");
return false;
}
</script>
</head>
<body>
<form action="./" id="f_main" onsubmit="f_main_onsubmit()">
<input type="text" />
<input type="submit" />
<input type="button" />
</form>
</body>
</html>
953Name_Not_Found:2007/01/18(木) 11:11:41 ID:???
>>952
なにをグダグダ書いてるんだ。onsubmitの中からfalseを
returnしなければ遷移するに決まってるだろ。
... onsubmit="f_main_onsubmit(); return false"
または
... onsubmit="return f_main_onsubmit()"
どっちでも自分の好きな(理解できる)方を使えボケ!
954Name_Not_Found:2007/01/18(木) 13:10:27 ID:???
関数内じゃなくイベントハンドラ内でreturn false;が俺の好み
955Name_Not_Found:2007/01/18(木) 14:20:57 ID:???
今の若い者はそういう書き方をするのか、
わしの若い頃は・・・。
956Name_Not_Found:2007/01/18(木) 18:19:12 ID:???
リンクは
a=document.links
a[i].href
でhrefの値が順番に取得出来るじゃないですか
それと同じように
<embed src="〜" type="application/x-shockwave-flash" width="425" height="334" allowfullscreen="true">
のsrcを順番に取得する方法を教えて下さい
957Name_Not_Found:2007/01/18(木) 18:36:39 ID:???
>>956
a=document.getElementsByTagName("embed");
a[i].src;
958Name_Not_Found:2007/01/18(木) 18:46:06 ID:???
>>957
どもです

が、動かない…
ttp://jp.selfhtml.org/javascript/objekte/anzeige/embeds_src.htm

javascript:a=document.getElementsByTagName("embed");prompt("",a[0].src);
を実行したら「undefined」が返ってきたんですが、これって未対応ってやつですか?
ブラウザーはオペラ7.60携帯版です
959Name_Not_Found:2007/01/18(木) 19:21:12 ID:???
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>test</title>
<style type="text/css"><!--
div.ksk{ color: #ffffff; background-color: #0000ff; }
//--></style>
<script type="text/javascript"><!--
function test(){
var oDivDisp = document.getElementById( "disp" );
var oDivKsk = document.createElement( 'DIV' );
oDivKsk.setAttribute( 'CLASS', 'ksk' );
var oTxtKsk = document.createTextNode( 'あhoge' );
oDivKsk.appendChild( oTxtKsk );
oDivDisp.appendChild( oDivKsk );
}
//--></script>
</head><body onload="test()">
<div id="disp"></div>
</body></html>

こんな感じでDOMでclass属性つきのdivを書き出したのですが、
IEだとスタイルシートが適用されません。
これは仕様でしょうか。
960Name_Not_Found:2007/01/18(木) 20:14:28 ID:???
>>959
setAttribute()は使うなって。とくにIEで動かないものが沢山あるから。
oDivKsk.className = 'ksk';
全部こうやって直接プロパティに入れるようにすべし。わかった?
>>958
embedってそもそも標準外だしヘンなオブジェクトだったりするから
やってみて動かないなら駄目なんじゃない?と洩れは思っている。
961Name_Not_Found:2007/01/18(木) 20:17:16 ID:???
>>960
判りました。
classNameで指定したらちゃんと動きました。
どうもです。
962Name_Not_Found:2007/01/18(木) 20:25:48 ID:???
すいませんもう一つお願いします。
onclick属性はどうやって指定すればよいのでしょうか。
963Name_Not_Found:2007/01/18(木) 20:38:02 ID:???
ボンクラは隔離スレに行った方が良いでしょうね。
964Name_Not_Found:2007/01/18(木) 20:45:26 ID:???
>>962
さすがに怒るよ。過去スレ全集をonclickで検索すれば
嫌と言う程見つかるだろ。テンプレ読んでないな?
965Name_Not_Found:2007/01/18(木) 20:47:36 ID:???
いや、
oDivKsk.onclick = "javascript:window.close()";
とやって、このdivをクリックしてもopera以外では動かなかったんですよ。
966Name_Not_Found:2007/01/18(木) 20:47:57 ID:???
>>960
ブラウザーが外れだったみたいですねー
ありがとうごさいました
967Name_Not_Found:2007/01/18(木) 20:54:29 ID:???
<A HREF="〜"<B>あ</B>い</A>
を選択した状態で
javascript:void(prompt("",document.activeElement.firstChild.nodeValue))
を実行すると「い」が返ってきますが、「あい」と返すにはどうしたら良いのですか?javascript:void(prompt("アクティブなタグのHTML",document.activeElement.outerHTML))で正規表現使わないと無理ですかね?
968Name_Not_Found:2007/01/18(木) 21:04:28 ID:???
>>965
DOM-Events 歴史
 最初
   <input ... onclick="処理">
 NN3
   obj.onclick = myFunc
 NN4, IE4, Opera5-6
   obj.onclick = myAnonymousFunc
 IE5, Opera7
   obj.attachEvent('onclick', my(?:Anonymous)?Func)
 Opera7
   obj.addEventListener('click', my(?:Anonymous)?Func, useCapture)
 現在のEventTarget#addEventListener()
   obj.addEventListener('click', (?:my(?:Anonymous)?Func|myEventListener), useCapture)

DOM-(?:HTML|Core)
 IE
   obj.setAttribute('onclick', myFunc)
 標準
   obj.setAttribute('onclick', 'myFunc()')
969Name_Not_Found:2007/01/18(木) 21:21:46 ID:???
>>968
どうもです。この場合は関数として指定してやればうごくんですね。
970Name_Not_Found:2007/01/19(金) 00:11:03 ID:dCkTdJtE
DOM2,3 Eventsの
DOMFocusInとfocus、
DOMFocusOutとblur
DOMActivateとclickって何がどう違うんですか?
DOMActivateはマウスに限らず汎用的なもの?な気がしますが、
focusの方はさっぱりわかりません。
971Name_Not_Found:2007/01/19(金) 00:27:36 ID:???
The DOMFocusIn event occurs when an EventTarget receives focus, for instance via a pointing device being moved onto an element or by tabbing navigation to the element.
Unlike the HTML event focus, DOMFocusIn can be applied to any focusable EventTarget, not just FORM controls.

The DOMFocusOut event occurs when a EventTarget loses focus, for instance via a pointing device being moved out of an element or by tabbing navigation out of the element.
Unlike the HTML event blur, DOMFocusOut can be applied to any focusable EventTarget, not just FORM controls.

The activate event occurs when an element is activated, for instance, thru a mouse click or a keypress.
A numerical argument is provided to give an indication of the type of activation that occurs: 1 for a simple activation (e.g. a simple click or Enter), 2 for hyperactivation (for instance a double click or Shift Enter).
972Name_Not_Found:2007/01/19(金) 02:27:32 ID:yWkKYI6a
画像をsubmitボタンとして使っているのですが、二重送信防止のために1度クリックされたら再度クリックできないようにしたいと思っています。
buttonだったらonclickでdisableにすればよいと思いますが、画像リンクの場合はどのようにすればよいでしょうか?
973Name_Not_Found:2007/01/19(金) 02:54:18 ID:???
>>972
試したことはないけど
<input type="image" />
でdisable使える記憶があるお
974Name_Not_Found:2007/01/19(金) 02:56:52 ID:???
フラグ立てるなりなんなりすればいいじゃない
975Name_Not_Found:2007/01/19(金) 03:25:21 ID:???
>>967
なんか日本語おかしいな
書き直し

a=document.linksで
<A HREF="http://a">1<B>2</B>3<B>4</B>5</A>
から
1<B>2</B>3<B>4</B>5
又は
12345
を取得する方法を教えて下さい

a[i].firstChild.nodeValue
a[i].firstChild.innerHTML
a[i].firstChild.innerTEXT
a[i].firstChild.outerHTML
だと一部しか返ってこないんですよ
976Name_Not_Found:2007/01/19(金) 03:30:28 ID:???
>>975
上なら a[i].innerHTML
下はテキストノードをなめる必要があるな
977Name_Not_Found:2007/01/19(金) 03:38:58 ID:???
>>975
IEなら、a[i].innerText
W3Cなら、a[i].textContent
978Name_Not_Found:2007/01/19(金) 03:55:46 ID:???
>>976-977
a[i].innerTextで下の12345が返ってきました
ありがとう ありがとう
ありがとうごさいましたっ!
979Name_Not_Found:2007/01/19(金) 05:08:24 ID:RcD9bcpL
var x = {c:1, y:2, z:function(){alert('a')} };
s(x);
function s(c){
c.z();
setTimeout('s('+c+')', 100);
}

setTimeoutで引数にobjectを渡すとエラーコンソールに

missing ] after element list
s([object Object])

とでてエラーが出てしまうのですが何が悪いのでしょうか
980Name_Not_Found:2007/01/19(金) 05:12:50 ID:9l1/EnVu
htmlでjsの外部リンクを作りたいのですがオブジェクト指定をしてくださいとエラーが出てしまいます。
htmlで使っていた<!-- -->や<script></script>は削除してjsファイルに保存してあります。
htmlでは問題なく動作するのですがどうか原因を教えてください。
981Name_Not_Found:2007/01/19(金) 06:59:28 ID:???
>>979
よく考えてみろ。
's('+c+')'
の部分は文字列渡すところだろ。
cは文字列結合されて、
s([object Object])
になる。
つまり、
's(c)'
でおk
982Name_Not_Found:2007/01/19(金) 07:02:49 ID:???
>>979
>>981
おkじゃなかった。
cは無理ぽい。
なんでかはわからね
983Name_Not_Found:2007/01/19(金) 07:04:39 ID:???
>>979
グローバルな識別子はおkみたい。。
984Name_Not_Found:2007/01/19(金) 07:06:12 ID:???
var x = {c:1, y:2, z:function(){alert('a')} };
s(x);
function s(c){
d=c;
c.z();
setTimeout('s(d)', 100);
}
985Name_Not_Found:2007/01/19(金) 07:07:04 ID:???
>>979
JavaScriptなら、setTimeout(s, 100, c)
JScriptなら、setTimeout(function () {s(c);}, 100)

ただし、今回の変数(引数) c は大丈夫ということになっているが、
c の素性次第では、クロージャでメモリーリークするそうだ。

そもそも、var x とグローバルに宣言しているわけだから、
function s() {
  x.z();
  setTimeout(s, 100);
}
みたいに書く方が危険(と言うほどの物でもないが)がない。
986Name_Not_Found:2007/01/19(金) 07:10:17 ID:???
>>984
大局変数 x を参照する大局変数 d が増やされるだけ。
987Name_Not_Found:2007/01/19(金) 07:12:50 ID:???
なんで
var x = {c:1, y:2, z:function(){alert('a')} };
s(x);
function s(c){
c.z();
setTimeout('s(c)', 100);
}
これだと、cがないよーって言われるのか教えて。
仮引数だから?
988Name_Not_Found:2007/01/19(金) 07:25:53 ID:RcD9bcpL
>>985
参考になりましたありがとうございます
989Name_Not_Found:2007/01/19(金) 07:40:36 ID:???
>>987
setTimeout('s(c)', 100);
の's(c)'は、setTimeoutの指定された時間に実行される直前で翻訳されるから
翻訳される時点ではs関数は既に終了しており、文字列内で使用している変数のスコープは
s関数内から外れてしまいクロージャとしても解釈されない。
よって、文字列内のcはグローバル変数と解釈される。
990Name_Not_Found:2007/01/19(金) 08:00:47 ID:???
>>989
ありがとう
991Name_Not_Found:2007/01/19(金) 08:39:18 ID:???
992Name_Not_Found:2007/01/19(金) 09:36:10 ID:???
次スレもたったことだし、いまだにとほほが
参照され続けている理由を考えてみないか。
個人的には初心者がとりあえず知りたいと思うような
情報を(正確さはともかく)まとめてあるからだと思うんだが。
993Name_Not_Found:2007/01/19(金) 10:13:14 ID:???
javascript リファレンス
これでググると「とほほ」がトップで引っかかる
これが原因かと
994Name_Not_Found:2007/01/19(金) 10:13:29 ID:???
うん。だからとほほ見に行くのは自由でしょ。正確じゃないことが
あるという警告してるだけで。このスレのコンセプトは初心者に
優しいというものではないからそれでいいと思うのね。
995Name_Not_Found:2007/01/19(金) 10:21:11 ID:???
>>993
これだな。
996Name_Not_Found:2007/01/19(金) 10:37:01 ID:???
正確じゃないリファレンスというのがどうも訳わからんというか
有害だよな。チュートリアルならまだしも。
997Name_Not_Found:2007/01/19(金) 10:39:53 ID:???
998Name_Not_Found
最も有害なのは関数型のサンプルに必ずある再帰で書かれたフィボナッチがそのままJSに移植されたコードだろう。ダサかろうが何だろうが、遊んでないで、ループでやれと言いたいし、有害コードを書き残すなと言いたい。

近年流行の有害は、XPathに "//" しか書いていない覚書だろう。頻繁に使うはずのfollowing軸の例示もしなきゃ。

この一連のスレで過去に俺が書いた有害の一つは、TreeWalker作成時の引数であるNodeFilterを匿名ローカル関数にして、Fxのメモリーリークに該当してしまったコードだ。