javascript event.target抛出错误(但它有效)

时间:2012-08-09 10:35:19

标签: javascript jquery

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

我已经劫持了一些链接并且在使用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);

    }

任何人都可以帮我这个吗?我该如何解决这个问题?

先谢谢。

1 个答案:

答案 0 :(得分: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