私のアプローチが効率的で正しいかどうか知りたいのですが。私のコードは機能していませんが、理由はわかりません。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
$(document).ready(function() {
function HotelQuery(HotelName) {
switch (HotelName) {
case 'TimelessHotel':
var strHotelName = 'Timeless Hotel';
var strHotelDesc = 'Hotel Description Timeless Hotel';
var strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
var strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
; //end Timeless Hotel
case 'ParadiseInn':
var strHotelName = 'Paradise Inn';
var strHotelDesc = 'Hotel Description Paradise Inn';
var strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
var strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
; //end Paradise Inn
case 'TetrisHotel':
var strHotelName = 'Tetris Hotel';
var strHotelDesc = 'Hotel Description Tetris Hotel';
var strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
var strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
; //end Tetris Hotel
case 'JamstoneInn':
var strHotelName = 'Jamstone Inn';
var strHotelDesc = 'Hotel Description Jamstone Inn';
var strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
var strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
; //end Jamstone Inn
}
};
});
</script>
<title>hotel query</title>
</head>
<body>
<a href="#" onclick="javascript: HotelQuery('TetrisHotel'); alert: (strHotelName, strHotelDesc, strHotelPrice);">Tetris Hotel Query</a>
</body>
</html>
変数のスコープが関数HotelQuery
であるため、コードは機能しません。関数からプロパティを持つオブジェクトを返し、控えめなJavaScriptアプローチを使用して、クリックイベントハンドラーを<a>
要素にバインドすることもできます。
何かのようなもの
$(function() {
$('a').click(function() {
var hotel = HotelQuery('TetrisHotel');
alert(hotel.name) // alerts 'Tetris Hotel'
});
});
function HotelQuery(HotelName) {
var strHotelName;
var strHotelDesc;
var strHotelPrice;
var strHotelRoomType;
switch (HotelName) {
case 'TimelessHotel':
strHotelName = 'Timeless Hotel';
strHotelDesc = 'Hotel Description Timeless Hotel';
strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Timeless Hotel
case 'ParadiseInn':
strHotelName = 'Paradise Inn';
strHotelDesc = 'Hotel Description Paradise Inn';
strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Paradise Inn
case 'TetrisHotel':
strHotelName = 'Tetris Hotel';
strHotelDesc = 'Hotel Description Tetris Hotel';
strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Tetris Hotel
case 'JamstoneInn':
strHotelName = 'Jamstone Inn';
strHotelDesc = 'Hotel Description Jamstone Inn';
strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Jamstone Inn
}
return {
name: strHotelName,
desc: strHotelDesc,
price: strHotelPrice,
roomType: strHotelRoomType
}
};
毎回ホテル名と説明以外の同じ値を返すことに気づきました(例としてこれを行った可能性がありますが、よくわかりません)。パラメータHotelName
の引数の値から割り当てることができるホテル名と説明を除いて、宣言時にすべての変数に値を割り当てる(または返されたオブジェクトのプロパティとして値を割り当てる)ことができます。何かのようなもの
function hotelQuery(hotelName) {
return {
name: hotelName,
desc: 'Hotel Desciption' + hotelName,
// Keep prices as numbers and have a function to display them
// in the culture specific way. Numbers for prices will be easier to deal with
price: [980, 1300, 1600, 1500, 1800, 300, 150, 200],
roomType: ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person']
}
}
いくつかの問題。
1)関数が$(document).ready
内にある必要はありません、それを取り除きます。
2)すべてのcaseステートメントの後にはbreak
が続く必要があり、単独の;
ではありません。例えば:
function HotelQuery(HotelName) {
switch (HotelName) {
case 'TetrisHotel':
// stuff goes here ...
break; //end Tetris Hotel
};
}
3)alert
ハンドラーでonclick
の後に:
を付けないでください。
alert: (strHotelName, strHotelDesc, strHotelPrice);
する必要があります
alert(strHotelName, strHotelDesc, strHotelPrice);
また、alert
は1つのパラメーターしか受け取らないため、次のように分割する必要があります。
alert(strHotelName); alert(strHotelDesc); alert(strHotelPrice);
3)strHotelName
、strHotelDesc
、およびstrHotelPrice
がグローバルスコープにあると想定していますが、そうではありません。
全体として、次のようなものを試してみることをお勧めします。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function HotelQuery(HotelName) {
var response = {
strHotelName: '',
strHotelDesc: '',
strHotelPrice: [],
strHotelRoomType: []
};
switch (HotelName) {
case 'TimelessHotel':
response.strHotelName = 'Timeless Hotel';
response.strHotelDesc = 'Hotel Description Timeless Hotel';
response.strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
response.strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Timeless Hotel
case 'ParadiseInn':
response.strHotelName = 'Paradise Inn';
response.strHotelDesc = 'Hotel Description Paradise Inn';
response.strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
response.strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Paradise Inn
case 'TetrisHotel':
response.strHotelName = 'Tetris Hotel';
response.strHotelDesc = 'Hotel Description Tetris Hotel';
response.strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
response.strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Tetris Hotel
case 'JamstoneInn':
response.strHotelName = 'Jamstone Inn';
response.strHotelDesc = 'Hotel Description Jamstone Inn';
response.strHotelPrice = ['980.00', '1,300.00', '1,600.00', '1,500.00', '1,800.00', '300.00', '150.00', '200.00'];
response.strHotelRoomType = ['Single Room', 'Delux Room','Twin Room', 'Matrimonial Room', 'Presidential Suites', 'Extra Bed', 'Free Breakfast', 'Extra Person'];
break; //end Jamstone Inn
}
return response;
};
$(document).ready(function() {
var infoContainer = $('#hotel-information');
$("#hotel-query").click(function() {
var info = HotelQuery('TetrisHotel');
infoContainer.text(info.strHotelName);
});
});
</script>
<title>hotel query</title>
</head>
<body>
<a href="#" id="hotel-query">Tetris Hotel Query</a>
<p id="hotel-information"></p>
</body>
</html>
alert("myVar1= " + myVar1 +"/n"+ "myVar2= " + myVar2);
アラートボックスの文字列の横に/ nを配置すると、アラートボックスに気の利いた改行を含む複数の変数を表示できます。
myVar1= Data
myVar2= more Data
私が行う変更がいくつかあります。
HotelQuery
関数をready
関数から引き出します。
次に、アラート呼び出しを行うまでに、これらの変数はすべて範囲外になります。それらをスコープ内に配置する場合は、グローバルに(関数の外部で)宣言し、関数内に設定します。
var name;
function doStuff() {
name = "reggie";
}