2016-05-06 71 views
0

我有一個.each循環是這樣的:在每個循環Click事件觸發多次

$('.form-base-subscriptions input').each(function (index, value) { 
    var uniqueId = $(this).attr('id'), 
     uniqueId = uniqueId.substring(uniqueId.lastIndexOf('_')), 
     $parent = $(this).parent(), 
     $content = $parent.html(); 
     $content = $content.split('~'), 
     input = $content[0], 
     amount = $content[4], 

var $toggle = $parent.find('.form-toggle'), 
    $checkbox = $toggle.find('input'); 

    $toggle.on('click', function() { 
     $('.form-base-subscriptions .form-toggle').removeClass('active'); 
     $('.form-base-subscriptions input').prop('checked', false); 
     $toggle.addClass('active'); 
     $checkbox.prop('checked', true); 

      var currentId = $(this).attr("id"); 

      if (currentId == "toggle_151" || currentId == "toggle_170") { 
       amount = '1.50'; 
      } else { 
       console.log('check'); 
       amount = '0'; 
      } 

      $('#toggle_153 input').attr('data-amount', amount); 
      $('#toggle_153 span').html(amount); 

     //updateWellnessPrice(); 
     updateSubscriptionAmount(); 
    }); 

如何我每次點擊觸發此onCLick event只有一次?現在每點擊一次就會觸發兩次。

+1

移動點擊ev退出'.each'循環。由於循環,現在您多次註冊點擊事件。 – Krishna

+0

可能不相關,但由於流氓';'(或者更可能,由於流氓','而且你沒有在頂部聲明所有變量),你好像在全局範圍內放棄了變量。 – Sumurai8

+0

需要查看相關的html - 具體來說,是否有一個'.form-toggle'(如名稱和錯誤暗示)或每個輸入一個(如代碼所示)。如果只有一個,你需要確保'$ toggle.on('click''只被調用一次 –

回答

1

初始化事件循環後

var $toggle = ''; 
    $('.form-base-subscriptions input').each(function (index, value) { 
    var uniqueId = $(this).attr('id'), 
     uniqueId = uniqueId.substring(uniqueId.lastIndexOf('_')), 
     $parent = $(this).parent(), 
     $content = $parent.html(); 
     $content = $content.split('~'), 
     input = $content[0], 
     amount = $content[4], 

    $toggle = $parent.find('.form-toggle'), 
    $checkbox = $toggle.find('input'); 
}); 

$toggle.on('click', function() { 
      $('.form-base-subscriptions .form-toggle').removeClass('active'); 
      $('.form-base-subscriptions input').prop('checked', false); 
      $toggle.addClass('active'); 
      $checkbox.prop('checked', true); 
      updateWellnessPrice(); 
      updateSubscriptionAmount(); 
     }); 
+0

在循環並聲明$ toggle和$全局複選框 – Raki

+0

爲什麼我應該設置變量gloablly? – Sreinieren

+0

如果您在循環內聲明$ toggle,那麼變量的範圍將在循環內部,這裏我在循環之外註冊事件,以便$ toggle範圍如果你在外部聲明(它不需要是全局的但是在循環之外聲明) – Raki

0

把一個班的所有相關元素,並添加事件偵聽器這個類:

HTML

<div id="toggle_n" class="myElem"> .. </div> 
... 

jQuery的

$(document).on('click', '.myElem', function() { 
    // Do your stuff here .. 
});