this.remove()不是函数。怎么样?
var vehicle = function () {
return {
init: function () {
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
this.remove();
});
},
remove: function () {
alert('test');
}
}
}();
jQuery().ready(vehicle.init);
很抱歉这个混乱。我正在尝试调用自己的“删除”功能。这只是一个管理我页面上的车辆的类。这是它的开始,它将具有比init / remove更多的功能。
答案 0 :(得分:5)
this
是一个DOM元素。要使用jQuery的.remove()
方法,需要将其包装在jQuery对象中。
$(this).remove();
编辑:如果您希望调用remove()
对象中的vehicle
函数,请致电:
vehicle.remove();
另外,如果您希望缩短.ready()
来电,可以这样做:
jQuery(vehicle.init);
jQuery().ready()
技术仍然适用于1.4,但已被弃用。请使用jQuery(document).ready()
或jQuery(function(){})
。
答案 1 :(得分:2)
注意 - 我们都有点困惑,因为您不清楚要调用哪个“删除”功能。
问题是你传入了对“init”函数的引用,但是当它被调用时,“this”变量将引用window对象,而不是“vehicle”的值。为什么?因为在Javascript中,“this”值仅取决于函数的调用方式。在同一个对象中定义两个函数的事实与它完全无关。
尝试这样做:
jQuery(function() {
vehicle.init();
});
当你以这种方式调用“init”函数时 - 通过明确地将其作为“vehicle”对象的属性引用 - 然后Javascript将“this”绑定到“vehicle”的值。
编辑哦等等我刚注意到你还将不得不修改你的“init”函数,因为“click”处理程序里面的代码正在运行由jQuery调用,以便在该上下文中将“this”绑定到受影响的元素。因此,如果你想保持“车辆”参考,你可以这样做:
init: function () {
var originalThis = this;
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
originalThis.remove();
});
},
答案 2 :(得分:2)
也许你正在寻找这样的东西?
var vehicle = new function () {
var self = this;
this.init = function () {
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
self.remove();
});
};
this.remove = function () {
alert('test');
};
};
......或者喜欢这样吗?要告诉你的目标很难......
var vehicle = new function () {
function remove () {
alert('test');
}
this.init = function () {
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
remove.call(this);
});
};
};
答案 3 :(得分:0)
var vehicle = function () {
return {
init: function () {
var self = this;
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
self.remove();
});
},
remove: function () {
alert('test');
}
}
}();
jQuery().ready(function() {
vehicle.init();
});
答案 4 :(得分:0)
既然您说过要尝试调用自己的remove
函数,请按以下步骤操作:
var vehicle = (function () {
return {
init: function () {
var that = this; // step one
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
that.remove();
});
},
remove: function () {
alert('test');
}
}
}()); // step zero - wrap the immediate invocation in parens
jQuery(function () {
vehicle.init(); // step two
);
答案 5 :(得分:0)
当调用函数作为方法时,“this”指的是调用它的对象。在jQuery中,传递的函数被调用为html元素的方法,因此“this”成为元素。
要确保引用正确的对象,您需要创建对原始对象的引用。
var vehicle = function () {
var that = {
init: function () {
jQuery('.vehicle-year-profile .options .delete').bind('click', function (e) {
e.preventDefault();
that.remove();
});
},
remove: function () {
alert('test');
}
}
return that;
}();
jQuery().ready(vehicle.init);