これを正しいスコープで使用していないのかどうかはわかりませんが、基本的にリンククリックをキャプチャし、リンクされたページに移動する前にページをフェードアウトさせるスクリプトがあります。ただし、リンクがJavaScript onclickの場合、スクリプトは失敗します。
ここに私のコードがあります:
<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関数を呼び出しています存在します。どうすればこれを達成できますか?
Diodeusはattr()
(this
ではなくjQueryコレクションのメソッドです)を使用する前に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
を設定し、引数としてイベントオブジェクトへのアクセスを保証します。
使用:_this.attr
_の代わりに$(this).attr
これにより、jQueryのコンテキストに強制されます。