1
//deep linking 
$.fn.ajaxAnim = function() {
    $(this).animW();
    $(this).html('<div class="load-prog">loading...</div>');
}

$("document").ready(function(){
    contM = $('#main-content');
    contS = $('#second-content');
    $(contM).hide();
    $(contM).addClass('hidden');
    $(contS).hide();
    $(contS).addClass('hidden');
    function loadURL(URL) {
        //console.log("loadURL: " + URL);
        $.ajax({ url: URL, 
                beforeSend: function(){$(contM).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contM).html(data);
                    $('.post-content').initializeScroll();
                    }
        });
    }

    // Event handlers
    $.address.init(function(event) {
        //console.log("init: " + $('[rel=address:' + event.value + ']').attr('href'));
    }).change(function(event) {
        evVal = event.value;
        if(evVal == '/'){return false;}
        else{
            $.ajax({ url: $('[rel=address:' + evVal + ']').attr('href'), 
                    beforeSend: function(){$(contM).ajaxAnim();},
                    type: "POST",
                    dataType: 'html',
                    data: {post_loader: 1},
                    success: function(data){
                        $(contM).html(data);
                        $('.post-content').initializeScroll();
            }});
        }
        //console.log("change");
    })

    $('.update-main a, a.update-main').live('click', function(){
        loadURL($(this).attr('href'));
        return false;
    });

  $(".update-second a, a.update-second").live('click', function() {
    var link = $(this);
        $.ajax({ url: link.attr("href"),
                beforeSend: function(){$(contS).ajaxAnim();},
                type: "POST",
                dataType: 'html',
                data: {post_loader: 1},
                success: function(data){
                    $(contS).html(data);
                    $('.post-content').initializeScroll();
        }});
        return false;
  });

});

我正在使用 jquery 地址来更新内容,同时保持有用的 url。单击主导航中的链接时,url 会正确更新,但是当使用 ajax 动态加载链接时,url 地址功能会中断。

我已经制作了“点击”事件,允许通过动态加载的链接加载内容,但我似乎无法让地址事件监听器生效,但这似乎是完成这项工作的唯一方法。如果我改变这个,我的语法是否错误:

$.address.change(function(event) {

对此:

$.address.live('change', function(event) {

还是 live 方法不适用于此插件?

4

3 回答 3

1

进入jquery地址插件文件并替换了这一行:

$.fn.address = function (fn) {
    $(this).click(function() {

有了这个 :

 $.fn.address = function (fn) {
        $(this).live('click',function() {

使所有动态加载的链接响应地址插件事件监听器

于 2010-04-03T21:14:06.830 回答
0

live 方法仅适用于 jquery dom 元素。不带插件。

live 方法检测 dom 元素是否动态添加到 HTML 中并将事件绑定到它。您想说的是:“如果“地址”插件出现在 html 上,请将事件“更改”绑定到它”。有“地址”插件不是 dom 元素,它不起作用。

于 2010-04-03T11:02:27.470 回答
0

首先,简短的回答:不,它不起作用:)

为什么部分.live()处理事件,它不关心它们是否是自定义的,等等(在大多数情况下)。热它的工作原理是当你.live()这样打电话时,例如:

$(".myThing").live('click', functionToRun);

.live()在 DOM 的根部创建一个事件处理程序,等待事件冒泡到它。重要的部分:新元素或旧元素以相同的方式冒泡事件,无论它们是如何加载的。当事件冒泡并到达 DOM 根时,.live()事件处理程序会检查它们的选择器是否与发生事件的元素匹配,如果匹配则执行。

有了一个插件,你想说一些新的东西并在上面运行代码......你可以看到这.live()与内部的实际工作方式非常不同。

于 2010-04-03T11:35:43.860 回答