我在tampermonkey写这段代码,
var n = document.getElementsByTagName("a").length;
for (i = 0; i < n; i++) {
var urlm = document.getElementsByTagName("a")[i].href;
//urlm.replace("#", "");
// var v = "change('"+urlm+"')";
// document.getElementsByTagName("a")[i].setAttribute("onclick", v);
document.getElementsByTagName("a")[i].addEventListener('click', function(event){ alert(urlm); ajaxpagefetcher.load("ajax-div",urlm, true); }, false);
document.getElementsByTagName("a")[i].setAttribute("href", "javascript:alert("+urlm+")");
}
当我执行此代码时,我的 urlm 值不同 . 假设var urlm = document.getElementsByTagName("a")[i] .href;这里urlm strong text 返回http://www.example . \ com / page / page3.html ....
但是,在这行addEventListener('click',function(event){alert(urlm); ajaxpagefetcher.load("ajax-div",urlm,true);},false); alert(urlm); 仅显示http://www.example . \ com /但此处页面/ page3.html缺失....但在下一行javascript:alert("+urlm+")“);它可以作为 javascript:alert("http:/www.example.\com/page/page3). 请告诉我我做错了 .
2 回答
值urlm在click事件之外分配 .
请在此单击事件中加载urlm,换句话说,复制click事件中的行
由于urlm是在click事件之外加载的,因此urlm中的值在click事件发生时可能会有所不同 .
您的点击事件可能看起来像
不要在循环中创建函数 .
在你的情况下,最好创建一个能做正确事情的单一函数 - 毕竟你附加了一个行为 . 然后可以将此函数附加到多个DOM对象 .
利用
addEventListener
管理设置this
到正确对象的事实 .(*)如果
href
包含单引号怎么办?ajaxpagefetcher.load()
究竟对urlm
做了什么?