2012-01-26 13 views
1

私のフォームにはいくつかのチェックボックスがあります:1つをチェックすることで別のチェックボックスを無効にします。以下のコードはとてもうまく動作します。問題は、送信後にユーザーがエラーを取得したとき(ページがリロードされたとき)、無効なチェックボックスが再度有効になることです。しかし、私はそれが障害者の状態を保存したい。ページリロード後の.attrの状態を記憶してください

<label for="Q09_01"> 
    <input class="Q09" name="Q09[]" id="Q09_01" type="checkbox" /> 
aaa</label> 
<label for="Q09_02"> 
    <input class="Q09" name="Q09[]" id="Q09_02" type="checkbox" value="Q09_02" /> 
bbb</label> 
<label for="Q09_03"> 
    <input class="Q09" name="Q09[]" id="Q09_03" type="checkbox" value="Q09_03" /> 
ccc </label> 
<label for="Q09_04"> 
    <input class="Q09" name="Q09[]" id="Q09_04" type="checkbox" value="Q09_04" /> 
ddd </label>  

のjQuery:

$(function(){ 

$('#Q09_01').click(function() { 
$('#Q09_03').attr('disabled', this.checked); 
}); 
$('#Q09_03').click(function() { 
$('#Q09_01').attr('disabled', this.checked); 
}); 

})  

は別に、この特定の問題から、私はラジオボタン( maintain the state of a radio-toggled div after page reload)とページのリロードの維持の表示/非表示/トグル状態で別の同様の問題を持っていました。ページのリロード後にこれらの状態をすべて覚えているjQuery関数がありますか?この http://www.jasonsebring.com/dumbFormStateが私が達成したいことを助けることができると思いますか?私はjqueryを初めて使いました。私は、何か助けやヒント、あるいは良い習慣の例を感謝します。

+0

問題を解決できましたか? – atmd

答えて

0

これには2通りの方法があります。これをサーバー側のスクリプトで処理するには、POST入力を確認し、それを突き合わせてください。基本的には、変数が定義されているかどうか(または値があるかどうか)をチェックし、そうでなければ、無効にします。あなたのケースでは、実際には、実際に提出された値をチェックしているので、これは実際にはjQueryのロジックに従うだけです。例えばいくつかの原始的なPHP:PHPは、私はちょうどそれがRailsのコードを与えるよりも一般的になるだろう考え出しので、

$disable_Q09_01 = $_POST['Q09'] == "Q09_03" 

<input class="Q09" name="Q09[]" id="Q09_01" type="checkbox" 
    <? if ($disable_Q09_01) echo "disabled"; ?> 
/> 

そして、私を許して、それはしばらくしています。

他の方法は、フォームが送信される前にクッキーを作成することです。 W3はこれをすべて文書化しますhere。基本的には、クッキーを"disable_Q09_01=true"に設定してから、アプリケーションに基づいて読み取りまたはクリアします。私は、このメソッドは、ユーザーがクッキーをオフにしている可能性があるのであまり望ましくないと信じていますが、これは使用しているサーバーサイドスクリプトにかかわらず(ish)動作します。

+0

ご返信ありがとうございます。私はPHPをそれほど知らないので、別のオプションがあれば、今度は自分のページにPHPスクリプトを置かないようにしたいと思う。私はjQueryでそれを行う方法がなければならないと確信していますが、私はどのように把握できません。 – JaneVi

+0

あなたはどんなサーバーサイドの言語を使用していますか? –

0

ローカルまたはセッションストレージを使用して入力の状態を保存しようとしましたか? セッションまたはローカルストレージが存在する場合は、ページのロード時に入力状態をロードできます。

これはJavaScript/jQueryを使って行うことができます

それは

は、より多くの情報

http://www.beakkon.com/tutorial/html5/web-storage

atmd83

+0

ブラウザはどうしますか?私はこれに関する情報を見つけることができません。 – JaneVi

+0

jQueryでは、おそらく単純な条件が私の問題を解決する可能性がありますか? #Q09_01がチェックされている場合は** 'と似ていますが、#Q09_03' **を無効にしますか? – JaneVi

+0

ie behavourをie6以降をサポートするフォールバックとして使用することができます – atmd

0

することができます@のためにこれを試して、サーバコードやクッキーをivolveないだろうjQueryを使用してページの状態を覚えていない。ページがリフレッシュされると、HTMLが元に戻され、元の状態に戻ります。 PHPなどのサーバー側言語を使用する場合は、必ずしもそうである必要はありません。しかし、あなたがコメントで言ったように、あなたはPHPを使いたくありません。

したがって、あなたは2つのオプションがあります。

  1. クッキー
  2. HTML5のWebストレージ

#2は、すべてのブラウザでサポートされませんので、私は#1と一緒に行くお勧めします。基本的に、ユーザーがボックスをチェックすると、クッキーが作成/更新されます。その後、ページの再読み込み時に、ドキュメントの準備ができたら($(document).ready(..))、JavaScriptを使用してCookieを読み取り、DOMに必要な変更を加えます(つまり、正しいボックスを確認する)。

Here's a commonly used jQuery cookie plugin.

あなたは/更新/クッキーを読み込むの作成に問題がある場合は、そのことについて、具体的に新しい質問を投稿する必要があります。

関連する問題