Javascript 关于变递归函数
有趣的问题,请帮忙 我有一个产品列表页面。每个产品都有自己的日期输入字段。 当您更改一个产品的日期时,所有其他产品都需要获得相同的日期(如果我将第一个产品的日期设置为2018年1月1日。所有其他产品的日期字段将填充为2018年1月1日) 我正在做的是:Javascript 关于变递归函数,javascript,jquery,recursion,datepicker,onchange,Javascript,Jquery,Recursion,Datepicker,Onchange,有趣的问题,请帮忙 我有一个产品列表页面。每个产品都有自己的日期输入字段。 当您更改一个产品的日期时,所有其他产品都需要获得相同的日期(如果我将第一个产品的日期设置为2018年1月1日。所有其他产品的日期字段将填充为2018年1月1日) 我正在做的是: $('input[name="productDate"]').on('change', function () { $('input[name="productDate"]').val($(this).val()); }); 这是简化版
$('input[name="productDate"]').on('change', function () {
$('input[name="productDate"]').val($(this).val());
});
这是简化版。我使用jquery datepicker和alternative字段,在手动设置日期时触发更改事件。
所以我愚蠢的递归函数永远运行,直到
超出最大调用堆栈大小错误
在列表中的每个日期更改后,如何停止此函数的运行?还是有更聪明的办法
不要问我为什么不为所有产品设定一个输入日期。。。不由我来决定。您可以循环遍历每个元素,并且仅当值不同时才更改值
$('input[name=“productDate”]')。在('change',函数(){
var值=$(this.val()
$('input[name=“productDate”]')。每个(函数(){
if($(this).val()!=值){
$(this).val(value).change()//只是一个触发器测试
}
})
});代码>
Javascript有一个方法stopPropagation()
,用于阻止操作触发更多事件。它在你的情况下应该是有用的
$('input[name=“productDate”]')。关于('change',函数(e){
$('input[name=“productDate”]').val($(this.val());
e、 停止传播();
});代码>
解决方案1:
一个简单的解决方案是添加一个标志,如果前一个更改已经在进行中,则停止传播该更改;请参阅下面的代码片段
解决方案2:
检查输入值是否已经相同
解决方案3:
最简单的解决方案是简单地调用event.stopprPosition。实际上,这是我想要的解决方案,但我不确定在应用程序中是否需要将事件传播到其他地方
$('input[name=“productDate”]')。在('change',function()上{
如果(此编辑){
返回;
}
这是.\uu editing=true;
$('input[name=“productDate”]').val($(this.val());
删除此项。\u\u编辑;
});代码>