.on() jQuery 1.7 和 1.8 的区别

Posted

技术标签:

【中文标题】.on() jQuery 1.7 和 1.8 的区别【英文标题】:Difference for .on() jQuery 1.7 and 1.8 【发布时间】:2012-09-09 13:27:35 【问题描述】:

也许这是一个太基本的问题,但是 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);

);

感谢您的帮助!

【问题讨论】:

先验证html? - validator.w3.org 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

<li class="immos" ...

和 JQuery 选择器:

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

【讨论】:

以上是关于.on() jQuery 1.7 和 1.8 的区别的主要内容,如果未能解决你的问题,请参考以下文章

jquery 1.7的.parseHTML()替代方案?

jQuery给动态添加的元素绑定事件的方法

ConcurrentHashMap 1.7和1.8区别

jquery绑定的事件对ajax刷新出的数据不生效,on可能受jquery版本影响

ConCurrentHashMap在1.7和1.8区别

Django 1.7 和 1.8 之间迁移行为的变化