我在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+")");
}
&#13;
当我执行此代码时,我的 urlm 值不同。假设 var urlm = document.getElementsByTagName(&#34; a&#34;)[i] .href; 此处urlm 强文返回 http:// www。例如,\ COM /页/ page3.html ....
但是,在这一行 addEventListener(&#39; click&#39;,function(event){alert(urlm); ajaxpagefetcher.load(&#34; ajax-div&#34;,urlm,true );},false); 警告(urlm); 仅显示 http://www.example。\ com / 但此处 page / page3.html 缺失....但是在下一行 javascript:alert(&#34; + urlm +&#34;)&#34;); 它可以作为 javascript:alert(&#34; http:/www.example。\ com / page / page3)。请让我知道我在做什么。
答案 0 :(得分:0)
在点击事件之外分配值urlm。
请在此点击事件中加载urlm,换句话说,请复制点击事件中的行
var urlm = event.target.href;
由于urlm是在click事件之外加载的,因此在click事件发生时urlm中的值可能会有所不同。
您的点击事件可能看起来像
document.getElementsByTagName("a")[i].addEventListener('click', function(event){ var urlm = event.target.href; alert(urlm); ajaxpagefetcher.load("ajax-div",urlm, true); }, false);
答案 1 :(得分:0)
不要在循环中创建函数。
在您的情况下,最好创建一个能够做正确事情的单一功能 - 毕竟,您正在附加一个行为。然后可以将此函数附加到多个DOM对象。
利用addEventListener
管理设置this
到正确对象的事实。
function ajaxPageFetch(event) {
// this smells (*)
var urlm = "change('" + this.href + "')";
ajaxpagefetcher.load("ajax-div", urlm, true);
}
var a = document.getElementsByTagName("a"), i;
for (i = 0; i < a.length; i++) {
a[i].addEventListener('click', ajaxPageFetch, false);
}
(*)如果href
包含单引号怎么办? ajaxpagefetcher.load()
对urlm
的确切作用是什么?