preventDefaultで範囲選択をキャンセル出来ない?
nicovideo Tag Edit Helperでは,span要素のmouseupイベントを検知してタグの選択ボタンを作っているのですが,
- あるボタンをクリック
- 別のボタンを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したら一発解決。なんだ。そんなことだったのか。