使此 JS 代码不显眼。为未知 ID 编写事件侦听器

Making this JS code unobtrusive. Writing an event listener for unknown id

提问人:j-grimwood 提问时间:5/29/2014 更新时间:12/28/2014 访问量:256

问:

我一直在构建此 UI 的功能。这些是我想为它编写侦听器的一对选项卡,以使我的 js 不显眼。它阻止了我前进。现在我正在重构,是时候修复它了。我想编写一个事件侦听器,用于获取单击的选项卡的 ID,并将其分配给变量。这是我所拥有的:

<ul id="gal">

   <li class="glyphicons camera active" onclick="pullActive(this.id);" id="viewAll"><a href="#" ><i></i> View all photos <strong>(43)    </strong></a>
   </li>
   <li class="glyphicons circle_plus tab-stacked" onclick="pullActive(this.id);" id="addPhotos"><a href="#"><i></i> <span>Add Photos</span></a>
   </li>
</ul>

function pullActive(id){

 // gets the class for that id
  var getClassy = document.getElementById(id).className;
  findClass(getClassy, id);
  loadNew();

}  
javascript jquery unobtrusive-javascript

评论

0赞 j-grimwood 5/29/2014
谢谢大家。这是一个非常愚蠢的问题,但今天我的大脑被绞尽脑汁。
1赞 Luke 5/29/2014
没有问题,很高兴它有帮助!

答:

2赞 Luke 5/29/2014 #1

如果没有jQuery,你将不得不这样做

var item = document.querySelector("#gal");
item.attachEventHandler("click", function(ev) {
   if (ev.target.tagName === "LI") {
      var id = ev.target.id;
      // ...
   }
});

在jquery中(当你像这样标记你的问题时),它看起来像这样

$(function() {
   $("#gal").delegate("li", "click", function() {
      var id = this.id;
      // ...
   });
});
1赞 Bart Jedrocha 5/29/2014 #2

使用 jQuery,这将是

$( document ).ready(function() {
  $( '#gal' ).on( 'click', 'li', function() {
    var id = this.id
  });
});

这种方法的好处是,您只有一个事件处理程序(在 ul 上定义),而不是每个 li 都有一个事件处理程序。希望这会有所帮助。

2赞 phenomnomnominal 5/29/2014 #3

jQuery解决方案:

$('#gal li').on('click', function () {
    var className = $(this).attr('class');
    var id = this).id;
    console.log(className, id);
});

香草溶液:

[].forEach.call(document.querySelectorAll('#gal li'), function (glyphicon) {
    glyphicon.addEventListener('click', function () {
        var className = glyphicon.className;
        var id = glyphicon.id
        console.log(className, id);
    });
});

这是一个包含这两个例子的小提琴