Это довольно сложно, поэтому я постараюсь объяснить это как следует.
У меня есть веб-приложение, в котором я хочу разрешить пользователям изменять цвет фона некоторых div. Для этого я хотел бы использовать интерфейс выбора цвета, и я хочу использовать событие contextmenu
в целевых div, чтобы открыть его, поскольку у них уже есть другое поведение, привязанное к событию щелчка.
Итак, идея состоит в том, чтобы цвет типа ввода был скрыт на экране, присоединить его событие щелчка к событию contextmenu
на целевых div и изменить цвет фона целевых div при событии изменения цвета типа ввода.
Забавно то, что когда я пытаюсь связать события, палитра цветов не открывается, если ее событие click вызывается из contextmenu
обработчика событий, но открывается, если вызывается из события click.
Использование jQuery для простоты и ясности кода:
//this works perfectly, color picker opens
$("#myTargetDiv").on("click", function() {
$("#inputTypeColor").trigger("click");
});
//this fails miserably
$("#myTargetDiv").on("contextmenu", function() {
$("#inputTypeColor").trigger("click");
return false;
});
Самый странный факт заключается в том, что если я использую третий элемент для передачи события, скажем, например, что я вызываю текст промежуточного типа ввода, который передает вызов от myTargetDiv
к inputTypeControl
, событие щелчка в промежуточном элементе срабатывает (даже при вызове из contextmenu
обработчика событий), в то время как событие в цвете типа ввода не срабатывает.
Но если вы нажмете прямо на текст промежуточного типа ввода, откроется палитра цветов!
//If you right click on myTargetDiv "firing!" appears on console, but color picker doesn't opens
$("#myTargetDiv").on("contextmenu", function() {
$("#intermediateElement").trigger("click");
return false;
});
//If you click on intermediateElement, however, the color picker opens!!!
$("#intermediateElement")on("click", function() {
console.log("firing!");
$("#inputTypeColor").trigger("click");
});
Я воспроизвел это поведение в Firefox и Chrome, и я не очень уверен, что это ожидаемая функция, ошибка в реализации цвета типа ввода в браузерах или проблема с обработкой событий из jQuery (я сам не пробовал запускать события пока что).
https://jsfiddle.net/bardobrave/0z6ev4rd/1 Если вы нажмете FIRE! палитра цветов открывается, но если вы щелкнете по ней правой кнопкой мыши, палитра цветов не откроется, несмотря на то, что если вы щелкнете по тексту типа ввода, это произойдет.
Кто-нибудь может дать некоторое представление по этому поводу?
click
события и не может запускаться другими событиями. Повозившись со своей скрипкой, вы можете увидеть, как все загорается: jsfiddle.net/Twisty/0z6ev4rd/2 но поскольку это не событие щелчка, средство выбора не открывается. Так что, если вы хотите создать меню, которое создается, а затем выбирается параметр «Цвет», это сработает. - person Twisty   schedule 28.01.2016