在Jquery中使用时获取LI元素的ID不起作用

时间:2016-10-06 16:38:52

标签: javascript jquery

我可以使用JQuery的click函数获取LI元素的ID,但是当我创建自己的函数时,LI元素的ID未定义:

http://codepen.io/omarel/pen/gwvpvQ

第一个LI元素使用Jquery的点击功能。第二个元素使用它自己的函数,其中ID未定义。

HTML

 <ul id="pricerange_options" class=" options">

    <li id="option1" data-value="1" class="dropdown-option">1</li>

    <li id="option2" data-value="1" class="dropdown-option" onClick="chooseDropDownOption();">2</li>

 </ul>

JQuery的

  function chooseDropDownOption() {
        alert($(this).attr('id'));
    }

  $('#pricerange_options li').click(function () {
        alert($(this).attr('id'));
   });

1 个答案:

答案 0 :(得分:4)

当你在jQuery中附加一个不显眼的事件处理程序时,该函数在引发事件的元素的范围内运行,因此this关键字引用该元素。

通过on*事件属性附加事件时,它会在window范围内运行,因此this会引用window。要解决此问题,请将元素作为参数发送到您的函数:

&#13;
&#13;
function chooseDropDownOption(el) {
  alert($(el).attr('id')); // or just el.id
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="pricerange_options" class=" options">
  <li id="option2" data-value="1" class="dropdown-option" onClick="chooseDropDownOption(this);">2</li>
</ul>
&#13;
&#13;
&#13;

应该注意的是,使用on*事件处理程序已经过时了。您应该尽可能使用不显眼的事件处理程序。