2012-08-09 41 views
0

長話短說,即時通訊使一個小網站使用Ajax,但它更多的手機。JavaScript的event.target投擲錯誤(但它的工作原理)

IVE劫持了幾個環節,而在Firebug的測試中,我點擊 鏈接

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

var myurl = e.target.href; 

時得到這個錯誤現在的事情是,當我測試它一個,雖然我得到這個錯誤,它的工作常規桌面,當我穿上移動(IOS)它也可以工作並加載AJAX內容。

我想解決這個問題的原因是......除了出現錯誤之外,即時通訊有另一個小問題,我不知道是否因爲這個原因而試圖逐個修復。

Heere是創建劫持移動網站鏈接的兩項功能。

的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); 

    } 

任何人都可以幫助我?我將如何解決這個問題?

謝謝先進。

+0

不確定,但不jQuery封裝事件對象呢?你有沒有嘗試添加(如果(e.get){目標= e [0] .target || e [0] .srcElement;}' – 2012-08-09 10:41:09

回答

0

e.target引用最初觸發事件的對象(通常是DOM元素)。如果您只是直接調用hijackLinks,而不是作爲事件處理程序,那麼e當然不會引用事件,因此e.target未定義。我猜你也可以從點擊處理程序或類似程序中調用hijackLinks,因此它在該場景中按預期工作。

你有2個選項 - 要麼改變hijackLinks的內部,不要依靠傳遞一個事件作爲參數(可能不是一個好主意),或者只是將所有直接調用改爲hijackLinks,以便通過DOM元素事件。例如,你的原代碼:

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

可改爲:

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

變化a.whatever選擇器指向一個被劫持的實際鏈接(你還沒有表現出任何標記,所以我不要不知道那會是什麼),那麼只要你正確綁定了一個點擊處理器(或者任何你需要觸發事件的UI交互),你可以依靠hijackLinks被一個事件參數調用。

+0

我明白你說的一切,然後,我將如何定位鏈接,以便我可以在不使用e.target.href?的情況下執行「預防默認」,因爲當我刪除它時,它將刪除錯誤,但隨後鏈接不會去任何地方lol。感謝先​​進的 – somdow 2012-08-09 11:04:52

+0

請看我上面編輯的答案 – 2012-08-09 12:42:52

+0

謝謝我明白,我有一個「hijacklinks」函數DEEEP正在撥打電話的地方....謝謝也許你可以幫我用這個= = http://stackoverflow.com/questions/11876101/javascript-substring-method-assistance – somdow 2012-08-09 23:01:11