在tampermonkey中,变量urlm的行为有所不同

时间:2015-01-24 12:25:57

标签: javascript jquery html ajax

我在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;
&#13;
&#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)。请让我知道我在做什么。

2 个答案:

答案 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的确切作用是什么?