我的问题如题:
问题的地方做了标记:my question!!------------------------------------->>>>>>>>>>
<script type="text/javascript">
function addTotal()
{
//计算总价格的函数
var fTotal = 0;
//对于选中了的复选项进行遍历
$(":checkbox:checked").each(function()//遍历每一个被选中的多选框执行的函数
{
//获取每一个的数量
var iNum = parseInt($(this).parent().find("input[type=text]").val());
//获取每一个的单价
var fPrice = parseFloat($(this).parent().find("span[price]").attr("price"));
fTotal += iNum * fPrice;
});
$("#totalPrice").html("合计¥"+fTotal+"元");
}
$(function()//页面加载完后要执行的函数
{
$(":checkbox").click(function()//每一个多选框的点击调用函数
{
var bChecked = this.checked;//取出是否点击的值
//如果选中则显示子菜单
$(this).parent().find(".detail").css("display",bChecked?"block":"none");
$(this).parent().find("input[type=text]")
//每次改变选中状态,都将值重置为1,触发change事件,重新计算价格
.attr("disabled",!bChecked).val(1).change() //change()下面定义了
.each(function()//使用一个函数好执行下面的事
{
//需要聚焦判断,因此采用each来插入语句
if(bChecked) this.focus();//数量框自动聚焦
});
});
$("span[price] input[type=text]").change(function()
{//每一个数量框的值的改变都会调用这个函数
//根据单价和数量计算价格 my question!!------------------------------------->>>>>>>>>>
$(this).parent().find("span").text( $(this).val() * $(this).parent().attr("price") );
addTotal(); //计算总价格
});
//加载页面完全后,统一设置输入文本框
$("span[price] input[type=text]")
.attr({ "disabled":true,//文本框为disable
"value":"1", //表示份数的value值为1
"maxlength":"2" //最都只能输入2位数(不提供100份以上)
}).change(); //触发change事件,让span都显示出价格
});
</script>
</head><body>
<div>
1. <input type="checkbox" id="LiangCaiCheck"><label for="LiangCaiCheck">凉菜</label>
<span price="0.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="LiangCai" checked="checked">拍黄瓜</label>
<label><input type="radio" name="LiangCai">香油豆角</label>
<label><input type="radio" name="LiangCai">特色水豆腐</label>
<label><input type="radio" name="LiangCai">香芹醋花生</label>
</div>
</div>
<div>
2. <input type="checkbox" id="SuCaiCheck"><label for="SuCaiCheck">素菜</label>
<span price="1"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="SuCai" checked="checked">虎皮青椒</label>
<label><input type="radio" name="SuCai">醋溜土豆丝</label>
<label><input type="radio" name="SuCai">金勾豆芽</label>
</div>
</div>
<div>
3. <input type="checkbox" id="HunCaiCheck"><label for="HunCaiCheck">荤菜</label>
<span price="2.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="HunCai" checked="checked"/>麻辣肉片</label>
<label><input type="radio" name="HunCai">红烧牛柳</label>
<label><input type="radio" name="HunCai">糖醋里脊</label>
</div>
</div>
<div>
4. <input type="checkbox" id="SoupCheck"><label for="SoupCheck">热汤</label>
<span price="1.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="Soup" checked="checked"/>西红柿鸡蛋汤</label>
<label><input type="radio" name="Soup">南瓜汤</label>
</div>
</div><div id="totalPrice"></div>
</body>
</html>
问题的地方做了标记:my question!!------------------------------------->>>>>>>>>>
<script type="text/javascript">
function addTotal()
{
//计算总价格的函数
var fTotal = 0;
//对于选中了的复选项进行遍历
$(":checkbox:checked").each(function()//遍历每一个被选中的多选框执行的函数
{
//获取每一个的数量
var iNum = parseInt($(this).parent().find("input[type=text]").val());
//获取每一个的单价
var fPrice = parseFloat($(this).parent().find("span[price]").attr("price"));
fTotal += iNum * fPrice;
});
$("#totalPrice").html("合计¥"+fTotal+"元");
}
$(function()//页面加载完后要执行的函数
{
$(":checkbox").click(function()//每一个多选框的点击调用函数
{
var bChecked = this.checked;//取出是否点击的值
//如果选中则显示子菜单
$(this).parent().find(".detail").css("display",bChecked?"block":"none");
$(this).parent().find("input[type=text]")
//每次改变选中状态,都将值重置为1,触发change事件,重新计算价格
.attr("disabled",!bChecked).val(1).change() //change()下面定义了
.each(function()//使用一个函数好执行下面的事
{
//需要聚焦判断,因此采用each来插入语句
if(bChecked) this.focus();//数量框自动聚焦
});
});
$("span[price] input[type=text]").change(function()
{//每一个数量框的值的改变都会调用这个函数
//根据单价和数量计算价格 my question!!------------------------------------->>>>>>>>>>
$(this).parent().find("span").text( $(this).val() * $(this).parent().attr("price") );
addTotal(); //计算总价格
});
//加载页面完全后,统一设置输入文本框
$("span[price] input[type=text]")
.attr({ "disabled":true,//文本框为disable
"value":"1", //表示份数的value值为1
"maxlength":"2" //最都只能输入2位数(不提供100份以上)
}).change(); //触发change事件,让span都显示出价格
});
</script>
</head><body>
<div>
1. <input type="checkbox" id="LiangCaiCheck"><label for="LiangCaiCheck">凉菜</label>
<span price="0.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="LiangCai" checked="checked">拍黄瓜</label>
<label><input type="radio" name="LiangCai">香油豆角</label>
<label><input type="radio" name="LiangCai">特色水豆腐</label>
<label><input type="radio" name="LiangCai">香芹醋花生</label>
</div>
</div>
<div>
2. <input type="checkbox" id="SuCaiCheck"><label for="SuCaiCheck">素菜</label>
<span price="1"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="SuCai" checked="checked">虎皮青椒</label>
<label><input type="radio" name="SuCai">醋溜土豆丝</label>
<label><input type="radio" name="SuCai">金勾豆芽</label>
</div>
</div>
<div>
3. <input type="checkbox" id="HunCaiCheck"><label for="HunCaiCheck">荤菜</label>
<span price="2.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="HunCai" checked="checked"/>麻辣肉片</label>
<label><input type="radio" name="HunCai">红烧牛柳</label>
<label><input type="radio" name="HunCai">糖醋里脊</label>
</div>
</div>
<div>
4. <input type="checkbox" id="SoupCheck"><label for="SoupCheck">热汤</label>
<span price="1.5"><input type="text" class="quantity"> ¥<span></span>元</span>
<div class="detail">
<label><input type="radio" name="Soup" checked="checked"/>西红柿鸡蛋汤</label>
<label><input type="radio" name="Soup">南瓜汤</label>
</div>
</div><div id="totalPrice"></div>
</body>
</html>
但我觉得 是指 addTotal 这个函数
{
//获取每一个的数量
var iNum = parseInt($(this).parent().find("input[type=text]").val());
//获取每一个的单价
var fPrice = parseFloat($(this).parent().find("span[price]").attr("price"));
fTotal += iNum * fPrice;
});
这个this指的是 循环 的checkbox 对象
你可以alert(this.type);看看
下面也是一样。
{
//根据单价和数量计算价格
$(this).parent().find("span").text( $(this).val() * $(this).parent().attr("price") );
};首先说的是选择器:
$("span[price] input[type=text]")
这里面是两部分,前面span[price] 这个是选择所有包含 price这个属性的span 把这个集合称作①
然后在①这个集合里面 再根据input[type=text]选择 所有标签是input 包含属性为type=text的所有输入框 称作②
.change() 的意思是对②中的元素当发生改变事件的时候执行里面的function
然后就是你想要的$(this) 这里的this指代的是 ②中某一个元素的对象(可以理解为那个input对象,document.getElementById("xx");这里的xx可以理解为②集合中的某一个input框),而$(this)指的是将这个对象放入jquery对象中用代码解释 this 和 $(this) 的区别
<input type="text" id="xx">
document.getElementById("xx"); 这个就是this的对象
$("#xx"); 这里获取的就是 $(this)对象
$(this).parent().find("span").text(...)方法表明是指向span这个元素的,这时候this应该指的是span元素啊,怎么会是输入框呢?
$(this).parent().find("span").text( $(this).val() * $(this).parent().attr("price") );$(this).parent()通过input获取到父元素节点的jquery对象,也就是span
我想你这里 ¥ 应该是个价格比如 10 20
$(this).val() 这里的this指的就已经不是前面的输入框了,而是通过$(this).parent().find("span")获取到了我上面红色字体的10,我想这里应该是程序填入的部分,你好像把代码删除了!$(this).parent().attr("price") 这个很好理解了,this是10外面的那个span 他的父元素→也就是最外面的span,attr("price")也就是获取这个对象的值→1.5 元这样应该没有什么疑问了吧
写错了一点
$(this).parent().find("span")获取的是内层的span ,然后加上.val() 才是我标注的10最后,写这个代码的人jquery用的真令人无语啊