0

这是我的第一部分代码:

$('ul li').click(function(){ //when an <li> is clicked

    $('ul .clicked').removeClass('clicked'); // remove .clicked class from any other <li>'s inside a <ul>
    $(this).addClass('clicked'); // add .clicked class to the clicked <li> ($(this))

    screen = $(this).attr('id'); // screen = the clicked elements' id
    screen = "#" + screen; // screen = the clicked elements' id with a # infront of it 
    $(screen).screenSlide(); // is basically = $('#elementsID').screenSlide();, correct?
});

这很奇怪,因为在我编写的前一个函数中,除了最后一步之外,我做了完全相同的事情,而不是将 screen 作为选择器传递,我将 screen 推入一个 Array 中,然后我抓住了 array[0] (这是 #elementsID 没有任何引号)并将其用作选择器并且它起作用了。但向前看,screenSlide 是

function screenSlide(){ // $(this) should = an <li> who's id is screen
    var test = $(this).attr('class');
    alert(test);
    $(this).addClass('current'); // add the .current class to $(this), which should be an <li>
    $(this).slideDown();
};

现在,警报测试没有发出任何警报,所以我猜测将屏幕作为 CSS 选择器传递是行不通的。可以看到,screenSlide 函数应该是给 $(this)<li> 添加一个类,然后让它向上滑动。

知道出了什么问题吗?

4

2 回答 2

2

您定义它的方式screenSlide只是一个函数,不附加到 jquery 对象。为了在 jquery 对象上作为函数调用,您需要将其添加为$.fn.screenSlide.

$.fn.screenSlide = function(){
    var test =this.attr('class');
    alert(test);
    this.addClass('current'); // add the .current class to $(this), which should be an <li>
    this.slideDown();
    return this; //return this to enable chaining
}

在此函数中,您不需要将 jquery 对象重新定义为 $(this),因为这已经是一个 jquery 对象,并且还返回this以启用它以进行链接。

如果你想单独调用它,那么你可以使用function.call

screenSlide.call($(this));

有了这this又是一个 jquery 对象,你不需要$(this)在你的函数中重新做一遍。

顺便说一句,您似乎只需要调用它,$(this).screenSlide();除非您复制 id,在这种情况下,它无论如何都不会按照您期望的方式运行。

演示

于 2013-10-10T02:29:51.757 回答
1

$(screen).screenSlide();将抛出一个错误,指出没有像screenSlidefor object 这样的方法,因为screenSlide它不是与 jQuery 包装器对象关联的方法。您需要为此编写screenSlide插件

$.fn.screenSlide = function(){
    var test = this.attr('class');
    alert(test);
    this.addClass('current'); // add the .current class to $(this), which should be an <li>
    this.slideDown();
}

screenSlide或使用自定义上下文调用,例如

screenSlide.call($(screen))
于 2013-10-10T02:29:17.367 回答