Javascript Primefaces Color Picker,如何获取ajax更改事件
我希望在更改时将从Primefaces颜色选择器中选择的颜色发送到我的后端 但这似乎没有得到支持Javascript Primefaces Color Picker,如何获取ajax更改事件,javascript,jsf,jsf-2,primefaces,Javascript,Jsf,Jsf 2,Primefaces,我希望在更改时将从Primefaces颜色选择器中选择的颜色发送到我的后端 但这似乎没有得到支持 <p:colorPicker value="#{colorView.colorPopup}" /> 我可以看到它会在提交页面时提交值 <p:colorPicker value="#{colorView.colorPopup}" /> <p:commandButton value="Submit" oncomplete="PF('dlg').show()
<p:colorPicker value="#{colorView.colorPopup}" />
我可以看到它会在提交页面时提交值
<p:colorPicker value="#{colorView.colorPopup}" />
<p:commandButton value="Submit" oncomplete="PF('dlg').show();" update="grid" />
即使在更改时调用一些Javascript也会很好
更新: 我想支持豆更新颜色的变化,而不仅仅是当我提交表格
这样做的主要原因是我在页面上有几个颜色选择器,并且表单已提交,我不知道哪个值来自哪个颜色选择器。在更改颜色选择器时使用ajax调用是个坏主意,当用户通过拖动调色板中的选择器来选择颜色时,可能会出现100个排队的ajax调用 因此,
onHide
将更好地发挥作用。在这种情况下,我将演示两个事件的实现,并推荐onHide
一旦改变
隐藏
colorPickerWV
是widgetVar名称
这是这个对象
您可以使用onChange
eventhandler,通过添加一个超时,该超时在每次“更改”时重置,并且仅在未更改x毫秒后触发(在本例中为250秒),它可以完美地工作。请记住,我在这里使用组件的widgetVar值是为了让它在页面中的特定颜色选择器上工作,而不是自动地在所有这些选择器上工作
var oldonChange = PF(widgetVar).cfg.onChange;
$(document.body).children('.ui-colorpicker-container').each(
function(i, element) {
var overlay = $(element), options = overlay.data('colorpicker');
if (options.id == PF(widgetVar).id) {
_self = PF(widgetVar);
options.onChange = function(a, b, c) {
oldonChange.apply(_self, [a, b, c ]);
clearTimeout(_self.submitTimer);
_self.submitTimer = setTimeout(function() {
console
.log('Data is changed: should be remoteCommand with process of the colorPicker')
//The call below is what the name of the remote command is
//window[widgetVar+"_change"]();
}, 250);
}
}
}
)
如果您有多个颜色选择器,您可以这样做:
document.body.onload = function() {
$(".ui-colorpicker-container").each(function() {
$(this).data('colorpicker').onHide =
function() {
updateMiniPreview();
}
})
};
“UpdateMipReview”函数是一个p:remoteCommand,用于更新目标区域:
<p:remoteCommand update="miniPreview" name="updateMiniPreview" />
除了设置colorpoop
值之外,您还想执行一些操作吗?或者您已经对此进行了测试,并且认为在非ajax提交之前该值没有更新?您可以在onChange中添加一个超时,因此更改只会每隔x毫秒发送到服务器。如果您添加一个setTimeout,您仍然在对这些ajax请求进行排队,但会有一点延迟!不,因为只有当超时触发时,您才执行remotecommand。每次更改时,您都会重置超时。如果我有它的工作,我会张贴一个例子,即使你重置超时,后端在某一点上不会有一个值!对不起,什么时候会这样?PrimeFaces微调器也会这样做
document.body.onload = function() {
$(".ui-colorpicker-container").each(function() {
$(this).data('colorpicker').onHide =
function() {
updateMiniPreview();
}
})
};
<p:remoteCommand update="miniPreview" name="updateMiniPreview" />