Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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_Asynchronous_Events_Dom Events - Fatal编程技术网

Javascript 处理只有一个调用有效时被调用两次的事件处理程序的最合乎逻辑的方法。

Javascript 处理只有一个调用有效时被调用两次的事件处理程序的最合乎逻辑的方法。,javascript,asynchronous,events,dom-events,Javascript,Asynchronous,Events,Dom Events,使用prime react的数据表。它有一个事件处理程序“OnRowSelect”。 此事件有一个参数,说明如何从行本身或表左侧的复选框中选择行 但是,使用复选框时会导致事件触发两次。 先用“复选框”,然后用“行” 我对每种选择类型都有单独的方法,如果先调用“checkbox”,则需要取消“row”调用的副作用,以便只获得“checkbox”事件的副作用 以前,在这种情况下,我有一个timeout方法,它设置了一个“标志”,下一次调用会查找该标志,如果该标志被触发,它就不会运行。但是,由于竞争条

使用prime react的数据表。它有一个事件处理程序“OnRowSelect”。 此事件有一个参数,说明如何从行本身或表左侧的复选框中选择行

但是,使用复选框时会导致事件触发两次。
先用“复选框”,然后用“行”

我对每种选择类型都有单独的方法,如果先调用“checkbox”,则需要取消“row”调用的副作用,以便只获得“checkbox”事件的副作用

以前,在这种情况下,我有一个timeout方法,它设置了一个“标志”,下一次调用会查找该标志,如果该标志被触发,它就不会运行。但是,由于竞争条件,如果在“Checkbox”事件之前调用了“row”,那么它将运行,并且复选框将运行

这是可行的,但我想知道是否有更合适的方法


请注意,我不是在寻找某种谴责,因为参数不同,两个调用之间可能存在一些竞争条件。

可能是您可以使用css
指针事件:无打开复选框并按代码控制复选框。
单击复选框时,不会触发复选框单击事件。只有tr click事件

注意浏览器兼容性,它不支持IE10

函数onRowSelectHandle(){ document.querySelector(“#myCheckBox”).checked=!document.querySelector(“#myCheckBox”).checked; console.log(“选定行”); }

桌子{
背景:黄色;
宽度:300px;
}
输入{
宽度:40px;
高度:40px;
}
#我的复选框{
指针事件:无;
}
指针事件属性

在复选框中单击事件,执行以下操作。问题是,当您单击复选框时,由于复选框位于行内,所以事件会冒泡。你必须停止这种行为。使用超时和标志更多的是补丁工作是的,这是正确的答案。首先应该想到这一点,但不确定是否存在这样的解决方案,因为事件是由另一个库而不是普通的web-events创建的。即使您的事件是通过库触发的,您也在向它传递回调。所以你必须在那里处理。若并没有,那个么可以在行上添加一个处理程序并检查目标元素