.on()jQuery 1.7和1.8的区别

时间:2012-09-17 10:29:21

标签: jquery events jquery-mobile

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

我使用ASP MVC 3和jQuery Mobile 1.2 RC1动态创建列表,并将click事件绑定到li元素。如果我使用jQuery 1.7+一切正常,但是当我使用1.8+时,click事件只会在第一个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);

});

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您正在定义具有相同ID“immos”的多个元素。 HTML文档中的每个元素都必须具有显式ID。请改用类,并使用类选择器。 E.g:

<li class="immos" ...

和JQuery选择器:

$('#immo_list').on('click', '.immos', ...

答案 1 :(得分:3)

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

jquery 1.8包含一个新版本的Sizzle,它们的选择引擎。正如你所说它在1.7中工作,我想新版本在这个意义上更严格。出于性能原因,Sizzle会在找到#immos时立即停止搜索该元素的文档,因为它期望它是唯一的。