我有这段代码:
var valueClicked;
$("#frmEditDocument :submit").on('click', function (e) {
valueClicked = e.target.value;
});
$('#frmEditDocument').on('submit', function () {
if ($(this).valid()) {
if (valueClicked == undefined) {
alert("ValueClicked is undefined");
return false;
}
$("#buttonId").val(valueClicked);
$(this).find(':submit').prop('disabled', 'disabled');
return true;
}
else
return false;
});
所有内容都按预期工作几乎总是(在提交表单后,按钮显示为灰色)。但是在某些随机情况下仅在Chrome上valueClicked
变量未定义,因为 on click 在点击之前被调用。您有任何想法这个代码有什么问题吗?或者问题出在Chrome本身?如何更正此代码才能在Chrome上正常运行?
答案 0 :(得分:1)
这也发生在我身上。
唯一的解决方案是使用setTimeOut。您可以在提交时使用setTimeOut让click事件在提交之前执行。
只是不要为计时器提供非常高的价值。
答案 1 :(得分:1)
一般来说,你想要在两个事件之间避免这种竞争条件。
当无法避免时,您可以通过延迟最后执行的代码来破解它,如下所示:
<script>
var valueClicked;
$("#frmEditDocument :submit").on('click', function (e) {
valueClicked = e.target.value;
});
$('#frmEditDocument').on('submit', function () {
setTimeout(function () {
console.log( valueClicked) ;
}, 100);
return false;
});
</script>