2016-12-23 3 views
0

cshtmlビューの中に2つのオプションがあるドロップダウンリストがあります。選択が "True"を返した場合、2つの日付ピッカーを持つコンテナが表示されるので、ユーザーはデータ範囲を選択できます。ドロップダウンオプションを切り替えると、両方の日付ピッカーにそれぞれの値が割り当てられます。javascriptでcshtmlビューオブジェクトの価値を保持する方法は?

$("#ExpirationChoice").change(function() { 
    var val = $(this).val(); //picks up either True or False 

    if (val) { 
     if (val === "True") { 
      $("#expirationDates").show(); //show container with datepickers 
      $("#BeginDate").val(getFormattedDate(today())); 
      $("#EndDate").val(getFormattedDate(today().addMonths(6))); 
     } 
     else { 
      $("#expirationDates").hide(); 
      $("#BeginDate").val(""); 
      $("#EndDate").val(getFormattedDate(today())); 
     } 
    } 
    else { 
     alert("Please select an option of past or future expiration report."); 
    } 
}); 

のは、私はテーブルを生成するためのボタンをクリックし、12/23/16と01/23/17の間の1ヶ月の範囲を選択し、ドロップダウンから真選んだと仮定しましょう。

そして、私はコンテナを隠し、datepickers(隠され、従って、ユーザによって制御することができない)でemptytodayに日付値を再割り当てさせFalseにドロップダウン・オプションを切り替えます。

今度は、再びTrueに切り替えると選択が消え、6ヶ月の範囲に割り当てられます(理由は分かりますが、後で説明します)。

私の質問は:スイッチを押すたびにTrueオプションから最新の選択を保持するにはどうすればよいですか?

私の試みを通して

挑戦

それは次のように動作した理由を私は正確に理解しています。私の考え方は、Trueオプションの日付ピッカーの選択肢を変数に格納することです。私は当初、6ヶ月の日付範囲であることを日付を割り当てる必要が

if (val === "True") { 
    $("#expirationDates").show(); 

    $("#BeginDate").val(getFormattedDate(today())); 
    $("#EndDate").val(getFormattedDate(today().addMonths(6))); 

    var start = $("#BeginDate").val(); 
    var end = $("#EndDate").val(); 
} 

:しかし、ここで私は突然に実行してい課題です。これまでの変数は、日付を適切に格納します。しかし、私が切り替えるたびに、日付の値は6ヶ月の範囲に再割り当てされ、無限ループに変わります。

このような問題に対するより良いアプローチについては、私はかなり多くのことを感謝しています。

答えて

0

私の場合の主な課題はdatepickersから更新された値を得ていました。追加調査を行った後、私はthis postが私の問題を解決するヒントとして見つけました。

:代わりに.change()から最新の値を取得するため、私は.click()私の最初の.change(機能)については

$("#btnExpiringUnitsTable").click(function() { 
    var e = document.getElementById("ExpirationChoice"); 
    var selectedOption = e.options[e.selectedIndex].value; 

    //code 
    if (selectedOption === "True") { //store latest datepicker values in variables from "True" selection 
     start = $("#BeginDate").val(); 
     end = $("#EndDate").val(); 
    } 
    //code 
}); 

に必要な値を格納し、それは次のようにそれを絞り込みます

$("#ExpirationChoice").change(function() { 
    var val = $(this).val(); 


    if (val) { 
     if (val === "True") { 
      $("#expirationDates").show(); 
      $("#BeginDate").val(start); 
      $("#EndDate").val(end); 
     } 
     else { 
      $("#expirationDates").hide(); 
      $("#BeginDate").val(""); 
      $("#EndDate").val(getFormattedDate(today())); 
     } 
    } 
    else { 
     alert("Please select an option of past or future expiration report."); 
    } 
}); 

私が見るところでは、.change()から更新された値を取得することはできません.click()を使用する必要があります。

0

使用フラグVAR

var flag = false; //global variable 
var start;//global variable 
var end;//global variable 
if (val === "True") { 
    $("#expirationDates").show(); 

    if(flag == false){ 
     $("#BeginDate").val(getFormattedDate(today())); 
     $("#EndDate").val(getFormattedDate(today().addMonths(6))); 
    } 
    else { 
     $("#BeginDate").val(start); 
     $("#EndDate").val(end); 
    } 
    start = $("#BeginDate").val(); 
    end = $("#EndDate").val(); 
    flag = true; 
} 
+0

いいえ。偽のフラグでは、datepickersに6ヶ月の範囲が割り当てられ、これらの値は開始点と終了点の下に割り当てられます。フラグがtrueに設定されたので、datepickersは6ヶ月の範囲値である開始値と終了値に割り当てられます。 –

関連する問題