我在表单中检测未保存的数据,以便在用户离开页面时发出警告。除了primefaces日历元素之外,这对所有元素都有效。
目前,我的方法与此answer有关。但这不适用于日历元素。我发现更改侦听器通常不能用于以编程方式设置值。可能这是我的问题的原因。因此,我尝试通过向所有日历元素注册click和blur listener来实现我自己非常简单的“更改侦听器”。在单击侦听器中,我暂时保存日历元素的当前值。在模糊侦听器中,我将保存的值与当前值进行比较。但是这种方法不起作用,因为我无法在模糊侦听器中获取日历元素的更改值。我试图通过几种方式获得价值:
$(this).val();
this.value;
$(this).html();
$(this).attr('value');
但在每种情况下,我都会得到旧价值。所以我认为“简单的改变监听器” - 方法也不起作用。
我的主要版本是3.4.2。
JSF实现(可能不相关)是:Mojarra 2.1.6
答案 0 :(得分:3)
我对primefaces一无所知,但它使用了jquery ui日历。因此,您可以使用它的onSelect选项来检测更改。
$('.hasDatepicker').each(function() {
var onSelect = $(this).datepicker('option', 'onSelect');
$(this).datepicker('option', 'onSelect', function() {
// some change happend here, set your flag that the form is dirty e.g.
setConfirmUnload(true);
// we call the original onSelect to not break the primefaces ajax change event
if(onSelect) { return onSelect.apply(this, arguments); }
});
});