1

我正在尝试在我的网站中插入几行新代码。当浏览器宽度小于768px时需要插入代码,如果代码已经存在则不需要再次插入。出于某种原因,每当我将浏览器的大小调整为小于 768 时,代码都会插入两次,然后每次调整大小时再插入一次。有谁知道为什么这行代码被多次插入?

$(window).resize(function() {
  if ($(window).width() < 768) {
    if ($(document).not('#step-4-circle')) {
      $('<div id="step-4-circle" class="step-circle"><div class="inner"><span class="number">4</span><span class="title">FULFILL ORDERS</span><span class="subtitle">where you want</span></div></div>').insertBefore('#how-step-3');
    }
  }

});
4

2 回答 2

2

调整条件以检查是否选择了任何元素:

if ( $('#step-4-circle').length == 0 ) {
    $('<div id="step-4-circle" class="step-circle"><div class="inner"><span class="number">4</span><span class="title">FULFILL ORDERS</span><span class="subtitle">where you want</span></div></div>').insertBefore('#how-step-3');
}

JS 小提琴:http: //jsfiddle.net/3zP8H/1/

于 2013-12-22T09:33:37.697 回答
1

.not()方法从集合中删除匹配的元素,$(document)返回一个只有一个元素(文档对象)的集合,您试图排除 step-4-circle集合中不存在 ID 的元素。此外,作为一个对象是一个真实值,您的条件始终为真,您应该使用length@Kevin 提到的属性。

另请注意,该事件被多次resize触发,如果您想收听此事件,最好使用函数:.setTimeout()

var t = null; 
var $w = $(window).resize(function() {
     clearTimeout(t); 
     t = setTimeout(function(){
         if ( $w.width() < 768 ) {
              if ($('#step-4-circle').length == 0)
              $('<div id="step-4-circle">...</div>').insertBefore('#how-step-3');
         } else {
              $('#step-4-circle').remove();
         }
     }, 80);
});
于 2013-12-22T09:50:24.923 回答