今天开发的时候,遇到一个问题,如下代码:
<a href='javascript:;' onclick='Cancel(" + value.ifApply + ")' style='color:red'>取消</a>
函数:
/*取消订餐*/
function Cancel(oid) {
artDialog.confirm("确认要取消订餐吗?", function () {
$.ajax({
url: "../Handler/OrderingFood.ashx",
data: { Action: "CancelOrder", oid: oid },
type: "post",
dataType: "json",
success: function (data) {
if (data.success) {
$(this).parent().html("尚未订餐");
art.dialog({
title: "提示",
content: "取消成功",
ok: function () {
this.title('3秒后自动关闭').time(3);
}
});
}
else {
art.dialog({
title: "提示",
content: data.msg
});
}
}
});
});
}
在执行的过程中, $(this).parent().html("尚未订餐");报错
在通过浏览器调试的过程中,发现$(this)并不是想象的<a>标记对象,而是一个window对象
由此,我想到了原因,
在js函数的执行过程中,涉及到一个执行环境(域)的问题,即实际调用Cancel函数的并不是<a>元素,而是window对象
解决方法:
1、<a href='javascript:;' onclick='Cancel(" + value.ifApply + ",this)' style='color:red'>取消</a>
传递this(代表a元素)
函数中:
function Cancel(oid,obj) {
....
// $(this).parent().html("尚未订餐");
$(obj).parent().html("尚未订餐");
}
2、通过jquery on方法绑定click事件
方法 略