Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于变递归函数_Javascript_Jquery_Recursion_Datepicker_Onchange - Fatal编程技术网

Javascript 关于变递归函数

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()); }); 这是简化版

有趣的问题,请帮忙

我有一个产品列表页面。每个产品都有自己的日期输入字段。 当您更改一个产品的日期时,所有其他产品都需要获得相同的日期(如果我将第一个产品的日期设置为2018年1月1日。所有其他产品的日期字段将填充为2018年1月1日)

我正在做的是:

$('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编辑;
});