のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,490,775人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
151 : Name_Not - 2011/03/01(火) 16:07:25.24 ID:??? (+96,+30,-34)
>>140
これは簡単で、タイプライタではシフトキーを押すと活字ハンマー全体を
上に持ち上げて大文字の活字が紙に当たるようにしていた。なので持ち上げる
からupperなんだと思うよ。
152 : Name_Not - 2011/03/01(火) 16:33:55.77 ID:??? (+27,-30,-200)
IE8で、thisの指す内容を無理やり書き換えることは出来ませんか

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<title>foobar</title>
</head>
<body>

<div id="foobar">foobar</div>

<script type="text/ecmascript">
var foobar = document.getElementById('foobar');
foobar.attachEvent('onclick', function(){
this = event.srcElement;
this.firstChild.data = 'IE';
});
</script>
</body>
</html>
153 : Name_Not - 2011/03/01(火) 16:36:11.89 ID:??? (+5,-29,-14)
>>152
Function.prototype.call を使えば出来る。
154 : Name_Not - 2011/03/01(火) 16:37:30.17 ID:??? (+4,-29,-23)
すみません。コメントを外すとokで、コメントのままだとngです。

firefox3.6.13で、Webサーバはtomcat6.0.32です。
155 : Name_Not - 2011/03/01(火) 17:30:27.96 ID:??? (+3,-30,-42)
>>154
sleep(1); を呼び出した(コメントを外した)場合。
http://jsbin.com/olope4/2

期待通りに動かない。セレクトボックスが選択できてしまう。
Firebug でも select が増殖しているようには見えなかった。代わりに "sleep is not defined" が増殖する。
156 : 152 - 2011/03/01(火) 17:46:17.80 ID:??? (+10,-30,-89)
>>153
ありがとうございます。上手くいきました

var foobar = document.getElementById('foobar');
foobar.attachEvent('onclick', function(){(function(){
this.firstChild.data = 'IE';
}).call(event.srcElement)});
157 : Name_Not - 2011/03/01(火) 17:50:12.78 ID:??? (+17,-30,-99)
>>156
素朴な疑問なんだが、

document.getElementById('foobar').attachEvent('onclick', function (event) {
 var element = event.srcElement;
 element.firstChild.data = 'IE';
});

これでダメな理由は何なんだろう?
158 : Name_Not - 2011/03/01(火) 18:35:12.87 ID:??? (+9,-30,-102)
function () { this.firstChild.data = 'IE'; } を既に定義していて、addEventListener と attachEvent の両方で使いたかったに一票。
this と event.srcElement は対応しないはずだけどね。
159 : 152 - 2011/03/01(火) 18:41:50.69 ID:??? (+17,-30,-81)
>>157-158
すみません。実際に使わせて戴いた部分は>>158の通りです

Element.prototype.addEventListener = function(type, listener, useCapture){
var target = this;
target.attachEvent('on' + type, function(){
listener.call(target, event);
});
};
160 : Name_Not - 2011/03/01(火) 19:00:19.72 ID:??? (+15,-30,-250)
>>159
そのコードを書いた気持ちはわかるんだが、addEventListener と互換性が取れてないのが気になる。

>157 にもあるが attachEvent は第一引数で event を取れるから、window.event を使わなくていい
・this は event.currentTarget と等価 (event.target じゃない)
・this も書き換えるなら event も書き換えた方が後々楽になると思う。 event.target と event.currentTarget を定義するだけでも大分違う。
・attachEvent は onload 時に event.srcElement が null なので、対処を
161 : 160 - 2011/03/01(火) 19:09:28.62 ID:??? (+5,-30,-175)
重要なことを書き忘れていた。
何よりも、>159 が拙いのは detachEvent 出来なくなること。
Element.prototype.addEventListener の引数 listener は書き換えられているので、元々の listener では detachEvent することが出来ない。
この問題に対応するためには元々の [this, type, listener, useCapture] をキャッシュしておき、removeEventListener 時に照合するしかない。
162 : 140 - 2011/03/01(火) 20:32:47.18 ID:??? (+70,+29,-31)
>>151
なるほど、タイプライターも上下で分けてるね。
歴史的な順番としては印刷技師の職業習慣が先になるのだろう。
スレチだけど勉強になりました^^
163 : Name_Not - 2011/03/01(火) 22:24:40.49 ID:??? (+109,+29,-61)
>>137
ラージって言わないんだ
デカルチャーだわ
アッパーケースって言うのが普通なのか…恥ずかしい

例えば新人が定数変数をロウで書いてたら、アッパーケースで書き直して。って言い方で指示するの?


labelは何て呼んでる?
レーベルだよねw流石にラベル何ていわねーわなw
164 : Name_Not - 2011/03/01(火) 22:28:14.62 ID:??? (-6,-29,+0)
ラベル(´・ω・`)
165 : Name_Not - 2011/03/01(火) 22:28:31.28 ID:??? (+13,-30,-244)
JavaScriptってバイナリファイル扱えますか?
JavaScriptでバイナリエディタみたいなものを作りたいのですけど
試しに画像ファイルを読み込み16進ダンプしてみたのですが
手持ちのバイナリエディタと比べると異なるものになってしまいます
画像ファイルはXMLHttpRequestで取得し
renponseTextにhttp://phpjs.org/functions/bin2hex:361
こちらのbin2hex関数をかませて16進ダンプを行いました
prototype.jsを使用したコードですが

new Ajax.Request("test.png",{
method: "get",
onComplete: function(req){
document.write(bin2hex(req.responseText));
}
});

こんな感じになります
どこを手直せばいいのかそもそも不可能なのかご存知の方アドバイスお願いします
166 : Name_Not - 2011/03/01(火) 22:32:31.77 ID:??? (+72,+29,-8)
>>163
日本語ではラベルです。
レーベルでも通じるけどラベルのことねと返されるでしょう。
GAIJINにはレーィボーと言いましょう。
167 : Name_Not - 2011/03/01(火) 23:32:11.54 ID:??? (+91,+29,-39)
日本語を使えよ。大文字でいいじゃん。ラベルも日本語といや日本語。
レーベルというのはレコードやCDの1つのブランドを表す日本語。
カルテもカルタもカードもトランプも日本語。
169 : Name_Not - 2011/03/02(水) 00:34:32.95 ID:??? (+47,-30,-32)
document.querySelectorAll("#tar").length
で確かめたらずっと1だったから問題ないと思うよ。
Firebugsがおかしいって可能性は?
170 : Name_Not - 2011/03/02(水) 00:47:17.81 ID:??? (+89,+29,-3)
>>168
なるほどね。これで如何?
http://jsbin.com/olope4/3
171 : Name_Not - 2011/03/02(水) 01:39:26.16 ID:??? (+79,+29,-62)
>>170
おお、増えませんね。
やはり、innerHTMLが悪さをしてるんでしょうか。

先のコードはサンプルで、実際のselectタグには、
Ajaxを利用してサーバから持ってきた情報をもとに出力するので、
単純には行きませんが、どの辺が問題なのでしょうか。
それとも、FireBugsの問題で、>>169のとおり、実際には問題ないのかな。
172 : 165 - 2011/03/02(水) 02:34:55.95 ID:??? (+3,-30,-246)
http://d.hatena.ne.jp/k12u/20061216/p1
こちらを参考に自己解決しました
一応コード出しておきます

new Ajax.Request("test.png",{
method: "get",
onCreate: function(req) {
req.transport.overrideMimeType("text/plain; charset=x-user-defined");
},
onComplete: function(req){
var bytes = [];
var res = req.responseText;
var len = res.length;
for (var i = 0; i < len; i++) {
bytes[i] = res.charCodeAt(i) & 0xff;
}
document.write(bin2hex(String.fromCharCode.apply(String, bytes)));
}
});
173 : Name_Not - 2011/03/02(水) 08:44:28.16 ID:??? (+104,+29,-44)
>>167
大文字って言い方だと新人によっては2バイト文字で書く奴が普通にいるから困る
かと言ってupperCaseで書けと言っても理解出来る筈もなく
174 : Name_Not - 2011/03/02(水) 11:00:30.47 ID:??? (+71,+29,-24)
>>173
コンピュータの素養がある者が、
大文字を2バイト文字と解釈するって?
それはその個人の問題であって、一般的な問題とは思えない。
176 : Name_Not - 2011/03/02(水) 12:44:15.55 ID:??? (+21,-29,-4)
>>175
String.fromCharCode(0x52); // R
177 : Name_Not - 2011/03/02(水) 13:17:34.63 ID:??? (+3,-30,+0)
ドラッグ&ドロップでファイルをアップロードさせるコードを書いています。
addEventListener('drop',function~でドロップイベントを拾って、e.dataTransfer.files[0]で一つめのファイルのオブジェクトを拾って
それをバイナリで読み込んで、そこからXMLHttpRequestでsendする値を書いて、postする流れです。
が、バイナリをアップしてみてもファイルが壊れてしまいます。例えば30kbの画像を送信したら50kbになる。バイナリを見てみると
最初の1kb位は同じ所がありjpegっぽいヘッダーが出ているのですがそれ以降は全く違う値になっています。
最初の方は一部同じ、序盤以後は全く違うと、文字化けしているような症状になっているのですが、何故文字化けするのでしょうか。
readAsBinaryStringで読み込んでいるので文字コードの変換処理が入る箇所が無いように思えます。
サーバーサイドはphpでバイナリをいじくる処理は一切していませんし、普通にjsを使わずinput type=fileで送信したファイルは当然そのまま保存されています。
以下がコードの箇所です
dropobj.addEventListener('drop',function(e){
e.preventDefault();
console.log(e.dataTransfer.files[0]);
var reader = new FileReader();
filename=e.dataTransfer.files[i].name;
filetype=e.dataTransfer.files[i].type;
reader.onload=function(e2){
upload(filename,filetype,e2.target.result);
}
reader.readAsBinaryString(e.dataTransfer.files[i]);
},false);
ここまででファイルをブラウザのfilereaderで読み込んでいます。続きます。
178 : Name_Not - 2011/03/02(水) 13:21:36.58 ID:??? (+3,-30,+0)
続きです
function upload(filename,type,value,mode){
var func_makeboundary1session,senddata="";
func_makeboundary1session=function(name,filename,contenttype,value,boundary){
var res="";
res+='\r\nContent-Disposition: form-data; name="'+name+'"';//"
if(filename!=""){res+='; filename="'+filename+'"';}//"
res+="\r\n";
res+="Content-Type: "+contenttype+"\r\n\r\n";
res+=value+"\r\n";
res+="--"+boundary;
return res;
}
if(mode==false && loading==true){return;}
var httpoj = new XMLHttpRequest();
httpoj.open("POST","index.php",true);
httpoj.onreadystatechange = function(){
if(httpoj.readyState==4){alert(httpoj.responseText);}
}
var boundary ='----MultiPartFormBoundary' + (new Date()).getTime();
senddata+="--"+boundary;
senddata+=func_makeboundary1session("file",filename,type,value,boundary);
senddata+="--";
httpoj.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);
httpoj.send(senddata);
}

func_makeboundary1sessionでmultipart/form-dataを作成し送信しています。サーバーのphp、html、jsファイル全て文字コードはUTF-8です
multipart/form-dataの情報はhttp://adiary.blog.abk.nu/012http://www.kanzaki.com/docs/html/htminfo32.html を参考にしました

http://github.com/blueimp/jQuery-File-Upload/wiki/Options これを使おうと思いもしましたが、ファイルのアップロードと同時に別のフォームのテキストとかも送らないといけないので諦めました
ブラウザはchrome、OSはvistaです 以上です。よろしくお願いします
179 : Name_Not - 2011/03/02(水) 13:43:39.75 ID:??? (+7,-30,-65)
jsでファイルをアップロードする一番簡単なのはFormData使う方法だけどHTML5だからFirefox4、Chromeぐらいしか対応してないんだよね
http://ideone.com/FwufK
FormData使わずにやるならbase64でエンコードしてから送ったほうがいい、
getAsDataURLでbase64の値が取れるからサーバーサイドで戻すのが確実
180 : Name_Not - 2011/03/02(水) 13:47:49.75 ID:??? (+10,-30,-92)
今気づいたけど
> Q9. Aタグのonclickで動作指定してるのですが時々動きません…
> A9. 「onclick="...;return false"」としないとページ移動しちゃうから。

preventDefaultでもできるよねというかこっちが正統派なきがするけど。
http://developer.mozilla.org/ja/DOM/event.preventDefault
181 : Name_Not - 2011/03/02(水) 13:53:51.50 ID:??? (+3,-29,+0)
>>179
どうも。FormDataは知らなかった。
182 : Name_Not - 2011/03/02(水) 14:15:34.71 ID:??? (-1,-25,+0)
>>180
IE
183 : Name_Not - 2011/03/02(水) 15:09:39.48 ID:??? (+60,+29,-23)
>>176
できた!全角の問題が厳しかったが自力でできたよ、ありがとう
184 : Name_Not - 2011/03/02(水) 15:32:24.78 ID:??? (+0,-29,-40)
>>180
次スレテンプレ案では削除予定だけどhttp://fiddle.jshell.net/vSqKr/13/show/#Q9 には書いてあるね。
preventDefault は IE9 からだっけ。
185 : Name_Not - 2011/03/02(水) 15:36:26.92 ID:??? (-1,-29,+0)
>>181
XMLHttpRequest.sendAsBinaryで出来るかもしれない。
186 : Name_Not - 2011/03/02(水) 16:48:39.08 ID:??? (+29,-29,-13)
Q5 にIEのバージョンを書いておいた。他サンプルコードの修正。
http://fiddle.jshell.net/vSqKr/14/show/
187 : Name_Not - 2011/03/02(水) 17:51:21.29 ID:??? (+62,+29,-1)
>>186おつ
目次を付けたよ
http://fiddle.jshell.net/vSqKr/15/show/
188 : Name_Not - 2011/03/02(水) 17:58:31.73 ID:??? (+30,-29,-63)
>>187
いいね。
目次で見ると Q14 が結構長いな。他に合わせて

Q14. setTimeout() やイベントハンドラ関数に設定するコードに this を含めたいのですが…

でいい気がするんだけど、どうだろう?
189 : Name_Not - 2011/03/02(水) 18:06:05.47 ID:??? (+66,+0,-43)
>>188
確かに長いから変えてみた。あと:target疑似要素で目次クリックでハイライトするように。
http://fiddle.jshell.net/vSqKr/16/show/
190 : Name_Not - 2011/03/02(水) 18:06:14.83 ID:??? (+20,-17,-15)
やってみた。(16 で誰かやってたっぽいw)
http://fiddle.jshell.net/vSqKr/17/show/
191 : 190 - 2011/03/02(水) 18:06:57.03 ID:??? (+66,+29,+0)
すまない、被ってしまった。>>189 を採用してくれw
192 : Name_Not - 2011/03/02(水) 18:14:18.87 ID:??? (+25,+7,-1)
193 : Name_Not - 2011/03/02(水) 18:37:58.31 ID:??? (+57,+29,-24)
更新する度にコンテンツと目次の同期を取るのは面倒かもしれないので、目次を JavaScript で生成するようにしてみた。
http://fiddle.jshell.net/vSqKr/19/show/
194 : Name_Not - 2011/03/02(水) 20:15:14.43 ID:??? (-27,-30,-240)
質問です。
サイトにTwitterのコメントボックスを設置しようとしています。
ボックスにデフォルトで表示される文面(defaultcontent)は、以下のように
「location.href」としてページごとのアドレスが来るように指定しています。

twttr.anywhere(function(twitter) {twitter("#tweetBox").tweetBox({
defaultContent: " " + location.href});

このアドレスを「bit.ly API」を用いた短縮アドレスに置き換えたいと考えています。
以下のサイト様を参考にしていますが、リンクボタンとして説明されている方法を
テキストボックスに応用するにはどのような手順が必要でしょうか?
http://ringoon.jp/2009/10/16/bitly-api-javascript-twitter.html
196 : Name_Not - 2011/03/02(水) 21:11:24.10 ID:??? (+3,-29,-52)
Faceboxライブラリで手前にHTMLを表示したいのですが、画像は普通に表示できるのに、htmlファイルは指定してもうまく表示出来ません
やり方もしくは参考になるサイトをご存知でしたらご教授ください
198 : Name_Not - 2011/03/02(水) 21:24:07.12 ID:??? (+91,+29,-16)
FAQの目次はもうちょっと行間あけるべきだな。見辛い。
199 : Name_Not - 2011/03/02(水) 21:40:04.25 ID:??? (+55,+27,-19)
改行厨が気分で3行も4行も空けかねないので意見は正確に。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について