Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用attachListener获取链接的属性?_Javascript_Javascript Events - Fatal编程技术网

Javascript 如何使用attachListener获取链接的属性?

Javascript 如何使用attachListener获取链接的属性?,javascript,javascript-events,Javascript,Javascript Events,我试过jQuery和javascript,但都不能带来链接的属性。这是我正在使用的代码-这不是在callme函数的警报中打印任何内容 function callMe() { var ll = this; var id1 = ll.getAttribute('id'); alert('Inside callMe...'+id1); } function load() { var lnk = new Array(); lnk = document.getElementsByTag

我试过jQuery和javascript,但都不能带来链接的属性。这是我正在使用的代码-这不是在callme函数的警报中打印任何内容

function callMe() {
var ll = this;    
var id1 = ll.getAttribute('id');
alert('Inside callMe...'+id1);
}

function load() {   
 var lnk = new Array();
 lnk = document.getElementsByTagName("a");
 var len = lnk.length;

for (var i=5;i<len;i++){
var id = lnk[i].getAttribute('data-id');
lnk[i].attachEvent('onclick',callMe);
}

您是否在页面加载完成之前运行此代码?这必须位于
的末尾,或者在
窗口上调用。onload
或(在jQuery中)调用
$(文档)。ready

此外,attachevent不是跨浏览器的

当使用MS专有时,被调用侦听器的this关键字不会设置为调用侦听器的元素(使用W3C方法或HTML内部事件处理程序时也是如此)。对此有许多修复方法,通常是使用关联的事件对象,因此函数变为:

function callMe(evt) {
  var evt = evt || window.event;
  var ll = evt.target || evt.srcElement;

>   var id1 = ll.getAttribute('id');
标准DOM属性不需要使用getAttribute:

    var id1 = ll.id;

创建一个数组并将其分配给lnk只是为了立即用getElementsByTagName返回的NodeList替换它,这没有多大意义。另外,您似乎在寻找链接,因此最好访问document.links集合,该集合已经可用,并且只包含链接,而getElementsByTagName('a')将包含所有a元素,包括锚

因此,上述两行可以是:

    var lnk = document.links;

注意,事件是等效的HTML内部事件名称,不带前导“on”。因此,附加侦听器成为:

      addEvent(lnk[i], 'click', callMe);

此外,该函数应该在文档准备就绪后运行,因此可以使用正文的onload属性window.onload,或者将脚本放在结束正文标记之前

最后,别忘了调用load。以下是重构的整个脚本:

<a href="#" id="link0">Link0</a>
<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>
<a href="#" id="link3">Link3</a>
<a href="#" id="link4">Link4</a>
<a href="#" id="link5">Link5</a>

<script type="text/javascript">

function addEvent(el, evt, fn) {
  if (el.addEventListener) {
    el.addEventListener(evt, fn, false);
  } else if (el.attachEvent) {
    el.attachEvent('on' + evt, fn);
  }
}

function callMe(evt) {
  var evt = evt || window.event;
  var ll = evt.target || evt.srcElement;
  var id1 = ll.id;
  alert('Inside callMe...'+id1); 
}

function load() {
  var lnk = document.links;
  var len = lnk.length;

  for (var i=5; i<len; i++) {
    var id = lnk[i].getAttribute('data-id');
    addEvent(lnk[i], 'click', callMe);
  }
}

load();

</script>

功能加法器(el、evt、fn){
如果(el.addEventListener){
el.addEventListener(evt、fn、false);
}否则,如果(见附件){
el.attachEvent(‘on’+evt,fn);
}
}
函数调用名(evt){
var evt=evt | | window.event;
var ll=evt.target | | evt.src元素;
var id1=ll.id;
警报('内部呼叫…'+id1);
}
函数加载(){
var lnk=document.links;
var len=lnk.长度;

对于(var i=5;这是一个很好的解释!非常感谢您的回复。现在我需要jQuery equallent来完成以下内容。请帮助。var request=document.getElementById('request_'+id1),response=document.getElementById('response_'+id1);modifyText(request.firstChild.nodeValue,response.firstChild.nodeValue);
    var lnk = document.links;
>   var len = lnk.length;
> 
>   for (var i=5; i<len; i++) {
>     var id = lnk[i].getAttribute('data-id');
>     lnk[i].attachEvent('onclick',callMe);
function addEvent(el, evt, fn) {
  if (el.addEventListener) {
    el.addEventListener(evt, fn, false);
  } else if (el.attachEvent) {
    el.attachEvent('on' + evt, fn);
  }
}
      addEvent(lnk[i], 'click', callMe);
>   }
> }
<a href="#" id="link0">Link0</a>
<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>
<a href="#" id="link3">Link3</a>
<a href="#" id="link4">Link4</a>
<a href="#" id="link5">Link5</a>

<script type="text/javascript">

function addEvent(el, evt, fn) {
  if (el.addEventListener) {
    el.addEventListener(evt, fn, false);
  } else if (el.attachEvent) {
    el.attachEvent('on' + evt, fn);
  }
}

function callMe(evt) {
  var evt = evt || window.event;
  var ll = evt.target || evt.srcElement;
  var id1 = ll.id;
  alert('Inside callMe...'+id1); 
}

function load() {
  var lnk = document.links;
  var len = lnk.length;

  for (var i=5; i<len; i++) {
    var id = lnk[i].getAttribute('data-id');
    addEvent(lnk[i], 'click', callMe);
  }
}

load();

</script>