我構建了一個小型顏色選擇器模塊。但是當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