+ JavaScript の質問用スレッド vol.32 + javascript:var str="";const code = "ア".charCodeAt(0);const length=5;for(var i=0;i<length;i++){str+="\"";for(var j=0;j<length;j++)str+=String.fromCharCode(((length+j-i)%length)*2+code);str+="\"\n";}alert(str);
JavaScriptに「const」なんてあった?
わかったからさっさと代替案を出してくれ
constの代わりにvarを使えばよかろう。
つーか、952はvarにしたら、マジで動くな…
CSSの切り替えスクリプトを使ってるんですが、Firefoxでたまに動作しなくなります。 JSコンソールを見たところ、 if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) { if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title"); この二つの行でエラーが発生しているようです。 エラー内容が、a.getAttribute("rel") has no properties、とあるのですが、これはどう言う意味なのでしょうか? どうすれば改善することが出来るか、どなたか宜しくお願いします。
つまり、relがないからnullになってるんだろ。
>>959 link 要素の rel 属性の存在を確かめていないから
rel 属性を取得(=null) になって、 null にプロパティなんてねーぞコラと怒られている。
if(a.getAttribute("rel") && a.getAttribute("rel").indexOf....
にしれ。
ていうかどこのスクリプトだ、それは……。
>>960-961 仕様書読め。例えば、このページで
javascript:alert(document.body.getAttribute('lang'))
すると、空の文字列ではなく、null が返って来る。
DOM1-3 全ての勧告で、空文字列と定められているから、紛れも無いバグだな。
>>959 そのスクリプト自体が遠回りなやり方をとっていることにも問題が無いとは言えない。
StyleSheetList ではなく NodeList に問い合わせる意義は想像できない。
HTMLでlink要素に忘れずrel属性値を書くか、
'string' == typeof a.getAttribute("rel")
という条件を if の最初に挿入するか。
良くありがちな質問だと思うのですが・・・ 下記の関数を、 function WeekdayName(weekday) { wname = new Array(7); wname[0] = "日"; wname[1] = "月"; wname[2] = "火"; wname[3] = "水"; wname[4] = "木"; wname[5] = "金"; wname[6] = "土"; wdname = this[weekday]; return wdname; } HTMLファイルの中に記述するとOKなのですが、 別ファイルにして、記述すると、 「終了していない文字列型の定数です。」 とエラーになります。 どうも"日"が悪いようで、これを"月"にしたりするとOKだったりします。 何がいけないのでしょうか?また回避策はあるのでしょうか?
>>963 なぜ「良くありがち」と判断するのか、その根拠をうかが
おうか。このスレで未だかって出たことがないような気がする。
文字コード変換ツールで文字コードをJIS、SJIS、EUCの3通り
に変換してテストしてみれ。
何で俺が仕様書を読まなくちゃいけないんだ? mozillaはわざとDOMを無視してるんだし。
?
>>964 素直にユニコードでエスケープした方がいいと思うが。
968 :
963 :04/12/23 17:24:22 ID:???
>>964 「終了していない文字列型の定数です。」でぐぐったら沢山出てきました。
"月"はよくて"日"が駄目というのは、文字コードに関係する
ような気がしてブラウザのエンコードを見ると、
UTF-8になってました。
HTMLはShiftJisで作成しているつもりなので、不思議です。
>>967 ユニコードでエスケープする方法を教えてください。
>>968 多分、JAVAのSDKに入ってるNative2Asciiが定番だとは思うが、
あまり素人にはお薦めできない。めんどいから。
escaped-unicodeを生成できるエディタはいくつかあるけど、
その気になれば、ローカルのjavascriptで生成することも可能。
とりあえず、"日"の代わりに"\u65e5"をいれておけば大丈夫でしょ。
//日月火水木金をescaped-unicodeにする方法
var str="日月火水木金土";var retval="";for(var i = 0;i<str.length;i++) retval+="\\u"+str.charCodeAt(i).toString(16); document.write(retval);
もちろん、生成する時に既に文字化けしてたら、どうしようもないが、
それはHTMLの中に書く方で何とか対処してくれ。
ちなみに答えは"\u65e5\u6708\u706b\u6c34\u6728\u91d1\u571f"
javascript: alert("\u65e5\u6708\u706b\u6c34\u6728\u91d1\u571f");
で確認できる。
970 :
963 :04/12/23 20:29:29 ID:???
>>969 ありがとうございます。
わかったことがあります。
現在作成しているページはhtmlではなく、aspxでした。
aspxの場合、ファイルをShiftJisで作成し、charsetをShiftJisに指定しても、
エンコードはUnicodeになるようです。
別ファイル(.js)をUnicodeで作成してみたらうまくいくようになりました。
色々とありがとうございました。
971 :
Name_Not_Found :04/12/23 22:20:16 ID:0aIRJ8jJ
Another HTML-lintを使うと、onclick属性を使用するときはonkeypress属性も併用するように警告されますが ボタンにonkeypressを追加した場合、Enterキーでボタンを押した場合onClickとonkeypressが同時に実行されてしまいます。 これに対処する(同時に2回実行されないようにする)にはどうしたらいいですか? よろしくお願いします。
>>971 同時ではない。順序は決まっているから、実験してみろ。
仮に、Enter キー を押した時の順序が、keypress → click ならば、
次のような処理になる。
var enterKeyPressed = false;
function foo (event) {
if (event.type == 'keypress') { if (event.keyCode == 13) { // Enter キー
enterKeyPressed = true;
bar( event);
setTimeout( 'enterKeyPressed = false', 100); // 本当に click イベントが発生しない UA への配慮
} } else if (enterKeyPressed) { // keypress に連続する click
enterKeyPressed = false;
} else { // click
bar( event);
}
}
function bar (event) { やりたい処理 }
重要なのは、アクセシビリティのために追記した HTML の onkeypress 属性を
無視しないよう工夫すること。要するに、foo 関数は
function foo (e) { if (e.type == 'click') { bar(); }}
と定義することも出来る ( keypress イベントを無視している) が、
それでは HTML の onkeypress 属性を書いた意味が無いだろう、ということ。
>>972 > 本当に click イベントが発生しない UA への配慮
「本当に」を「連続して」に訂正。
>>972 ブラウザによって順番が違う場合の配慮も必要じゃないの?
preventBubbleで泡の方を消せば万事解決。
>>976 違う。
// しかもそれは Mozilla の独自拡張メソッド。
フォームで、Undo/Redoボタンを付けたいのですが document.undo()のような事って出来るのでしょうか? 検索したのですが、期待する資料は出てきませんでした。 出来ない場合、change毎にテキスト等を記憶し、呼び出す等しかないでしょうか。 もし、他に有効的な方法があれば教えてください。
>>979 それがUndo/Redoのロジックだと思うょ
がんばって実装してみてね♪
981 :
Name_Not_Found :04/12/26 21:12:27 ID:Nn+buiLi
JavaScriptを実装するとき、HTMLファイルのヘッダーには <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Type" content="text/javascript; charset=Shift_JIS"> と2つ書く必要がありますか?
>>981 Content-Script-Typeでしょ。それぞれ役割が違う
983 :
981 :04/12/26 21:25:57 ID:???
>>982 > Content-Script-Typeでしょ。
ぬほっ(;´Д`)
すっかり書き間違えてました。
出直してきます。
>>981 charsetはいらない。
HTML中に記述するなら当然そのHTMLの文字コードと同じだし、
外部ファイルにするならcharset属性を使えばいいから。
985 :
Name_Not_Found :04/12/28 07:31:26 ID:jWbTRZuv
たまに、ホームページのソースに if(document.all){ }else if(document.getElementById){ }else if(document.layers){ } というものがありますが、 これは何を目的に何を判別しているのですか?
ブラウザの判別してると思う
>>985 > 何を目的に何を判別しているのですか?
未知のメソッドを実行させてエラーメッセージが出てしまうのを防ぐのが目的。
document.all をオブジェクトとして理解していますか、
document.getElementById を関数として理解していますか、
document.layers をオブジェクトとして理解していますか、と問い掛けている。
>>987 からなんとなく分かってもらえると思うが、直接的なブラウザ判定ではないということ、
そして、使うメソッドやプロパティを理解するかどうかを問う方が近道だということ。
直接的なブラウザ判定なら、navigator.userAgent 辺りを見て、自己申告される
ユーザエージェントを信じることになる。クライアントサイドで自己申告される
ユーザエージェントは、HTTP リクエストヘッダに比べれば、ユーザに書き換えられ難いので、
全てのユーザエージェントを把握していて、それら全ての J(ava)Script 実装まで
把握できているというなら、有効な手段にならないわけでもない。が、そもそも、
多数のユーザエージェント全てを把握しようと努力すること自体がナンセンス。
結局、前記「近道」に辿り着くことになる。
>>985 例えば、new Image と書きたいとする。ならばブラウザに、if (window.Image) と問えばよい。
例えば、document.images と書きたいとする。if (document.images) と問えばよい。
例えば、document.compatMode と書きたいとする。if (document.compatMode) と問えばよい。
ただし、String型のプロパティの場合は、その値に 'undefined' という文字列が現れない限り、
if ('CSS1Compat' == document.compatMode) と問う方が現実的。
例えば、if (document.implementation.hasFeature( 'Events', '2.0')) と書きたいとする。
if (document.implementation && document.implementation.hasFeature) {
if (document.implementation.hasFeature( 'Events', '2.0') { ... } } という感じになる。
実は、こういう面倒な記述は、(WinIE5 以上|Mozilla) では殆ど必要無い。
(HTC|XBL) を使うに限る。そもそも、これらは変数を隠蔽してくれるから、
それだけでも使わない手は無い。
991 :
985 :04/12/29 07:45:19 ID:2D4y5uzE
ありがとうございます。
Oh!
ume
ume
sakura
age
matsu
999
sen
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。