2011-12-23 18 views
1

この問題に対する他の答えはタイミングを扱いますが、この問題はif文内のjavascriptの一部をリフレッシュすることを扱います。JavaScriptの一部分だけをリフレッシュすることはできません

HTMLページが読み込まれると、1つの選択要素が表示されます。どのオプションが選択されているかに応じて、異なる入力フィールドが表示されます。

私の最初の問題は、ユーザーがボタンをリクライニングしたときに、「Submit()」を実行した関数が、同じ入力フィールドを古いものよりも再描画して混乱させるということでした。ユーザーが「送信」をクリックする回数だけ、同じ入力フィールドが表示されます。

checkBool()という関数を追加して、フォームが描画されているかどうかを確認しました。存在する場合は、window.location.reload()関数を呼び出します。そうでなければ、私はSubmit()関数を呼び出すだけです。

コードは入力フィールドをもう積み重ねません。代わりに、別のオプションが選択されていても、2回目に送信ボタンを押すと描画されたフォームは消えます。

私がしたいのは、ユーザーが別のオプションを選択してヒットの送信を行い、現在のフォームが削除され、新しいフォームセットが自動的に描画される場合です。

var boolean = new Boolean(); 
function checkBool(){ 

    if(boolean==false){ 
     Submit(); 
    }else if(boolean==true){ 
     window.location.reload(); 
     boolean=0; 
     Submit(); 
     return boolean; 
    } 
} 

window.location.reload()関数は、すぐにスクリプトを再ロードし、ブラウザは「提出()」関数を実行したことがないようだ:

は、ここに私のcheckBool()関数です。

+0

愚かな音がする危険があるので、単に送信ボタンをクリックして無効にすると考えていましたか? – karim79

+0

は、サブミット関数 –

+1

を参照してください。ちょうどFYI、あなたは*決して*新しいブール 'を使うべきではありません。 –

答えて

3

異なるフォームに異なるフォームを描画することもできますが、最初は表示されません。選択ボックスまたは送信ボタンのonchangeイベントは、このdivを循環し、要求されたフォームであるかどうかによって.style.visibility = 'hidden'または 'visible'に設定されます。

これは、フォームを記入した後にユーザーが気分を変えて後で心が元に戻っても、彼の入力がそこに残るというユーザビリティの利点もあります。

+0

うわー、それは素晴らしい考えです。ありがとう! –

+0

これを実装しました。唯一の問題は、可視性が非表示に設定されているときにページにギャップが残ることです。 それぞれ8つのフォームがあり、それぞれ独自のdivで囲まれています。これらのdivはすべて最初に隠されていると宣言しますが、たとえば7番目のdivがvisibleに設定されている場合、ページの上部から大きなギャップが表示されます。 –

+0

私が言及した問題の解決策は、ギャップがないように要素を並べ替えることでした。 –

0

私の質問に対する答えが見つかりました。

javascriptをリフレッシュする代わりに、すべての要素を一緒に削除することができます。これは私がページをリフレッシュする方法を見つけることによってやろうとしていたものです。

要素を非表示にして、別の場所に大きなギャップを残す代わりに、div内に要素を配置してremoveChild()関数を使用することができます。ここで

は、それがどのように動作するかの例です...

これは私のhtmlです:ここでは

<button type="button" onclick="draw()">Draw</button> 
<button type="button" onclick="erase()">Erase</button> 
<div id="parent"> 

</div> 

は私のjavascriptです:

function draw(){ 
    `docume`nt.getElementById("test").innerHTML=InputField("parent","child","text",5,10).value; 
} 

function erase(){ 
    var parent =document.getElementById("parent"); 
    var child = document.getElementById("child"); 
    parent.removeChild(child); 


} 

だから何がここに起こったときにされましたユーザがdraw()関数が呼び出される "draw"ボタンをクリックします。この関数は、入力フィールドを作成します。

私は渡された変数で入力フィールドを描画する独自の関数を作成しました。これがInputField()関数のすべてです。

その後、ユーザーは「消去」ボタンをクリックして消去機能を呼び出します。

消去機能は、「親」という名前の親要素と子要素グラブ(この場合は「子」と呼ばれている - あなたは私が私のInputFieldに名「子」を渡す見ることができます()関数)

次に、コードのremove.Child(子)部分を持つ子要素を削除します。

jqueryをWebページにダウンロードする場合、removeDiv()関数を使用して同じことを行うことができます。

関連する問題