0

也许这是一个太基本的问题,但是 jQuery 1.7+ 和 1.8+ 中的 .on() 事件绑定有什么区别?我的问题如下:

我正在使用 ASP MVC 3 和 jQuery Mobile 1.2 RC1 动态创建一个列表,并将单击事件绑定到 li 元素。如果我使用 jQuery 1.7+ 一切正常,但是当我使用 1.8+ 时,单击事件仅在第一个 li 元素上触发。我已经检查了 jQuery 的文档,但实际上应该没有区别还是?

<ul data-role="listview" id="immo_list" data-inset="true" 
data-theme="c" data-dividertheme="b" data-filter="true">
  <%
      foreach (var immobilie in Model.immoObjekte)
                        {
  %>
      <li id="immos" val="<%: immobilie.id %>"> <a href="">
          <%: immobilie.strasse %> <%:immobilie.hausnummer%></a>
          <span class="ui-li-count"><%:immobilie.id%></span>
      </li> 
  <%
      }
  %>
  </ul>


$('#immo_list').on('click', '#immos', function () {
    $.mobile.loading('show');

    var immoid = $(this).attr('val');
    var days = $("#interval").val();

    sessionStorage.setItem("clicked", "false");
    sessionStorage.setItem("mode", "");

    sessionStorage.setItem("days", days);
    sessionStorage.setItem("immoid", immoid);

    getAndShowPflichten(immoid, days);

});

谢谢你的帮助!

4

2 回答 2

3

您正在定义具有相同 ID 'immos' 的多个元素。HTML 文档中的每个元素都必须有一个明确的 ID。改用类,并使用类选择器。例如:

<li class="immos" ...

和 JQuery 选择器:

$('#immo_list').on('click', '.immos', ...
于 2012-09-17T10:33:08.920 回答
3

您不能拥有多个具有相同 ID 的元素,它必须是唯一的。#immos改为上课。

jquery 1.8 包括一个新版本的 Sizzle,他们的选择器引擎。正如你所说的它在 1.7 中有效,我猜新版本在这个意义上更严格。出于性能原因,Sizzle 将在找到元素后立即停止搜索文档#immos,因为它希望它是唯一的。

于 2012-09-17T10:33:56.813 回答