jQuery 「イベント」イベントハンドラを解除する

イベントとイベントハンドラの割り当てを解除します。引数を指定しなければ、全イベントに対するすべてのイベントハンドラを解除します。イベントタイプだけ指定した場合は、そのイベントに対するすべてのイベントハンドラを解除します。

書式

$(対象要素).off(イベントタイプ, [セレクタ],[イベントハンドラ名])
$(対象要素).off(イベントタイプ, [セレクタ])
$(対象要素).off(イベントタイプ)
$(対象要素).off()
$('table').off('click dblclick','th',doClick);
$('table').off('click','th');
$('button').off('click');
$('button').off();

サンプル

clickイベントハンドラを割り当て解除する。

 <body>
    <div class="main">
    <div class="header">
    <h1> サンプル </h1>
    </div>
    <div class="content">
      <table>
        <tr>
          <th>ID</th>
          <th>商品名</th>
          <th>単価</th>
          <th>数量</th>
        </tr>
        <tr>
          <td>1</td>
          <td>納豆</td>
          <td>1000</td>
          <td>20</td>
        </tr>
        <tr>
          <td>2</td>
          <td>スパゲッティ</td>
          <td>1000</td>
          <td>10</td>
        </tr>
        <tr>
          <td>3</td>
          <td>牛丼</td>
          <td>1200</td>
          <td>1</td>
        </tr>
        <tr>
          <td>4</td>
          <td>トウモロコシ</td>
          <td>200</td>
          <td>5</td>
        </tr>
      </table>
      <button class="button" type="button">clickだけイベントハンドラを解除</button>
    </div>
    <div class="footer">
      <hr>
      <p class="copyright">2024 xxxx all rights reserved.</p>
    </div>
    </div>
    <script>
    $(document).ready(function(){
      function doclick(){
        alert($(this).text());
      }
      $('table').on('click dblclick','td',{msg:'をクリックしました'},doclick);
      $('.button').on('click',function(e){
        $('table').off('click','td', doclick);
      });
    });
    </script>
    </body>
実行結果
初期画面

「clickだけイベントハンドラを解除」ボタンを押した場合、イベントが発火しなくなる。

実行結果
テーブルのセルをクリックした場合