好吧,这是非常棘手的,所以我会尽力解释它。如果在contextmenu事件中调用输入类型的颜色点击事件失败
我有一个web应用程序,我想,让我的用户更改一些div的背景色。要做到这一点,我想使用颜色选择器界面,并且我想在目标div上使用contextmenu事件来打开它,因为它们已经具有另一个附加到click事件的行为。
这样的想法是有一个输入型的颜色隐藏在屏幕上,附上其Click事件对目标的div contextmenu事件,改变目标的div的背景颜色输入型彩色变化的事件。
有趣的事情是,当我尝试链接事件,颜色选择器不会打开,如果其单击事件是从contextmenu事件处理程序中调用,但它确实如果从点击事件中调用。
使用jQuery代码简单和cleariness
//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,中间元素中的click事件触发(即使在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的一个问题(我的错误还没有尝试自己发起这些事件)。
任何人都可以对此事提供一些见解?
你能做出这个的jsfiddle所以我们可以看到你在做什么的例子?这个问题有点模糊,现在也没有联系。 – Twisty
@Twisty https://jsfiddle.net/bardobrave/0z6ev4rd/1/如果你点击“FIRE!”颜色选择器会打开,但如果右键单击该颜色选择器,即使您单击它的输入类型文本,颜色选择器也不会打开。 – Bardo
好的,所以看起来HTML5拾色器只响应'click'事件,并且不能被其他事件触发。在你的小提琴中修修补补,你可以看到一切火:https://jsfiddle.net/Twisty/0z6ev4rd/2/,但由于它不是一个点击事件,选取器不会打开。所以,如果你想让自己创建一个菜单,然后点击颜色选项,这将工作。 – Twisty