1

我有两个版本的相同代码。第一个版本效果很好,但不适用于新加载的内容。

    // Do some fancy ajax loading and URL rewriting when link is clicked

    var linkButton = $(".jsHistory a");

    linkButton.on("click", function() {
        // If link is already selected do nothing
        if($(this).parent().hasClass("selected")) {
            return false;
        // Else load new content and update URL
        } else {
            linky = $(this).attr("href");
            history.pushState(null, null, linky);
            showActiveLink();
            loadContent(linky);
            return false;
        }
    });

在第二个版本中,我需要与单击的特定链接按钮相关的所有内容,我认为它会起作用。我正在努力通过选择器。

    // Do some fancy ajax loading and URL rewriting when link is clicked

    var linkButton = $(".jsHistory a");

    $(document).on({
        click: function() {
            If link is already selected do nothing
            if($(this).parent().hasClass("selected")) {
                return false;
            // Else load new content and update URL
            } else {
                linky = $(this).attr("href");
                history.pushState(null, null, linky);
                showActiveLink();
                loadContent(linky);
                return false;
            }
        }
    }, linkButton);

有谁知道我怎样才能做到这一点,以及我是否接近我认为的正确做法?谢谢你的时间。

4

2 回答 2

1

差不多好了。您需要像第二个一样在文档上为新创建的元素调用它,但您还应该将选择器传递给 on 函数。这样,将仅接收来自该选择器的事件,并且“this”元素将成为链接...

$(document).on('click', '.jsHistory a', function(){
    var linkButton = $(this);
    //...
});
于 2013-05-02T16:08:58.323 回答
1

它似乎on()只接受委托事件处理程序的字符串,而不是 jQuery 对象,所以你必须这样做:

$(document).on({
    click: function() {
        if( !$(this).parent().hasClass("selected") ) {
            var linky = $(this).attr("href");
            history.pushState(null, null, linky);
            showActiveLink();
            loadContent(linky);
        }
        return false;
    }
}, '.jsHistory a');

小提琴

于 2013-05-02T16:38:05.890 回答