簡體   English   中英

jQuery 數據屬性僅在第二次單擊后更新

[英]jQuery data attribute updates only after second click

我有這個 jquery 代碼,它應該打印所有選定的復選框:

$('.engagement-type').on('click', function () {
    var engagementTypes = $('.engagement-type').parent().find('[data-checkbox="checked"]');
    console.log(engagementTypes);
});

表中有 12 個復選框:

<td>
    <input name="EngagementTypes[0].EngagementTypeId" 
      id="EngagementTypes_0__EngagementTypeId" 
      type="hidden" value="1" data-val-required="The Engagement field is required." 
      data-val="true" data-val-number="The field Engagement must be a number.">

    <span class="pull-left">
        <div class="engagement-type" data-checkbox="checked">
            <input name="EngagementTypes[0].IsSelected" 
              id="EngagementTypes_0__IsSelected" type="checkbox" value="true" 
              data-val-required="The IsSelected field is required." 
              data-val="true">
            <input name="EngagementTypes[0].IsSelected" type="hidden" value="false">
        </div>
    </span>
    Audit
</td>

第一次單擊復選框后,我會得到所選參與類型的空列表。 只有在選中第二個復選框后才會出現第一個復選框。 這是為什么?

在此處輸入圖片說明

var engagementTypes = $('.engagement-type').parent().find('[data-checkbox="checked"]')

這僅在您單擊 div 參與類型時才有效。 但是,如果您單擊 div 中的復選框之一,則父級是具有復選框屬性的復選框,因此他不會在其中找到另一個復選框。

所以你應該總是選擇

var elementYouWant = $('.engagement-type')

然后檢查是否選中了數據屬性。

var dataElement = elementYouWant.data();
if (dataElement['checkbox'] == "checked") {
   console.log("Oh yeah baby")
}

當然,如果有多個,您應該為每個循環執行此操作。

正如@TJ Crowder 提到的,必須有您沒有提供的額外代碼。 至少將設置數據復選框的部分=選中。

我假設使用復選框狀態本身,如:

$('.engagement-type').on('click', function () {

    var engagementTypesChecked = $('.engagement-type').parent().find('input[type="checkbox"]:checked');
    console.log(engagementTypesChecked);

});

暫無
暫無

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

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