Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.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 jQuery:onsubmit在onclick之前被调用_Javascript_Jquery_Google Chrome - Fatal编程技术网

Javascript jQuery:onsubmit在onclick之前被调用

Javascript jQuery:onsubmit在onclick之前被调用,javascript,jquery,google-chrome,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) {

我有一段代码:

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
变量是未定义的,因为在提交时在单击之前调用。你知道这个代码有什么问题吗?或者问题出在Chrome本身?我怎样才能更正此代码,使其在Chrome上也能正常工作?

我也遇到过这种情况

唯一的解决方案是使用setTimeOut。您可以在提交时使用setTimeOut,让click事件在提交之前执行


只是不要给定时器一个很高的值

一般来说,您希望避免两个项目之间出现这种竞赛情况

当无法避免时,您可以通过在需要最后执行的代码上设置延迟来破解它,如下所示:

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

var值;
$(“#frmEditDocument:submit”)。在('click',函数(e){
valueClicked=e.target.value;
});
$('frmEditDocument')。在('submit',函数(){
setTimeout(函数(){
console.log(valueClicked);
}, 100);
返回false;
});

问题:这只是一个理论测试吗?显然,解决这个问题的办法是只处理其中一个事件,而不是同时处理两个事件。@Satpal我的想法是一样的,但它不起作用:。作为一个功能请求,是否值得添加?我无法复制此功能?题目anyway@RoryMcCrossan同意作为一项功能添加的价值request@romanoza在这种情况下,那么可能不处理提交事件?有一个click事件处理所有可能的submit按钮(看起来您已经有了),然后在完成所有其他必要的处理后,手动调用父窗体的submit方法。