2

Ajaxフォームにボタンがあり、押すと、DBのクエリ中にユーザーを占有し続けるために、小さな「スロバー」のような「検索」であることをユーザーに示します。

送信ボタンをクリックすると、関数に移動します。その関数は、ボタンを無効にし、フォームに入力された内容を収集し、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 では機能しません。誰でも理由がわかりますか?

disableButton() を変更して、try の最後の行で alert("hi") にすると、Chrome でボタンの変更を確認できます....ただし、アラートをスローしてスクリプトを停止した場合のみです。明らかに、それは私がやりたいことではありません。

4

1 に答える 1

0

多分あなたのCallAjax()関数は Chrome で非同期に動作しますか?

別の可能性として、Chrome の処理速度が速すぎて変更に気付かない可能性があります。

于 2012-08-30T21:33:49.870 に答える