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方法。