在动态加载内容时使用.on()是否可以从元素中获取属性?

时间:2012-07-10 17:56:28

标签: javascript jquery jquery-on

在我为某人构建的网站上,我使用pushState创建了大多数内部链接,因为它提供了更快的用户体验。我在从动态加载的锚href元素中获取<a>属性时遇到问题。人们总是告诉我使用.on()而不是.live()因为.live()已被弃用,但后来我遇到了这样的问题。

这是我的代码:

$('#artists').on('click', '.artist a', function(e) {
        SM.config.loader.show();
        var href = $(this).attr('href');
        SM.loadContent(href,'artist');
        history.pushState('', 'New URL: ' + href, href);
        e.preventDefault();
});

没有返回href属性(显然),因此URL不会更改。

基本上我的问题是如何从href事件的第二个参数中的元素中获取on属性?

1 个答案:

答案 0 :(得分:3)

此代码适用于我:http://jsfiddle.net/NcZ22/2/

<强> HTML

<div id="artists"></div>​

<强> JS

//Bind an event
$('#artists').on('click', '.artist', function(e) {
        e.preventDefault();    
        var href = $(this).attr('href');
        console.log(href);
});​

//Add the element to the dom
$('<a />', {
    href: 'http://stackoverflow.com',
    text: 'SO',
    class: 'artist'
}).appendTo('#artists');

此外,请确保您使用的是jQuery 1.7+。您可以在此处详细了解.on vs .delegate http://api.jquery.com/delegate/

语法的简单比较:

$(selector).live(events, data, handler);                // jQuery 1.3+
$(elements).delegate(selector, events, data, handler);  // jQuery 1.4.3+
$(elements).on(events, selector, data, handler);        // jQuery 1.7+