まず、いくつかの要素を準備する必要があります。あなたは毎年保存したくないので、それは動的select
要素を作成すると良いでしょう:
var monthSelection = document.createElement('select');
var yearSelection = document.createElement('select');
var quartalWrapper = document.createElement('div');
私たちは、ページがロードされたときにそれらを記入し、文書に追加します:
window.addEventListener('load',function(){
var monthNames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var i;
var option;
for(i = 0; i < 12; ++i){
option = document.createElement('option');
option.value = i;
option.appendChild(document.createTextNode(monthNames[i]));
monthSelection.appendChild(option);
}
for(i = firstYear; i <= lastYear; ++i){
option = document.createElement('option');
option.value = i;
option.appendChild(document.createTextNode(i));
yearSelection.appendChild(option);
}
// Append elements to the document
document.getElementById('quartal').appendChild(monthSelection);
document.getElementById('quartal').appendChild(yearSelection);
// Add an event listener
monthSelection.addEventListener('change',updateQuartals);
yearSelection.addEventListener('change',updateQuartals);
});
してくださいaddEventListener
ではなく、バージョン9(?)より前のInternet ExplorerでattachEvent
または.onload
/.onchange
を使用する必要があることに注意してください。スクリプトの始めに要素を作成して埋め込むこともできますが、DOMをロードする前に要素を追加することはできません。ユーザーが呼び出されるmonthSelection
またはyearSelection
updateQuartals
のいずれかの値を変更する今
:
window.updateQuartals = function(){
var i;
if( oldMonth === monthSelection.value &&
oldYear === yearSelection.value)
{
return;
}
それはそれはまだに追加さていない意味するのでquartalWrapper
は、我々は、ラベルやチェックボックスを作成する親ノードを持たない場合文書:
if(!quartalWrapper.parentNode){
for(i = 0; i < 3; ++i){
var label = document.createElement('label');
var input = document.createElement('input');
input.type = 'checkbox';
input.name = 'quartal[]';
label.appendChild(input);
label.appendChild(document.createTextNode('Please choose a date'));
quartalWrapper.appendChild(label);
}
document.getElementById('quartal').appendChild(quartalWrapper);
}
次に、3つの子ラベルとチェックボックスをすべて更新します。 label.firstChild
はチェックボックスですが、label.lastChild
は上記で作成したtextNode
です。 quartalWrapper.childNodes[i]
は実際にはlabel
のいずれかです。
for(i = 0; i < 3; ++i){
var quartals = getQuartals(monthSelection.value);
var year = quartals[i][1] + parseInt(yearSelection.value);
quartalWrapper.childNodes[i].firstChild.value = 'q'+quartals[i][0]+'/'+year;
quartalWrapper.childNodes[i].firstChild.checked = false;
quartalWrapper.childNodes[i].lastChild.data = quartals[i][0]+'Q '+year;
}
};
次quartalsは常に指定した月のために定義されているので、我々は機能getQuartals
にそれらをハードコーディングすることができます。最初の値は四半期であり、第二の1のオフセット年であることを
window.getQuartals = function(month){
var quartArray = [];
if (month < 3)
return [[2,0],[3,0],[4,0]];
if (month < 6)
return [[3,0],[4,0],[1,1]];
if (month < 9)
return [[4,0],[1,1],[2,1]];
return [[1,1],[2,1],[3,1]];
}
お知らせ。また、これらの配列を計算することができます:
window.getQuartals = function(month){
var quartArray = [];
var i;
month = parseInt(month);
for(i = 0; i < 3; ++i){
month+=3;
quartArray.push([Math.floor(month/3)%4+1,Math.floor(month/12)]);
}
return quartArray;
}
Jsfiddleデモ:using hardcoded values、using calculation。
このソリューションではjQueryを使用していません。 jQueryを使用してコードを自由に変更したい場合はaddEventListener()
の代わりに$()
または.on
、.append
...のように使用してください。
これまでに行ったことを確認するには、ソースコードが必要です。画像には数千語以上の言葉があります。 – reporter
ええ。あなたは連想配列を作ることができ、septemberをq3に、12月をq4に、1月をq1に割り当てるように聞こえる。そしてそれぞれには既に1年があります。 – maxhud
私は、配列の次の3つを表示するロジックで、次の3つの四半期を表示する関数を使って変数月がどの四半期に入るかを決定した後、配列メソッドがうまくいくと思う( – Yasir