jquery $ .ajax()関数に小さな問題があります。
ラジオボタンをクリックするか、ドロップダウンメニューから選択するたびに、選択した値でセッション変数を作成するフォームがあります。
今、私は4つのオプションがあるドロップダウンメニューの1つを持っています-最初のもの(ラベルなし)にはvalue = ""があり、他にはIDがあります。
私がしたいのは、セッションを削除するためのNoneオプション(空白の値)で、セッションを作成するためのものですが、この特定の選択名を持つセッションがまだ存在していない場合のみです。他のすべてのオプションには同じ量が割り当てられているためです。 -どれが選択されたかを示すだけです。
それが理にかなっているのかどうかはわかりませんが、コードを確認してください。おそらく、これでわかりやすくなります。
$("#add_ons select").change(function() {
// get current price of the addons
var order_price_addon = $(".order_price_addon").text();
// get price of the clicked radio button from the rel attribute
var add = $(this).children('option').attr('label');
var name = $(this).attr('name');
var val = $(this).val();
if(val == "") {
var price = parseInt(order_price_addon) - parseInt(add);
removeSession(name);
} else {
if(isSession(name) == 0) {
var price = parseInt(order_price_addon) + parseInt(add);
}
setSession(name, val);
}
$(".order_price_addon").html(price);
setSession('order_price_addon', price);
updateTotal();
});
つまり、まず#add_ons selectメニューが「変更」をトリガーすると、計算のためにいくつかの要素からいくつかの値を取得します。
合計に追加する値を格納するselectからオプションのlabel属性を取得します。この名前と値でセッションを作成するselectの名前と、後で選択されたものを確認します。
ここで、val == ""([なし]オプションが選択されていることを示す)かどうかを確認し、合計から金額を差し引くとともに、selectの名前を持つセッションを削除します。
この後、問題が始まります-elseステートメント。
それ以外の場合-セレクターの名前を持つisSession()関数が0または1を返すかどうかを確認します。0を返す場合は、label属性に格納されている値の合計に追加しますが、1を返す場合は、そのセッションはすでに存在します-次に、このセッションの値を変更するだけで、セッションを再作成します-量は追加されません。
isSession関数は次のようになります。
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
return data;
},
error: function() {
alert('Error occured');
}
});
}
さて-問題は-「return」を使用しても関数から結果が返されるかどうかがわからないことです-機能していないようです-しかし、「data」を成功に挿入した場合:セクションにアラート-正しい値を返すようです。
関数から値を返し、次のステートメントでそれを比較する方法を誰かが知っていますか?
みんなありがとう-私は次の方法でそれを試しました:
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
updateResult(data);
},
error: function() {
alert('Error occured');
}
});
}
次にupdateResult()関数:
function updateResult(data){結果=データ; }
結果-グローバル変数です-私はそれを読み込もうとしています:
$("#add_ons select").change(function() {
// get current price of the addons
var order_price_addon = $(".order_price_addon").text();
// get price of the clicked radio button from the rel attribute
var add = $(this).children('option').attr('label');
var name = $(this).attr('name');
var val = $(this).val();
if(val == "") {
var price = parseInt(order_price_addon) - parseInt(add);
removeSession(name);
} else {
isSession(name);
if(result == 0) {
var price = parseInt(order_price_addon) + parseInt(add);
}
setSession(name, val);
}
$(".order_price_addon").html(price);
setSession('order_price_addon', price);
updateTotal();
});
しかし、何らかの理由で-それは機能しません-アイデア?