Jquery - this.attr() не является функцией?
Я не совсем уверен, не использую ли я это в правильной области или что-то в этом роде, но у меня есть script, который в основном фиксирует щелчок ссылки и заставляет страницу исчезать перед тем, как перейти на связанную страницу. Однако, если ссылка является javascript onclick, script терпит неудачу. Здесь мой код:
<script type="text/javascript">
pageObj = {
init: function(){
$("body").fadeTo("slow", 1);
},
redirectPage: function(redirect){
window.location = redirect;
},
linkLoad: function(location){
$("body").fadeOut(1000, this.redirectPage(location));
}
};
$(document).ready(function() {
pageObj.init();
$("a").click(function(e){
e.preventDefault();
if (this.attr('onclick') !== undefined) {
eval(this.attr('onclick').val());
} else {
var location = this.href;
pageObj.linkLoad(location);
}
});
});
</script>
Как вы можете видеть, я пытаюсь выполнить проверку, чтобы увидеть, имеет ли ссылка атрибут onclick, а затем вызывает функцию onclick, если она существует. Как я могу достичь этого?
Ответы
Ответ 1
В то время как Diodeus прав, что вам нужно обернуть this
в коллекцию jQuery перед использованием attr()
(это метод коллекции jQuery, а не HTMLElement
), вы можете просто пропустить attr()
.
$("a").click(function(e){
var location;
e.preventDefault();
if ($.isFunction(this.onclick)) {
this.onclick.call(this, e);
} else {
location = this.href;
pageObj.linkLoad(location);
}
});
Обратите внимание, что я использовал свойство (когда загружается документ HTML, атрибуты обычно предварительно загружаются в свойства, причем атрибуты on_______
предварительно загружаются как методы. Также обратите внимание, что я использовал this.onclick.call()
, а не eval()
, установив правильный this
для onclick
методов и обеспечения доступа к объекту события в качестве аргумента.
Ответ 2
Использование: $(this).attr
вместо this.attr
Это заставляет его в контексте jQuery.