2017-08-07 101 views
0

關閉下拉我不明白爲什麼我的腳本不工作:通過點擊外

$(() => { 
    let dropdown = $('.passengers-main-dropdown'), 
     drop = dropdown.siblings('.dropdown-box'); 

    dropdown.on('click', function(){ 
     $(this).addClass('active'); 
     drop.addClass('active'); 
    }); 

    $(document).on('click', function(e){ 
     if(dropdown.is(e.target) || !drop.is(e.target) || drop.has(e.target).length === 0) { 
      drop.removeClass('active'); 
      dropdown.removeClass('active'); 
     } 
    }); 
}); 

的這裏的邏輯是:與類.passengers-main-dropdown然後下拉成爲.active元素上點擊時。並通過點擊文件,算法用於檢查:

  1. 下拉不是點擊
  2. .passengers-main-dropdown的目標是點擊
  3. 的目標的任何下拉的子元素都沒有點擊的目標

我做錯了嗎?謝謝。

+0

閱讀有關stopPropagation – ixpl0

+0

@ iXplo'stopPropagation()'是一個非常糟糕的主意,因爲它可以防止其它腳本。 – JamesJGoodwin

回答

0

我通常使用closest()

$(document).on('click', function(e){ 
    var $tgt = $(e.target); 
    if($tgt.closest('.passengers-main-dropdown').length 
     || !$tgt.closest('.dropdown-box').length) { 
     drop.removeClass('active'); 
     dropdown.removeClass('active'); 
    } 
}); 
+0

遇到此錯誤:'不能讀取'null'的屬性'長度' – JamesJGoodwin

+0

錯誤...不能爲空。即使沒有選擇符匹配,jQuery總是返回一個類似於對象的數組 – charlietfl