2011-07-21 12 views
0

ユーザーがボタンをクリックしたときなど、入力フィールドがすべて無効になるようにアプリケーションを更新する必要があります。ここに私はこれまでにjavascriptのために持っているものです。次の作品とすべて、それで心配はありません。Javascriptの無効化とタイミング

function disableAllInputs() { 
    var inputs = getAllInputs(); 
    for (i = 0; i < inputs.length; i++) { 
     inputs[i].disabled = true; 
    } 
} 


function enableAllInputs() { 
    var inputs = getAllInputs(); 
    for (i = 0; i < inputs.length; i++) { 
     inputs[i].disabled = false; 
    } 
} 

function getAllInputs() { 
    var inputs = document.getElementsByTagName('input'); 
    var selects = document.getElementsByTagName('select'); 

    var allInputs = new Array(); 

    var counter = 0; 
    for (i = 0; i < inputs.length ; i++) { 
     allInputs[counter] = inputs[i]; 
     counter++; 
    } 
    for (i = 0; i < selects.length; i++) { 
     allInputs[counter] = selects[i]; 
     counter++; 
    } 

    return allInputs; 
} 

は今、私のHTMLに、私は基本的にこれを持っている:

<form name="MyForm" method="post" action="MyAction.do" onsubmit="onSubmit();"> 
    //form code 
    <input type="submit" value="Save" name="submit" onclick="onSaveClick()" > 
</form> 

すべてが正常に動作するように見えます。しかし、私はそれをすべてテスト可能にする必要があります。私はすべてが凍結し、テスターがすべてが無効になっていることを確認することができるように遅延を入れたいと思います。しかし、この一時停止は、一時的なもので、可能な副作用なしにすぐに取り外し可能でなければなりません(つまり、 )関数を呼び出し、呼び出しを削除するだけです)。ここで

は、いくつかの問題があります:

1 - 私はonSaveClick方法でdisableAllInputsメソッドを呼び出す場合、フォームは、(ボタンが無効になっていたので、私は仮定)を提出しません。

2 - 私がonSubmitメソッドでdisableAllInputsメソッドを呼び出すと、一時停止が機能しないように見えます。

ボタンを無効にした後、フォームの提出をシームレスに一時停止する方法について考えてもらえますか?私はsetTimeoutなどを認識しています。私はちょうど使用する適切なコールの場所などを見つけることができません。フォームを一時停止して最終的にフォームを送信するようなものはありません。

また、JSを別の.jsファイルに入れておきたいので、ファイルをインクルードして、適切な場所にdisableAllInputsメソッドを追加すればいいと思います(つまり、 onSubmitメソッドのタイムアウトなど)。

+0

間にアラートを追加すると、すべてのことを確認できます。 –

+0

OnSubmitとonSaveClickを呼び出す点は何ですか? –

+0

レガシーコード。ボタンが2つ以上あるなど。 –

答えて

1

まあ、いろいろな方法でポーズを挿入できますが、それらのメソッドはすべてポーズ中にページ全体が反応しなくなる原因になります。これの最も簡単な例は警告ボックスです。 (SJAX-Synchronous AJAXを使用することもできます)

存在しない関数を呼び出すなど、致命的なエラーを引き起こしてコードを停止することができます。 stopJavascript();しかし、これでコードはもう使えなくなります。

他の唯一のオプションは、関数を2つの関数に分割し、setTimeoutを使用して、最初の関数の後に2番目の関数の呼び出しを遅延させることです。しかし、これは実装するのが難しく、削除するのが難しいでしょう。

+0

私はアラートボックスに行くことになった。これにより、ユーザーは無効化されたボタンを表示し、完了したら「OK」をクリックすることができます。あまりにも悪いことは、すべてのJSを一時停止する方法はありません=(しかし、助けてくれてありがとう。 –

関連する問題