jQuery:在点击之前调用提交

时间:2016-11-16 11:05:52

标签: javascript jquery google-chrome

我有这段代码:

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上正常运行?

2 个答案:

答案 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>