长话短说,我正在使用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);
}
任何人都可以帮我这个吗?我该如何解决这个问题?
先谢谢。
答案 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
。