如何使用 jQuery 點選頁面上的任何位置,但排除一個元素?


我們將學習如何檢查使用者是否點選了頁面上的任何位置,但排除了一個元素,我們將使用 JavaScript 和 jQuery 來實現。

在使用模態框時,我們需要在使用者點選模態框外部時關閉模態框。因此,我們可以使用 JavaScript 或 jQuery 的各種方法來實現。

此外,還有其他用例需要我們檢查使用者是否點選了特定元素。例如,當用戶點選下拉選單外部時,關閉下拉選單;否則,從下拉選單中選擇選項。

這裡,我們有不同的方法來檢查使用者是否點選了頁面上的任何位置,但排除了一個元素,我們將使用 jQuery 來實現。

將點選的元素與不可點選的元素進行比較

在 jQuery 中,我們可以在文件上新增一個點選事件監聽器。因此,每當使用者點選文件上的任何位置時,我們都可以監聽該事件。

在這裡,我們將獲取點選的元素並使用目標物件的 id 屬性查詢其 id。之後,我們將該 id 與不可點選元素的 id 進行比較,如果兩者匹配,則表示使用者點選了不可點選的元素。

語法

使用者可以使用以下語法將點選元素的 id 與不可點選元素的 id 進行匹配,以檢查是否點選了不可點選的元素。

if (event.target.id == "unClickable")
   return; // unclickable element is clicked, return from the function.
// perform the task on click outside.

在上面的語法中,事件詳細資訊包含觸發點選事件的目標物件,而“id”是目標物件的屬性。

示例

在下面的示例中,我們建立了 div 元素並將“unclickable”作為 id 值分配給它。之後,每當使用者點選 body 元素時,我們檢查目標元素的 id 是否與“unclickable”匹配。如果兩者匹配,我們將執行函式中的 return 語句;否則,我們將執行某些操作來處理點選事件。

<html>
<head>
   <style>
      #unClickable {
         height: 200px;
         width: 600px;
         background-color: aqua;
         font-size: 2rem;
      }
   </style>
   <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"> </script>
</head>
<body>
   <h3>Comparing the clicked element with the unclickable element</h3>
   <p>Click anywhere the on the page outside and inside the div element below</p>
   <div id = "unClickable"> This is an unclickable div element </div>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      $('body').click((event) => {
         if (event.target.id == "unClickable")
         return;
         output.innerHTML += "You have clicked outside the div element. <br>";
      });
   </script>
</body>
</html>

使用事件的 stopPropagation() 方法

stopPropagation() 方法阻止父元素執行任何事件。因此,我們可以對任何 HTML 元素使用 stopPropagation() 方法,並向整個文件新增點選事件,以使特定 HTML 元素不可點選。

語法

使用者可以按照以下語法使用 stopPropagation() 方法點選整個文件,但排除任何單個 HTML 元素。

$('html').click(() =>: {
   // clicking outside the div element
});
$('#modal').click(function (event) {
   event.stopPropagation();
});

在上面的語法中,我們透過訪問“html”向整個文件添加了點選事件。此外,我們還在包含 id 為“modal”的元素上添加了點選事件,並使用 stopPropagation() 方法來阻止點選。

示例

在下面的示例中,我們建立了模態框。當用戶開啟網頁時,它會自動顯示模態框元素。之後,當用戶點選模態框元素外部時,它會關閉模態框元素,使用者可以在輸出中觀察到這一點。

<html>
<head>
   <style>
      #modal {
         height: 200px;
         width: 600px;
         font-size: 2rem;
         border: 5px solid black;
      }
   </style>
   <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"> </script>
</head>
<body>
   <h2>Using the <i> stopPropagation() </i> method in jQuery </h2>
   <p>Below DIV element is unclickable. Click anywhere on the page </p>
   <div id = "modal"> This is a modal element. </div>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      $('html').click(() => {
         $('#modal').css("display", "none");
         output.innerHTML = "You have clicked outside the modal."
      });
      $('#modal').click(function (event) {
         event.stopPropagation();
      });
   </script>
</body>
</html>

使用 jQuery 的 is() 方法

jQuery 的 is() 方法用於匹配 HTML 的兩個元素。在這裡,我們將匹配點選的元素與不可點選的元素。如果兩個元素不匹配,我們將執行我們想要在點選事件上執行的操作。

語法

使用者可以按照以下語法使用 is() 方法點選元素外部。

if (!$(event.target).is('#sample_div')) {
   // clicked outside
}

在上面的語法中,event.target 表示點選的元素。我們將“#sample_div”作為 is() 方法的引數傳遞,表示 id 為“sample_div”的元素。

示例

在這個例子中,我們建立了一個小的 div 元素並應用了一些 CSS。之後,我們透過使用 id 訪問它們來比較點選的和不可點選的 div 元素。如果兩者不匹配,我們將一些 HTML 追加到網頁;否則,我們將更改網頁的 HTML。

<html>
<head>
   <style>
      #sample_div {
         height: 170px;
         width: 600px;
         font-size: 2rem;
         border: 3px solid green;
      }
   </style>
   <script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js"> </script>
</head>
<body>
   <h2>Using the <i> is() </i>method injQuery </h2>
   <p>Click anywhere on the page. Only below DIV element is unclickable.</p>
   <div id = "sample_div"> This is a sample div element. </div>
   <div id = "output"> </div>
   <script>
      let output = document.getElementById('output');
      $('body').click(function (event) {
         if (!$(event.target).is('#sample_div')) {
            output.innerHTML += "Successfully, clicked outside the div element. <br>"
         }
      });
   </script>
</body>
</html>

使用者學習了三種方法來點選文件中的任何位置,但排除一個元素。event.stopPropagation() 方法是使任何元素不可點選的好方法。此外,當用戶點選子元素時,我們可以對子元素執行單獨的操作,而不是對父元素執行操作。

更新於:2023年1月19日

5K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.