簡體   English   中英

jQuery選擇器未注冊添加的類

[英]jQuery selector doesn't register the added class

任何人都可以請我解釋一下為什么此代碼可以做到這一點。

我想實現的是,當單擊第一個按鈕時,javascript將禁用的類添加到第二個按鈕中,而當第二個按鈕被禁用類按下時,則javascript將不會運行。

<!DOCTYPE html>  
<html lang="en">  
<head>
<meta charset="utf-8" />  
<title>jQuery question</title>  
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<style>
a.success { background: green }
</style>
</head>  
<body>
    <div id="holder">
        <a href="#" class="button">Button 1</a>
        <a href="#" class="button">Button 2</a>
    </div>
</body>
<script>
$(function(){

  $('#holder a.button:not(.disabled)').on('click', function() {

    // Toggle success class
    if($(this).hasClass('success')) {
        $(this).removeClass('success');
    }
    else {
        $(this).addClass('success');
    }

    // Add disabled class to the not so lucky button 
    $('#holder a.button:not(.success)').each(function() {
        $(this).addClass('disabled');
    });

  });

});
</script>
</html>

從控制台看情況並非如此。 即使第二個按鈕獲得了禁用的類。 盡管:not(.disabled)選擇器,按禁用按鈕仍然運行javascript。

當我像這樣更改它時,它的行為符合預期

$('#holder a.button').on('click', function() {
    if($(this).hasClass('disabled')) {
      return false;
    }

但是有人可以解釋為什么會這樣嗎?

選擇器不會在每次觸發事件時動態地重新評估自己。

解決此問題的最佳方法是使用事件委托:

$('#holder').on('click', '.button:not(.disabled)', function() {
    // snip...
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM