首页 文章

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

提问于
浏览
1

我在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 回答

  • 0

    值urlm在click事件之外分配 .

    请在此单击事件中加载urlm,换句话说,复制click事件中的行

    var urlm = event.target.href;
    

    由于urlm是在click事件之外加载的,因此urlm中的值在click事件发生时可能会有所不同 .

    您的点击事件可能看起来像

    document.getElementsByTagName("a")[i].addEventListener('click', function(event){ var urlm = event.target.href; alert(urlm); ajaxpagefetcher.load("ajax-div",urlm, true); }, false);
    
  • 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 做了什么?

相关问题