当我触发一个函数时,我希望它只将侦听器应用于我传递的元素,特别是this
jQuery元素。
addEventListeners(this);
function addEventListeners(el) {
$(el).mouseenter(function() {
$(this).stop(true,true).switchClass("", "HIGHLIGHT", 400, "easeInOutQuad");
});
$(el).mouseleave(function() {
$(this).stop(true,true).switchClass("HIGHLIGHT", "", 400, "easeInOutQuad");
});
}
它从AJAX结果中触发:
$.post(url,{el:wartosc_inputa},function(returned) {
var data = $(returned).hide();
$("#listaElementow").prepend(data);
data.slideDown();
loading();
addEventListeners(this);
});
如何写好代码呢?这段代码没有将变量从addEventListeners(this);
传递给函数。
发布于 2012-10-17 17:25:58
从成功处理程序的其余部分的上下文来看,我假设returned
就是您试图将处理程序绑定到的DOM元素。假设是这样的话:
$.post(url,{el:wartosc_inputa},function(returned) {
var data = $(returned).hide();
$("#listaElementow").prepend(data);
data.slideDown();
loading();
addEventListeners(data[0]);
// change this ^^^^
// pass the DOM element here, or
// change the addEventListeners function to take a jquery element
});
发布于 2012-10-17 17:27:23
在ajax回调函数中,"this“将是ajax对象,而不再是一个元素,因此您需要在ajax开始之前将"this”保存在一个变量中。
that = this;
$.post(url,{el:wartosc_inputa},function(returned) {
var data = $(returned).hide();
$("#listaElementow").prepend(data);
data.slideDown();
loading();
addEventListeners(that);
});
发布于 2012-10-17 17:22:45
在这种情况下,this
并不是您期望的那样。试试这个:
var self = this;
$.post(url,{el:wartosc_inputa},function(returned) {
var data = $(returned).hide();
$("#listaElementow").prepend(data);
data.slideDown();
loading();
addEventListeners(self);
});
https://stackoverflow.com/questions/12939831
复制