2012-04-13 3 views
8

Учитывая следующий HTML:Почему Opera не бросает событие щелчка, когда вы частично отмечаете текст?

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

и некоторые JS, который обнаруживает событие щелчка с JQuery:

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

При выборе часть текста в DIV, событие щелчка будет не быть брошен Opera (протестирован с Opera 11.61 на Linux и 11.62 на Windows). Двойной щелчок на слове, чтобы его частично отметить делает работы.

Событие -, брошенное в IE7-9, Firefox, Chrome и Safari. Существует немного измененный JSFiddle here.

Это ожидаемое поведение, ошибка JQuery, ошибка Opera или что-то еще?

+2

Это звучит как ошибка браузера. Вы пробовали «mousedown» или «mouseup» в качестве обходного пути? –

+0

О, я сделал это сейчас, и это работает как обходное решение, спасибо! Я все равно хотел бы найти причину для оригинальной проблемы. – kvikshaug

+0

Поддерживает ли Opera это событие onselect, но с его отсутствием в событии onselect? – Greg

ответ

2

Какое поведение является «правильным», это, безусловно, интересный вопрос. Я беру на себя это: я лично считаю, что поведение Opera имеет больше смысла, поскольку то, что пользователь намеревается сделать здесь, явно не «нажимать» что-то, а «что-то» выбирать.

С другой стороны, я также думаю, что Opera должна изменить его совместимость с другими браузерами (если мы не сможем заставить другие браузеры соответствовать Opera). Совместимость очень важна. Итак, поговорив с моей службой поддержки Opera, я думаю, что мы правы, и я думаю, что мы должны исправить это :-p

+0

Я думаю, это так же официально, как и все :) – kvikshaug

2

Известно, что события Click имеют непоследовательное поведение между различными элементами и разными браузерами. Предполагается, что событие щелчка будет запущено, когда один элемент записывает мухаузу, а затем мышь, см. jquery doc.

Лучший совет, который я слышал от here:

ли это или не проблема, зависит от взаимодействия с пользователем вы хотите. Но вы должны вообще зарегистрировать свой скрипт onmousedown/up, если вы не уверены, что хотите событие click и ничего больше.

Таким образом, в соответствии с комментариями к вашему вопросу, самое простое решением является регистрацией на MouseDown или MouseUp (который один зависит от поведения, которого вы ищете, ближайшее поведение «нажмите» будет «MouseUp ')

+0

Хотя я согласен с тем, что вы говорите, на самом деле он не отвечает на вопрос о поведении Opera и о том, является ли это предполагаемым поведением или ошибкой. Если вы на самом деле не говорите, что это намеренно не определено, в этом случае вам придется поправить меня. – kvikshaug

+0

Вы правы, у меня нет ответа на это. По сравнению с множеством программных API, я обнаружил, что большинство объектов текста и контейнера не имеют событий щелчка, которые обычно появляются на пользовательских интерактивных элементах, таких как кнопки. Поэтому неудивительно, что он не определен в контейнере div в вашем примере. Если бы вы действительно хотели знать, я бы послал поддержку Opera или запустил пост на форумах Opera, у них там действительно хорошее сообщество. – Sogger