【问题标题】:jscolor picker, how to use onchange event for a button?jscolor选择器,如何为按钮使用onchange事件?
【发布时间】:2017-06-14 13:53:51
【问题描述】:

我正在使用来自 East Desire 的 jscolor v2.0.4。一切正常,但如果我使用按钮,onchange 事件将不起作用。

在网页上的onchange 事件示例中使用了一个输入字段。但我使用按钮元素,这里只有onFineChange 事件可能。为什么?

这是我的代码:

<button style="border:2px solid black; width:80px; height:30px" class="jscolor {valueElement:'chosen-value', closable:true,closeText:'Close me!', onFineChange:'updateColor(this)'}">Pick color</button>
R, G, B = <span id="rgb"></span>

<script>
function updateColor(picker) {
    document.getElementById('rgb').innerHTML = Math.round(picker.rgb[0]) + ', ' + Math.round(picker.rgb[1]) + ', ' + Math.round(picker.rgb[2]);
}
</script>

如果我将onFineChange 更改为onchange,则它不起作用。我能做什么?

【问题讨论】:

  • 为什么不使用onclick 事件?按钮不支持onchange 事件,如果您考虑一下,它们在技术上需要更改value。你可以看到onchangeon the W3Schools onChange Docs支持的元素
  • onchange 和 onFineChange 在 jscolor 实现中。如果我在颜色字段上拖动,onFineChange 事件会更频繁地触发。 onchange 事件仅在颜色选择器中释放鼠标按钮后触发。我需要这个。

标签: javascript html onchange jscolor


【解决方案1】:

您必须注意示例标记。 onchange 是输入元素的一部分,而不是 jscolor 实现的一部分。

<input class="jscolor" onchange="update(this.jscolor)" value="cc66ff">

<input class="jscolor {onFineChange:'update(this)'}" value="cc66ff">

如果您看到标记,那么您就会明白 onchange 不是 jscolor 的实现。

如果您查看 jscolor 的源代码,您也会发现这一点。 onChange 仅在 inpyt 类型元素上触发,而不是在按钮上触发

dispatchChange : function (thisObj) {
        if (thisObj.valueElement) {
            if (jsc.isElementType(thisObj.valueElement, 'input')) {
                jsc.fireEvent(thisObj.valueElement, 'change');
            }
        }
    },

参考:https://github.com/EastDesire/jscolor/blob/master/jscolor.js#L671

所以如果你想要 onchange 事件,那么你必须将你的按钮更改为输入类型

或者你可以创建 input type="button" 然后监听 onchange 事件,因为插件只关心输入而不关心类型

<input class="jscolor" id="btnPicker" type="button">
<script>

document.getElementById('btnPicker').addEventListener('change', function(e){
    updateColor(this.jscolor)
})
function updateColor(picker) {
    document.getElementById('rgb').innerHTML = Math.round(picker.rgb[0]) + ', ' + Math.round(picker.rgb[1]) + ', ' + Math.round(picker.rgb[2]);
}
</script>

【讨论】:

  • 感谢您的回答和解释。释放颜色选择器上的鼠标按钮后是否有机会触发事件?
  • 你可以创建一个输入类型的按钮并监听假事件onchange。让我用那个代码更新答案
  • 非常感谢您的帮助。 一切正常 :) 它帮助我完成了通过 wifi 控制 LED 条纹的 IOT 项目。
  • 这是个好消息!!!。快乐的编码和实验人。万事如意!
猜你喜欢
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多