保険会社の申込書を作成してきました。彼らは旅行保険を販売しています。
追加の小さな機能として、ユーザーが入力した出発日と帰国日を取得し、それらの間の日数を計算してから、[日]ボックスに数値を表示するように依頼されました。その目的は、ユーザーが2つの日付を入力し、日数を自動計算できるようにすることです。
日付を正しく計算する関数を作成し、手動で割り当てた日付値を使用してテストしました。
JSカレンダーを使用しているときに問題が発生しました。
私がやろうとしたのは、2番目のボックスのオンブラーを使用して関数にアクセスし、日付を「日」ボックスに吐き出すことでした。JSカレンダーのコードが日付を入力する前にonblurがトリガーされるため、関数の日付がなく、関数が実行されないことにすぐに気付きました。
次に、onchangeを使用しようとしましたが、ユーザーが実際に日付を変更していないため、コードも変更されていないため、機能しないことに気付きました。
それで、次に私がやろうとしたのは、関数をトリガーするために間隔を使用することでした。これは私が問題に遭遇した場所です。
以下は、HTMLフォームに添付されているcaldate.jsファイルのコードです。
var namestart = new Array ();
namestart[0] = "trav_emer_single_date_go";
namestart[1] = "trav_emer_extend_date_go";
namestart[2] = "allinc_single_date_go";
namestart[3] = "allinc_annual_date_go";
namestart[4] = "cancel_date_go";
namestart[5] = "visitor_supervisa_date_go";
namestart[6] = "visitor_student_date_go";
namestart[7] = "visitor_xpat_date_go";
var namend = new Array ();
namend[0] = "trav_emer_single_date_ba";
namend[1] = "trav_emer_extend_date_ba";
namend[2] = "allinc_single_date_ba";
namend[3] = "allinc_annual_date_ba";
namend[4] = "cancel_date_ba";
namend[5] = "visitor_supervisa_date_ba";
namend[6] = "visitor_student_date_ba";
namend[7] = "visitor_xpat_date_ba";
var names = new Array ();
names[0] = "trav_emer_single_days";
names[1] = "trav_emer_extend_days";
names[2] = "allinc_single_days";
names[3] = "allinc_annual_days";
names[4] = "cancel_days";
names[5] = "visitor_supervisa_days";
names[6] = "visitor_student_days";
names[7] = "visitor_xpat_days";
function daysBetween() {
for (var i = 0; i < 8; i++) {
//Get the value of the current form elements
var start = document.getElementById(namestart[i]).value;
var end = document.getElementById(namend[i]).value;
//Duration of a day
var d = 1000*60*60*24;
// Split Date one
var x = start.split("-");
// Split Date two
var y = end.split("-");
/// // Set Date one object
var d1 = new Date(x[0],(x[1]-1),x[2]);
// // Set Date two object
var d2 = new Date(y[0],(y[1]-1),y[2]);
//
// //Calculate difference
diff = Math.ceil((d2.getTime()-d1.getTime())/(d));
//Show difference
document.getElementById(names[i]).value = diff;
}
}
function interval() {
var int = setInterval(function(){daysBetween()},500);
}
最初の配列のリストは、アクセスする必要のある要素の名前です。私が自分の関数でやろうとしているのは、これらの8つの要素すべてをチェックするループを実行する各間隔でです。namestart[]とnamend[]は、ユーザーが入力した開始日と終了日です。names []は、日が表示されるボックスの名前を一覧表示します。
テスト目的で手動で割り当てられたvalue="date"でを一度実行することさえできないため、間隔部分をテストすることさえできませんでしたdaysBetween()
。まったく実行されません。
問題は非常に単純です。document.getElementById(namestart[i]).value
値を引き出すのではなく、値が見つからないためにスクリプトがハングするだけです。form_name.elements().value
また、表記法と表記法を使用してみform_name.element_name.value
ましたが無駄になりました。
コードが機能しているはずだとわかる限り、ここで本当に困惑しています。アイテムの名前のリストを提供し、スクリプトに、使用したものを使用してそれらにアクセスするように指示し、getElementByIDが機能するのを何度も見ました。
ここからどこに行けばいいのかよくわからないので、どんな援助でも大歓迎です。
ここで要求されているのは、JSフィドルリンクです:http://jsfiddle.net/L2H9N/-純粋なJSライブラリなし。