0

当我触发一个函数时,我希望它仅将侦听器应用于我传递的元素,特别是thisjQuery 元素。

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);给函数。

4

3 回答 3

2

在 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-17T17:27:23.363 回答
0

从成功处理程序的其余部分的上下文来看,我假设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-17T17:25:57.690 回答
0

this在这种情况下,这不是您所期望的。尝试这个:

var self = this;
$.post(url,{el:wartosc_inputa},function(returned) {
    var data = $(returned).hide(); 
    $("#listaElementow").prepend(data); 
    data.slideDown();
    loading();
    addEventListeners(self);
});
于 2012-10-17T17:22:44.573 回答