我当前正在验证日期框小部件,以防止在30天的宽限期后提交。日期验证工作正常,但是在警报提示之后,它并没有下降(即使单击几次,我仍然有库存)。而且日期框不会为空。
function checkDateValidate(widget) {
var form = app.pages.Newitem.descendants;
var otdate = form.otDateBox.value;
var date = new Date();
var pastdate = date.setDate(date.getDate() - 31);
if(otdate <= pastdate) {
alert('Date exceeds within 30 days grace period is invalid.');
form.otDateBox.value = null;
}
}
我希望清除日期框小部件。
答案 0 :(得分:0)
有时会发生此错误,因为正在进行无限循环,这是您的情况。了解 onValueChange 事件处理程序和 onValueEdit 事件处理程序之间的区别非常重要。
onValueChange :
只要此小部件的value属性发生更改,此脚本就会在客户端上运行。可以使用参数Widget引用该Widget,并将其新值存储在newValue中。
onValueEdit :
每当用户编辑此窗口小部件的值时,该脚本就会在客户端上运行。可以使用参数小部件来引用该小部件,并且该小部件的新值存储在newValue中。与onValueChange()不同,此操作仅在用户更改窗口小部件的值时才运行;它不会响应绑定或以编程方式设置该值时运行。
由于您的逻辑是在 onValueChange 事件处理程序上设置的,因此每次 dateBox 小部件值更改时都会触发此事件,即使是通过编程方式也是如此;因此,form.otDateBox.value = null;
一遍又一遍地触发逻辑。一遍又一遍地触发它的原因是由于您的比较逻辑:
if(otdate <= pastdate)
此处,当转换为数字Number(null)
时, otdate 的值变为空,值为 0 (零) 。 pastdate 的值显然是一个大于零的数字,例如 1555413900712 。显然,零小于或等于1555413900712,这就是为什么您触发无限循环的原因。
因此,总而言之,只有一种方法可以解决此问题。在 onValueEdit 事件处理程序中设置逻辑,而不是在 onValueChange 中设置逻辑。