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事件同步问题_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript事件同步问题

Javascript事件同步问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,关于javascript中onblur和onclick事件处理程序执行的同步,我有一个很小但非常重要的问题 实际上,我有一个html表单,包含一个文本框和一个提交按钮。onblur放在textbox上,此处理程序执行一个名为ajexValidation()的方法。Submit按钮与执行ajexSubmitData()的onclick hndler关联。 在这两种情况下都使用Ajex处理程序,因为输入的日期将从远程服务器进行自我验证,并重新运行已验证的数据并在文本字段中分配数据 在onclick的

关于javascript中onblur和onclick事件处理程序执行的同步,我有一个很小但非常重要的问题

实际上,我有一个html表单,包含一个文本框和一个提交按钮。onblur放在textbox上,此处理程序执行一个名为ajexValidation()的方法。Submit按钮与执行ajexSubmitData()的onclick hndler关联。 在这两种情况下都使用Ajex处理程序,因为输入的日期将从远程服务器进行自我验证,并重新运行已验证的数据并在文本字段中分配数据

在onclick的情况下,handler将验证数据提交给远程服务器以查询其他详细信息

这是页面的常见流程

但是有一些问题

当用户单击submit按钮时,首先单击onblur,然后单击onclick

现在数据正在服务器上的验证过程中,onclick开始执行ajexSubmitData(),这会导致问题,因为该过程是-首先验证dat,然后将验证数据发送到服务器进行查询, 您可以说是偶数同步问题

所以我只需要跟踪onblur方法完成通知并暂停onclick方法的执行并等待该通知。收到通知后,启动ajexSubmitData()

任何帮助都将受到高度重视


-rajneesh

为什么不使用发送的相同方法进行验证。只是一个想法。另一个方法是一直禁用“提交”按钮,直到所有内容都得到验证。

您可以这样做:

var globalFlag = WAITING;
function onBlur_validateData() { // your "AjexValidation"
    sendAjaxRequest( function(data) { // this is the call back on ajax request completion
        if( data was valid )
            globalFlag = VALID;
        else
            globalFlag = INVALID;
    });
}

function onClick_submitData() { // wrapper around your "ajexSubmitData"
    if( globalFlag==WAITING )
        setTimeout( onClick_submitData, 200 );
    else if( globalFlag==INVALID )
        alert( "Your input was invalid!" );
    else ajexSubmitData();
}

function ajexSubmitData() {
    // do your stuff
}
现在,
globalFlag
可能是对象的一部分,或者是全局可访问的任何东西

此外,请确保“提交”按钮在单击后被禁用

注意setTimeout调用是如何创建“线程中的递归循环”的。这将防止您的UI在代码等待验证完成时挂起

干杯


jrh.

为什么不使用form.onsubmit事件触发您的验证代码,并让验证在成功时调用submit函数?通过这种方式,您可以覆盖默认提交,如果没有Javascript,您仍然可以返回到标准提交?

不行。。我可以把它们加密吗?为什么不能?顺便说一句,客户端验证是一种工具,而服务器端验证是必须的。