我构建了一个小型颜色选择器模块。但是当pickColor被第二次调用时它只会打开(然后工作)。我也尝试将_openColorPicker
换成setTimeout
,但那也不起作用。事实上,当我这样做时,颜色选择器根本没有出现。手动点击事件仅触发第二次点击
我发现有趣的是,绑定到change事件的作品,所以$选择器必须已经找到该元素。
所以我有两个问题:
1)为什么选取器仅第二次调用_openColorPicker
后显示?
2)为什么在我打包setTimeout
的_openColorPicker
呼叫时没有打开?
编辑:_openColorPicker
函数在用户右键单击文档后单击现在显示的上下文菜单后执行。
完整代码:
const ColorUtils = {
_initialized: false,
_openColorPicker: function() {
$('#color-picker').click();
},
pickColor: function (onChangeCallback, context) {
if (!this._initialized) {
$('<input/>').attr({
type: 'color',
id: 'color-picker',
display: 'hidden',
value: '#ffffff'
}).appendTo('#centralRow');
this._initialized = true;
$('#color-picker').on('change', onChangeCallback.bind(context));
}
this._openColorPicker();
// version with timeOut
const scope = this;
setTimeout(function() {
scope._openColorPicker();
}, 1000);
}
};
export default ColorUtils;
上面的代码使用像ColorUtils.pickColor(onColorPicked, this);
嗯,不这样做。仍然只有第二次点击后。此外,我可以触发点击,而不是第一次。如果我将元素设置为显示,它的工作原理是相同的:none例如 – MJB