0

长话短说,我正在使用 ajax 制作一个小型网站,但更多的是用于手机。

我劫持了一些链接,在萤火虫测试时,单击链接时出现此错误

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

var myurl = e.target.href;

现在的问题是,虽然我得到了这个错误,但当我在普通桌面上测试它时它确实有效,当我放在移动设备(ios)上它也可以工作并加载 AJAX 内容。

我想修复它的原因是因为......除了有错误之外,我还有另一个小问题,我不确定是不是因为这个,所以试图一个一个地修复。

这是我为劫持移动网站链接而创建的两个函数。

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从点击处理程序或类似的调用,因此它会在这种情况下按预期工作。

您有 2 个选项 - 要么将内部更改hijackLinks为不依赖于将事件作为参数传递(可能不是一个好主意),要么只是将所有直接调用更改hijackLinks为通过 DOM 元素事件。例如,您的原始代码:

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

可以改为:

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

更改a.whatever选择器以指向被劫持的实际链接(您没有显示任何标记,所以我不知道那会是什么),然后只要您正确绑定了点击处理程序(或您需要的任何 UI 交互)触发事件),您可以依靠hijackLinks使用事件参数进行调用。

于 2012-08-09T10:42:07.893 回答