委托jQuery 1.3.2

时间:2012-03-28 08:47:33

标签: jquery

我今天获得了适用于jQuery v7的代码。问题是它也需要适用于1.3.2。我该如何翻译?

$(document).ready(function() {
    $("ul#dropdown li ul").hide(); 
    $("ul#dropdown").delegate( 'li', 'click', function () {   
    if (!$(this).parent().is("ul#dropdown") ) {
            return false; 
        }  
    $(this).siblings('.' + "current").removeClass("current").children('ul').slideUp('fast');
    $(this).addClass("current").children('ul').slideDown('fast')
    });
});

3 个答案:

答案 0 :(得分:2)

1.3中授权的唯一选择是live()方法

$("ul#dropdown li").live('click', function () {   
    if (!$(this).parent().is("ul#dropdown") ) {
            return false; 
        }  
    $(this).siblings('.' + "current").removeClass("current").children('ul').slideUp('fast');
    $(this).addClass("current").children('ul').slideDown('fast')
});

答案 1 :(得分:0)

我看到的唯一问题是您使用delegate,这是在1.4中添加的。在1.3.2中,您唯一的选择是使用live()

$(document).ready(function() {
    $("ul#dropdown li ul").hide(); 
    $("ul#dropdown li").live('click', function () {   
        if (!$(this).parent().is("ul#dropdown") ) {
            return false; 
        }  
        $(this).siblings('.' + "current").removeClass("current").children('ul').slideUp('fast');
        $(this).addClass("current").children('ul').slideDown('fast')
    });
});

答案 2 :(得分:0)

最简单的方法是将.delegate()替换为.live()(从1.3.0开始就在那里)。这不会在ul node上创建事件处理程序,而是在document.body上创建。

这意味着所有事件都必须进一步冒泡,但除非你处理大量的事件处理程序和节点,否则没有明显的性能差异。

$("ul#dropdown li").live('click', function () { 
}

参考:.live()