在我为某人构建的网站上,我使用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
属性?
答案 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+