2015-12-02 108 views
0

我一直在做一些研究到這一點,到目前爲止,所有的我已經能夠找到它,你只能刪除事件偵聽器。不是實際的事件。例如,我有一個錨點鏈接,點擊一次後。我不希望用戶能夠再次點擊它。我怎麼能這樣做呢?如何從錨鏈接中刪除點擊事件?

我有一個非常簡單的設置如下:

 <script> 

      $(document).on('click', '.prevPage', function() { 
    alert("In"); 
    if (parseInt($('.nextPage').attr('rel')) > 2) { 
     //TAKE OFF CLICK  
     currentPage -= 1; 
     rowsShown = $('.pageSize').val(); 
     skip = (currentPage * rowsShown) - rowsShown; 
     GetMoreData(skip, 2); 
    } 
}); 

function RePager(skip, btnClicked) { 
    /* ** NEED TO WORK OUT THE INPUT BOX ** */ 
    if (ReportType() == 2) { 
     var FilteredData = $('.BoolFiltered').val(); 
     var totalPages = GetTotalPages(); 
     if (totalPages == 0) { 
      totalPages = 1; 
     } 
     var newPrevPage = currentPage - 1; 
     var newNextPage = currentPage + 1; 
     /* 
     1 - First Page 
     2 - Prev Page 
     3 - Next Page 
     4 - Last Page 
     4+ - Ajax filter 
     */ 
     switch (btnClicked) { 
      case 1: 
       $('.prevPage').attr('rel', 1); 
       $('.nextPage').attr('rel', 2); 
       $('.lastPage').attr('rel', totalPages); 
       $('.pagedisplay').val(currentPage + '/' + totalPages); 
       break; 
      case 2: 
       $('.prevPage').attr('rel', newPrevPage); 
       $('.nextPage').attr('rel', newNextPage); 
       $('.lastPage').attr('rel', totalPages); 
       $('.pagedisplay').val(currentPage + '/' + totalPages); 
       //PUT CLICK BACK ON 
       break; 
      case 3: 
       $('.prevPage').attr('rel', newPrevPage); 
       $('.nextPage').attr('rel', newNextPage); 
       $('.lastPage').attr('rel', totalPages); 
       $('.pagedisplay').val(currentPage + '/' + totalPages); 
       break; 
      case 4: 
       $('.prevPage').attr('rel', totalPages - 1); 
       $('.nextPage').attr('rel', totalPages); 
       $('.lastPage').attr('rel', totalPages); 
       $('.pagedisplay').val(totalPages + '/' + totalPages); 
       break; 
      default: 
       currentPage = 1; 
       $('.prevPage').attr('rel', 1); 
       $('.nextPage').attr('rel', 2); 
       $('.lastPage').attr('rel', totalPages); 
       $('.pagedisplay').val(currentPage + '/' + totalPages); 

     } 

    } 
} 


     </script> 

<body> 
    <a class="prevPage">WORK</a> 
</body> 

編輯:我會去到更多的細節。用戶點擊該事件後,我想禁用點擊。功能結束後,我想讓用戶再次點擊按鈕。我總是可以改變課程名稱,但我不想這樣做,我寧願找一個更優雅的解決方案。

編輯2:檢查上面的代碼中實際問題

+0

你可以簡單地關掉'click'事件,比如'$( 「.test」)。off('click',function(e){});' – Akshay

+0

'函數結束後'你在說哪個函數?如果您正在進行任何異步操作,請提供相關代碼 –

+0

@ A.Wolff檢查實際代碼的編輯。 –

回答

2

最簡單的辦法是使用,而不是試圖消除聽衆和什麼,而不是CSS。

jQuery有一個.addClass()功能,您可以使用。

範例CSS

.disabled { 
    pointer-events: none; 
    cursor: default; 
} 

那麼你的腳本代碼

$(document).ready(function() { 
    $(".test").click(function() { 
    $(this).addClass("disabled"); 
    }); 
}); 

這樣,你可以很容易地做到.removeClass()以及

+0

Ya在任何異步操作完成時刪除類。但是您應該委託它:'$(document).on('click','.prevPage:not(.disabled)',function(){...});' –

+2

'$(document).on('單擊','.prevPage:not(.disabled)',function(){$(this).addClass(「disabled」); doSomeAsyncRequest()。always(function(){$(this).removeClass('disabled' );}。bind(this));' –

+0

好的解決方案,但我不想這樣做使用css +1 –

3

你需要首先把它包在DOM已準備就緒。否則,腳本將在元素準備好之前運行。然後,您可以使用event.preventDefault()禁用正常點擊。

$(document).ready(function() { 
    $(".test").click(function (e) { 
    e.preventDefault(); 
    }); 
}); 
+1

事件被委派,以便工作。 – Jai

+1

我不認爲這是所問的。 – void

+0

檢查編輯更新的信息 –

6

您可以使用.one()代替:

$(document).one('click', '.test', function(e) { 
 
    $('pre').append(e.type+'ed'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a class="test">WORK</a> 
 
<br> 
 
<pre></pre>


按照您的編輯:

您可以使用.on()來綁定事件和使用.off()來unbin d it。是這樣的:

function bindClick(e) { 
 
    $('pre').append(e.type + 'ed'); 
 
    $(document).off('click', '.test', bindClick); // unbound click 
 
    setTimeout(function() { 
 
    $(document).on('click', '.test', bindClick); // bound again after 2 sec 
 
    }, 2000); 
 
} 
 

 
$(document).on('click', '.test', bindClick); // bound click
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a class="test">WORK</a> 
 
<br> 
 
<pre></pre>

+0

檢查編輯更新的信息 –

+0

@AndrewKilburn好吧,那麼它不在問題中,因此'.off()'可以與'.on()'事件監聽器一起使用。 – Jai

0
$(document).on('click', '.test', function (e) { 
     e.preventDefault(); 
     $(this).off("click"); 
}); 

使用.off

$(document).off('click', '.test'); 
+0

檢查編輯更新信息 –