読者です 読者をやめる 読者になる 読者になる

preventDefaultで範囲選択をキャンセル出来ない?

nicovideo Tag Edit Helperでは,span要素のmouseupイベントを検知してタグの選択ボタンを作っているのですが,

  1. あるボタンをクリック
  2. 別のボタンをShift+クリック

という手順で操作したとき,ボタンの間のテキストが選択されてしまいます。
とりあえずpreventDefaultを呼び出せばいいやと思ってしたのようなソースを書いてみました。

elem.addEventListener('mouseup', function(e) {
  if(e.shiftKey)
    e.preventDefault();
  ...
}, false);

ところが。これじゃだめだった。ボタン間が選択されてしまう。mouseupをclickにしてもだめだった。
しょうがないから,こんなソースを書いた。

elem.addEventListener('mouseup', function(e) {
  if(e.shiftKey)
    elem.focus();
  ...
}, false);

これで範囲選択はされなくなるけど,一瞬だけ文字が選択されるのでなんとなく見栄えが悪い。
と,ここまで書いて思いついた。範囲選択されるのはmousedownのときじゃないかと。
mousedownでpreventDefaultしたら一発解決。なんだ。そんなことだったのか。