0

簡単に言えば、ajaxを使用して小さなWebサイトを作成していますが、モバイル向けです。

いくつかのリンクをハイジャックし、firebug でテストしているときに、リンクをクリックするとこのエラーが発生しました

TypeError: e.target is undefined
[Break On This Error]   

var myurl = e.target.href;

問題は、このエラーが発生しても、通常のデスクトップでテストすると機能し、モバイル (ios) に置くと機能し、AJAX コンテンツをロードすることです。

私がそれを修正したい理由は...エラーがあることは別として、別の小さな問題があり、これが原因かどうかわからないため、1つずつ修正しようとしています。

モバイル サイトのリンクをハイジャックするために作成した 2 つの関数を次に示します。

JavaScript:

//~~~~~~~~~~~~~~~~~~~~~~~~~~~functions for mobile index load AND hijacking app      

function loadPage(url){
        if( url == undefined){
            $('#contentHere').load('index.html #content', hijackLinks);
                window.location.hash = mainHash;
        } else {
            $('#contentHere').load(url + '#content', hijackLinks ); 
        }
    }


    function hijackLinks(e){
        var myurl = e.target.href;
        e.preventDefault();
        loadPage(myurl);
        mainHash = window.location.hash = $(this).attr("href");
        console.log(mainHash);

    }

誰でもこれで私を助けることができますか?どうすればこれを修正できますか?

ありがとうございます。

4

1 に答える 1

0

e.targetイベントを最初にトリガーしたオブジェクト(通常はDOM要素)を指します。hijackLinksイベントハンドラとしてではなく、単に直接呼び出す場合は、もちろんeイベントを参照しないため、e.target定義されていません。hijackLinksクリックハンドラーなどからも呼び出していると思いますので、そのシナリオでは期待通りに動作します。

hijackLinks2つのオプションがあります-引数としてイベントが渡されることに依存しないように内部を変更するか(おそらく良い考えではありません)、hijackLinks代わりにDOM要素イベントを通過するようにすべての直接呼び出しを変更します。たとえば、元のコードは次のとおりです。

$('#contentHere').load('index.html #content', hijackLinks);

次のように変更できます:

$('#contentHere').load('index.html #content', function() {
    $('a.whatever').trigger('click');
});

クリックハンドラー(または必要なUIインタラクション)を正しくバインドしている限り、ハイジャックされている実際のリンクを指すようにセレクターを変更a.whateverします(マークアップが表示されていないため、それが何であるかはわかりません)。イベントをトリガーするために)、hijackLinksイベント引数で呼び出されることに依存できます。

于 2012-08-09T10:42:07.893 に答える