0

保険会社の申込書を作成してきました。彼らは旅行保険を販売しています。

追加の小さな機能として、ユーザーが入力した出発日と帰国日を取得し、それらの間の日数を計算してから、[日]ボックスに数値を表示するように依頼されました。その目的は、ユーザーが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ライブラリなし。

4

1 に答える 1

0

私が起こっていると思うのは、DOMの準備が整う前にdaysBetween関数が実行されていることです。これにより、エラーがスローされ、残りのJavaScriptが無効になります。これを修正するには、daysBetweenへの呼び出しをwindow.onloadのコールバックに入れるか、カレンダーのコールバックにアタッチする必要があります。

また、変数の計算に進む前に、ヌルを合体させるか、少なくともヌルをチェックすることをお勧めします。

于 2012-10-10T19:52:31.237 に答える