3

私は予約と呼ばれるJavascriptのカスタムクラスを持っています:

function Booking(technicianID, startTime, start, street, zipcode, jobtypeID) {
    this.technicianID = technicianID;
    this.startTime = startTime;
    this.start = start;
    this.street = street;
    this.zipcode = zipcode;
    this.jobtypeID = jobtypeID;
}

このクラスのオブジェクトを関数の入力として使用したいと思います。

function bookTime(inputBooking) {
    var tmpBooking = inputBooking;
    alert("You chose: " + tmpBooking.start + ". Tech: " + tmpBooking.technicianID);
}

しかし、何らかの理由で、アラートから得られるのは変数の「未定義」だけです。inputBookingがBookingオブジェクトとして表示されないためだと思います。つまり、変数startとtechniqueIDがありません...

使用できるObject.create関数があると読みましたが、動作させることができません。

    tmpBooking = Object.create(Booking, inputBooking); 

これを解決する方法について何かアイデアはありますか?

編集:

javascriptからinputBookingオブジェクトを直接送信すると、期待どおりに機能します。

    var tmpBooking = new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID);

    bookTime(tmpBooking);
    //Works

しかし、問題は、一時オブジェクトをHTMLに送信し、bookTime関数を呼び出すボタンを生成したいということです。

    var tmpBooking = new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID);

    resultsHTML += "<a href=\"#\" onclick=\"bookTime('" + tmpBooking + "')\">Book!</a>";
    //Doesn't work

これをデバッガーで実行すると、inputBookingのタイプは[object Object]であり、「Children could not bevaluated」と表示されます。その結果、start変数とtechniqueID変数が未定義になります。

4

2 に答える 2

2

あなたが示すコードには何も問題はありません。Booking実際のオブジェクトで関数を呼び出すと、期待どおりに機能します。

bookTime(new Booking('Tech1', 'Now', 'Now', 'Here', 'Zip', 'Job'));

デモ: http://jsfiddle.net/Guffa/fRmA2/

Bookingしたがって、問題は、関数に送信するオブジェクトではない可能性が最も高いです。

編集:

オブジェクトの文字列表現を含む HTML コードを作成していますが、オブジェクトの文字列表現を使用して同じように見えるオブジェクトを再作成することはできません。

コードで変数を使用します。

resultsHTML += "<a href=\"#\" onclick=\"bookTime(tmpBooking)\">Book!</a>";

または、オブジェクトを作成するコードを作成します。

resultsHTML += "<a href=\"#\" onclick=\"bookTime(new Booking(tmpTechID, tmpStartTime, tmpStart, tmpStreet, tmpZipcode, tmpJobtypeID))\">Book!</a>";

ただし、データの取得元やループで使用しているかどうかによっては、どちらも機能しない場合があります。使用する変数がグローバルに使用できない場合は、各変数の値を使用して、オブジェクトを作成するコードを作成する必要があります。何かのようなもの:

resultsHTML += "<a href=\"#\" onclick=\"bookTime(new Booking('"+tmpTechID.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStartTime.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStart.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpStreet.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpZipcode.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+", '"+tmpJobtypeID.replace(/\\/g,'\\\\').replace(/'/g,'\\'')+"))\">Book!</a>";
于 2012-08-13T08:41:12.130 に答える
0

new次のキーワードを使用するのを忘れた可能性があります。

var inputBooking = new Booking(...
于 2012-08-13T08:40:42.953 に答える