按键上禁用ajax表单按钮

时间:2012-08-29 02:50:24

标签: javascript css ajax google-chrome

我在Ajax表单上有一个按钮,当按下该按钮时,向用户表明它正在“搜索”一种小的“悸动”,以便在查询数据库时保持用户占用。

单击提交按钮后,它将转到某个功能。该函数将禁用该按钮,收集表单上填写的内容,执行Ajax调用(非异步 - 意味着脚本在调用完成之前等待完成,然后再转到下一行代码)然后重新执行 - 启用按钮。

像这样:

function CheckForm()
{
    disableButton(document.getElementById("save"));


    ....... lots of instructions in here ........
    ....... Loops through every form el .........


    //Ajax called
    CallAjax(sUrls, sParams);

    enableButton(document.getElementById("save"));

}


function disableButton(element)
{
    try
    {
        disabledEl = element.id
        disabledElOrigTxt = element.value;
        element.value = '    Loading...'

        addClass(element, "pleaseWait");
        addClass(document.myForm.reset, "resetWait");

        element.disabled = true;
        document.myForm.reset.disabled = true;

        //return true;
    }
    catch(e)
    {
        ////SHHHHHH
    }   
} 

function enableButton(element, timer)
{
    try
    {
        if(element.value == '  Loading...')
            element.value = disabledElOrigTxt;  

        removeClass(element, "pleaseWait");
        removeClass(document.myForm.reset, "resetWait");
        element.disabled = false;
        document.myForm.reset.disabled = false;
        clearTimeout(timer);
        return true;
    }
    catch(e)
    {
         ////SHHHHHH
    }
}


function hasClass(element, className)
{
    var classes = element.className.split(' ');
    var len = classes.length;
    for (var i=0; i<len; i++) 
    {
    if (classes[i] == className)
        return true;
    }
    return false;
}

function addClass(element, className)
{
    if (!hasClass(element, className))
        element.className = (element.className == '' ? className : element.className + ' ' + className);
}

function removeClass(element, className)
{
    var newValue = '';
    var classes = element.className.split(' ');
    var len = classes.length;
    for (var i=0; i<len; i++)
    {
    if (classes[i] != className)
            newValue += newValue.length ? ' ' + classes[i] : classes[i];
    }
    element.className = newValue;
}

这适用于Mozilla,IE,但不适用于CHROME。任何人都知道为什么?

如果我在try的最后一行修改disableButton()并使其警告(“hi”),在Chrome中我可以观察到按钮更改....但是只有我在那里发出警报才能停止脚本。显然这不是我想做的事。

1 个答案:

答案 0 :(得分:0)

也许您的CallAjax()功能在Chrome中异步工作?

另一种可能性,也就是Chrome可以快速处理它而你没有注意到这些变化?