A Better Project@はてなダイアリー(インポート版)

基本的にここは更新されません。詳細はaboutへ。

本気でやるなら a 要素を避けて input 要素を使うべき

同日 17:15 頃追記:はてブコメントで input 要素は form 要素外でも使えるとの指摘を北村(id:kits)さんからいただいたので、訂正。参考:http://www.w3.org/TR/html401/sgml/dtd.html#inline
そろそろ本気で学びませんか? | Think IT(シンクイット)で、href="javascript:void(0)" には誰も突っ込まないのかと思っていたら、重くなる原因でもなければバージョンが変わるのはライブラリだけではない - id:HolyGrailとid:HoryGrailの区別がつかない日記で以下のような発言が。

aタグにonClick書いてる時点でなにか違うことをやっている気がしなくもない。
もともとこういうのは超苦肉の策で始めたものだ。
ボタンが嫌だ!リンクにしたいっていうご要望をうけいれるところから始まった。

これですが、もはや過去の経緯などは関係ありません。
今、ウェブを見ているユーザが一般的にクリックできると考える要素はアンカータグだと思います。
ユーザがアクションを起こすことができると考える要素にイベントハンドラをセットするのはごく普通の流れだと思います。
この時点で違うと言われてしまうとユーザに優しくないページだらけになってしまいます。
WEB標準といった流れも考慮するとこういった挙動に特に違和感は感じられません。

少なくとも、2 年前までは、http://ishikawa.arielworks.com/memo/2006/06/24/185137#comments のように、悪習と考えられていたようです。

> href="javascript:void(0)"
これは避けるべき悪習だとすでに多くの開発者が認識してるはずです。
リンクのコピーとか、ホイールクリックで新規タブで開くとか、ユーザーが期待する動作を裏切ります。
リンクとして機能させる気がないのであれば、a要素を使うべきではないと思います。
(適切なリンク先があるならa要素を使った上でイベントを割り当ててます)

Web 標準といった流れを考慮しても、私は違和感を感じます。
http://www.w3.org/TR/html4/struct/links.html#adef-href(参考日本語訳:http://www.asahi-net.or.jp/~SD5A-UCD/rec-html401j/struct/links.html#adef-href)にあるように、href 属性は、Web リソースの所在を指定するものです。
また、私が以前翻訳した DOM:window.open - MDCでも、「"javascript:" links break accessibility and usability of webpages in every browser.("javascript:" 形式のリンクは、全てのブラウザにおいて、ウェブページのアクセシビリティユーザビリティを損ねます。)」との注意書きがあります。
form 要素を書くのは確かに面倒ですがですから、a 要素を使うのではなく、素直に input 要素を使うべきだと思います。
仏教では、wikipedia:末法思想 というものがあります。長い年月が経つと正しい考えが伝わらなくなるという考えですが、Web 業界はドッグイヤーなので、すぐに正しい考えもねじまがってしまうのかなあと思うとちょっとなんだかなあという感じがします。