【发布时间】:2011-03-19 04:16:28
【问题描述】:
我对 jQuery $.ajax() 函数有一个小问题。
我有一个表单,每次单击单选按钮或从下拉菜单中进行选择都会创建一个具有所选值的会话变量。
现在 - 我有一个下拉菜单,其中有 4 个选项 - 第一个(带有标签 None)有一个 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 选择菜单触发“更改”时,我们会从一些元素中获取一些值进行计算。
我们从我们的选择中获取选项的标签属性,该属性存储要添加到总数中的值、选择的名称以创建具有此名称的会话和值,以便稍后检查选择了哪个。
现在 - 我们检查是否 val == ""(这将表明已选择 None 选项)并从总数中扣除金额并删除带有选择名称的会话。
这就是问题开始的地方 - 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 是否会从函数返回结果 - 因为它似乎不起作用 - 但是,如果我将“数据”放入成功: alert() 部分 - 它似乎确实返回了正确的值。
有谁知道如何从函数中返回值,然后在下一条语句中进行比较?
谢谢大家 - 我已经尝试过以下方式:
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) {
result = data;
}
result - 是全局变量 - 然后我正在尝试读取:
$("#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();
});
但由于某种原因 - 它不起作用 - 有什么想法吗?
【问题讨论】:
-
它可能有助于解决这个问题:stackoverflow.com/questions/14220321/…
标签: jquery