3

私のHTMLページには、テキストを含む要素があります。その要素がクリックされたときに実行するアクションを割り当てました。ユーザーが要素を連続して何度もクリックすると、ダブルクリックが発生することがあります。これにより、テキストが選択(強調表示)され、外観が損なわれます。ダブルクリック(dblclick)イベントのデフォルトの動作を防ぐダミーのイベントハンドラーを使用して、それを防ごうとしました。ただし、これは機能していないようです。ダミーのイベントハンドラーが実行される前に、テキストが選択されて強調表示されているようです。

function doNothing(event) {
  alert('doNothing'); // Added for debugging. The alert is shown, meaning the event handler is invoked. When I get the alert, the text is already highlighted.
  if(!event) event = window.event;
  if(event.preventDefault) event.preventDefault();
  event.cancelBubble = true;
  if(event.stopPropagation) event.stopPropagation();
  return false;
}

myElem.onlick = doSomething; // This is the event for a single click. Works well.
myElem.ondblclick = doNothing; // The event handler is called, but the text is already highlighted.

具体的な質問:

1)ダブルクリックイベントとは何か関係がありますか?(アラームが発生したときにテキストがすでに強調表示されているので、別のメカニズムである可能性があります。(シングル)クリックイベントのデフォルトの動作が何か関係があるのではないかと思いましたが、デフォルトの動作をキャンセルしました。 (シングル)クリックイベントも同様です。)

2)dblclickイベントとは関係がない場合、それは何と関係がありますか?どうすればそれを防ぐことができますか?

3)dblclickイベントに関するものの場合、何か問題がありますか?(ところで、preventDefault()andcancelBubble = truestopPropagation()andのすべてを使用するのreturn falseはやり過ぎだと思います。デフォルトの動作を防ぐために必要な最小限のコードは何ですか?)

4)目的の結果を得る方法(テキストを選択して強調表示せずにダブルクリックする)の他のアイデアはありますか?

私はFF11でテストしています(ただし、最終的にはクロスブラウザーソリューションが必要です)。

ありがとう!

4

2 に答える 2

4
myElem.onmousedown = function(e) {
    e.preventDefault()
}

編集: return fasle から e.preventDefault に変更しました。これにより、クリック イベントの発生が引き続き許可されます。

于 2012-04-26T23:54:13.473 に答える