8

次の HTML があるとします。

<div contenteditable="true">Some text</div>

JQueryでクリックイベントを検出するJS:

$("div").click(function() {
   alert('click!');
});

div 内のテキストの一部を選択すると、クリック イベントは Opera によってスローされません(Linux では Opera 11.61 で、Windows では 11.62 でテスト済み)。単語をダブルクリックして部分的にマークを付けると機能します。

このイベント、IE7-9、Firefox、Chrome、および Safari でスローされます。少し変更されたJSFiddle hereがあります。

これは予期された動作ですか、JQuery のバグですか、Opera のバグですか、それとも何か他のものですか?

4

2 に答える 2

2

どちらの動作が「正しい」かは、確かに興味深い質問です。個人的には、Opera の動作の方が理にかなっていると思います。ここでユーザーが意図しているのは、明らかに何かを「クリック」するのではなく、何かを「選択」することだからです。

一方、Opera は他のブラウザーと互換性があるように変更する必要があると思います (他のブラウザーを Opera に一致させることができない限り)。互換性は非常に重要です。だから、私のオペラの従業員と話をすると、帽子をかぶっています。私たちは正しいと思います。それを修正する必要があると思います:-p

于 2012-04-27T08:34:44.653 に答える
2

クリック イベントは、異なる要素や異なるブラウザー間で一貫性のない動作をすることが知られています。その中心では、単一の要素がマウスダウンに続いてマウスアップを記録すると、クリックイベントが発生するはずです。 jquery docを参照してください。

私が聞いた最高のアドバイスはここからです:

これが問題になるかどうかは、必要なユーザー インタラクションによって異なります。ただし、クリックイベントのみが必要であることが完全に確実でない限り、通常は onmousedown/up スクリプトを登録する必要があります。

したがって、質問へのコメントに同意して、最も簡単な解決策は、マウスダウンまたはマウスアップに登録することです(どちらが探しているかによって異なります。「クリック」に最も近い動作は「マウスアップ」です)

于 2012-04-13T15:51:30.857 に答える