- ベストアンサー
妥当なonkeypressは?
- W3Cのアクセシビリティ指針に従い、onclick属性と共にonkeypress属性を使用することが一般的です。
- しかし、単純にonkeypress属性を追加するだけでは、すべてのキーに反応してしまう可能性があります。
- 一般的な対処方法としては、スペースキー以外のキー入力を無視する処理を追加したり、onkeypress属性のみにreturn false;を記述する方法があります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> DTD上は#IMPLIEDで、空文字を許可していない? あえてから文字列を指定する<a title="">という使い方をしたい場合もあると思いますが、、、 W3CのValidatorをエラーなしで通りますよ。 #IMPLIEDな属性を書くときはその内容を省略しては行けない、というルールは見あたらなかったのですが、探し方が悪いんですかね。 定義としては「書かれていない場合はブラウザ独自のデフォルト値をその値とする」のようですが、それ以上のことは書かれてなさそうですが。。。 return falseはよく見かけますが、return trueというのは見かけない、だからその書き方に気づかなかった、 で、使わず(使えず)に不都合なreturn falseを使う、という人が多いのではないでしょうか。 ""も同様だと思います。 私自身、return trueには気づかなかったわけで、、、(^^; もちろん、何もしないという意味の空白行を入れることよりも、属性だけを書くというのを嫌ってのことかも知れませんが。 > なので、やはり指針の「onkeypressも書け」だけが厄介です… 私はそうしなければならない状況でなければ、 自分の判断で、現代の状況、または作成するサイトの状況に合わないと思う指針などについては無視してます。 古いブラウザや、メジャーなブラウザとは異なる動作をするブラウザが存在する限り、 W3Cの指針は残ると思いますし、その利用者のために、その指針を守るのは良いことだと思いますが。 まぁ、フレームやインラインフレームをよく使う人の言うことですから(^^;
その他の回答 (2)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
では、onkeypress=""ではだめなんですかね? 画像のファイル名が表示されるのを防ぐという意味で<img alt="">を使ったりすると思いますので、 まぁ、みための統一性は出てくるんじゃないかと。 どっちにしても古いブラウザで動かないのは変わらないと思いますし、個人的には好きじゃないです。 書かないなら書かない、書くならキーコードの判断をしつつonclickと同じ処理を、でしょうか。 ブラウザ側でサポートしてくれると嬉しいのは確かです。 たとえばLynxと同じように、右やじるしキーでアンカーを移動するブラウザもあるかも知れませんし、 キー操作方法をカスタマイズしている人もいると思います。 そう言うブラウザでは一般的なキーコードの判断では操作できなくなりますしね。
お礼
ご回答ありがとうございます。 確かにonkeypress=""でも、return trueと同じ効果になり、見た目も書く手間も楽で良さそうですよね。 ただ気になるのは、onkeypress=""と書いてあるのを見かけないのは、なぜでしょうね? DTDを見るとon~属性は#IMPLIEDになっていますね。imgタグのaltは#REQUIREDで、非グラフィカルUAのためには空文字にも意味があることも理解できますが。 DTD上は#IMPLIEDで、空文字を許可していない? あるいはアクセス指針の趣旨的に「何かを指定しなければならない」という解釈なんですかね? それともブラウザによっては挙動が違ってしまうとか?… もしくは、おっしゃるように単なる好みの問題ということでしょうか。確かにalt=""には意味があるがonkeypress=""は、いかにも文法を合わせるためだけのようで、心情的になんだか…、という。なので、妥協案としてreturn trueなどをとりあえず書いておくのがマシということかな。 > ブラウザ側でサポートしてくれると嬉しいのは確かです。 おっしゃるとおりですよね。 むしろそうすべきで、実際にすでにサポートされている、と言っていいでしょうね。 なので、やはり指針の「onkeypressも書け」だけが厄介です…
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
同じ関数をそのまま呼び出しているのは、たぶん、タブキーで操作することを想定せずに、 onkeypressも書けという指針をそのまま真に受けてしまったんじゃないでしょうか。 とりあえず現状では、あえて動作を停止させたい理由がない限り、onkeypress="return false;"と書いては行けません。 Firefoxでキー操作できなくなります。 > ほんのちょっとしたことをしたいだけなのに、わざわざそんなコードを入れるのもどうか、 ほんのちょっとの便利さと、制作の多大な面倒臭さを天秤に掛けるのが一般的じゃないでしょうか。 私はメジャーなブラウザがサポートしていることを理由にonkeypressは書かなくていいと思いますが、 古いブラウザやマイナーなブラウザをサポートするかどうか、というところを基準にしてもいいと思いますし、 文法チェッカーでエラーが出ないことを優先してもいいと思います。 > このW3Cの指針がどうも理解できず、 指針には書かれてなかったと思いますが、 たとえば、onmouseoverで説明文を表示する様なスクリプトの場合。 キーボード操作をする人にも親切な設計にするなら、onmouseoverと一緒にonfocusなどを入れるのがいいと思います。 onmosueover、onclick、onfocusそれぞれに絡んだ問題が出てくると思いますが。 マウスを使っている人の特権にしたいのでなければ、 キーボード操作でも同様のことができるようにするほうが良いというのが、この指針の指しているところだと思います。 指針が作られた後にもブラウザはアップデートされていきますから、実情と異なることもたくさんあると思います。 > 装置依存への対処なんてのは文書の責任じゃなくてクライアントアプリ(ブラウザ)の役目だろう さて、どうなんでしょうか(^^; W3Cは文書・文法の管理はしてますが、ブラウザを管理してるワケじゃないですからね。 ブラウザがサポートしてくれると、JavaScriptを作る人としては楽できますね。 ブラウザを作る人は大変でしょうけど。
お礼
ありがとうございます。 その後様々試したり検討したりして,"return true"が妥当かなと今のところ考えているのですが,どうでしょう。 ご指摘のように現実的な天秤に載せてみれば,押されたキーを判別なんていうのはおよそ現実的ではないと思われ,そもそもスクリプトが動作しない環境への考慮も加味すれば,それこそキーの処理は無意味になります。 そこで, ●事実上ほとんど全ての現行ブラウザでは,マウス以外の操作機能はブラウザ自身が持っている ●なので,処理はブラウザに任せてしまう="return true"でデフォルトの動作をさせる,そしてスクリプト自身は何もしない すなわち ・アンカー上でエンターキーが押されればブラウザがonclickを発生させる ・ボタンエレメントなど上でエンター/スペースキー(以下同上) などとブラウザが(多少差異があっても)何らかの代替処理をしてくれるはず という考えです。 ま,簡単に言えば"onkeypressを書かない"のと同じことなんですが。 現在の状況に見合い,かつ指針にも則している そしてhttp://okwave.jp/qa2486538.htmlのような多重処理も回避できる最善策かと。 様々なソースを見ると"return true"は少なく,最も多いのはonclickと同じものを入れているケースです。 そういう意味では,やはりあまり考えずに書いてしまっている人が多く,"return false"と書いた人はある程度考えただけか妥協した,"return true"と書いている人は,私と同じように悩み考えた末の策なのかな… > W3Cは文書・文法の管理はしてますが,ブラウザを管理してるワケじゃないですからね。 > ブラウザがサポートしてくれると,JavaScriptを作る人としては楽できますね。 > ブラウザを作る人は大変でしょうけど。 W3Cは文書だけでなくブラウザ(ユーザー・エージェント)の挙動なども指針を作っています。 そしてそれを読むと,入出力デバイスに依存しないインターフェースを実装するよう勧めているんです…。 で,実際に各主要ブラウザはすでにサポートしていますよね。おっしゃるように大変だったとしても,現実にはサポートされています。 つまりHTMLのアクセシビリティ指針"onkeypressも書け"だけが,どうもシンクロしていない矛盾しているところがあるのは確かです。 しかしこれらは更新され続けている言わば途上のものですから,将来的に改善されることを願います…
補足
↓文字数制限のため、句読点をカンマにしたりあの手この手で…大変読みにくくなってしまいました…。どうぞご了承ください。
お礼
ご回答ありがとうございます。 空文字列の件は、そのように考えるのが妥当のようですね。 いろいろ探したり試したりしましたが、特に他の方法も見当たらず、問題も無さそうなので、これで良しとしようと思います。もし問題があるようなら空文字列とreturn trueを使い分けても良さそうです。 > 私はそうしなければならない状況でなければ、 > 自分の判断で、現代の状況、または作成するサイトの状況に合わないと思う指針などについては無視してます。 おっしゃるとおり私も、意図的に従わないことはあります^^; 指針ではダメだとされる<a href~ target="_blank">とか、 指針の言う「理屈」は解るんですが、現実的にはtarget="_blank"が適切であるケースは多いですね。まぁこれは、実際にメジャーなサイトでも良く使われてますが…。 それでは、あらためて、 何度も御丁寧にご回答いただきまして、ありがとうございました。