Javascript 复选框更改事件触发两次

Javascript 复选框更改事件触发两次,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我正在开发一个可以注册大学课程的应用程序。他们添加并选择注册类型、课程类型、批次和科目。我把科目放在桌子上,当他们选择课程类型时,也就是批量。因此,他们可以选择主题,在他们添加之后,它将被放入selected subjects表中。我的代码将在他们第一次工作时继续工作。但突然之间,它们发生了变化,它们是注册类型、课程类型和批次。它会列出科目。但是,当他们选择一个主题时,它将向所选主题表添加两个表TR。为什么呢 JQUERY HTML 所选主题代码从DOM获取它 截屏 如你所见,它将添加两个TR。

我正在开发一个可以注册大学课程的应用程序。他们添加并选择注册类型、课程类型、批次和科目。我把科目放在桌子上,当他们选择课程类型时,也就是批量。因此,他们可以选择主题,在他们添加之后,它将被放入selected subjects表中。我的代码将在他们第一次工作时继续工作。但突然之间,它们发生了变化,它们是注册类型、课程类型和批次。它会列出科目。但是,当他们选择一个主题时,它将向所选主题表添加两个表TR。为什么呢

JQUERY

HTML

所选主题代码从DOM获取它

截屏


如你所见,它将添加两个TR。为什么

您正在将一个新的事件处理程序绑定到$subjectsTable。每次调用该函数时都选择Subjects。问题将源于javascript位于一个被多次调用的函数中。

每次调用该函数时,您都将一个新的事件处理程序绑定到$subjectsTable.selectedSubjects。问题将源于javascript位于被多次调用的函数中这一事实。

您应该提供jsfiddle@Itay不能,因为这些数据是从数据库中编译的。$selectedSubjects的此行是什么。checkbox.not:checked.attrdisabled,bol;?它是否也可能触发更改事件?@Itay用户只能选择课程类型允许的科目数。他们可以选择我们通过var shouldChecked=$CT\u No\u Of_subjectscont.val设置的科目;调试提示:put console.logfired;回来在你的函数中间。如果控制台中触发了两个事件,则表示再次触发事件的是上面的一行。然后将log和return命令放在上面几行。当它停止向日志写入两次时,您就找到了再次触发它的原因。假设onchange事件不是两次自然触发,那么您应该提供jsfiddle@Itay不能,因为这些数据是从数据库中编译的。$selectedSubjects的此行是什么。checkbox.not:checked.attrdisabled,bol;?它是否也可能触发更改事件?@Itay用户只能选择课程类型允许的科目数。他们可以选择我们通过var shouldChecked=$CT\u No\u Of_subjectscont.val设置的科目;调试提示:put console.logfired;回来在你的函数中间。如果控制台中触发了两个事件,则表示再次触发事件的是上面的一行。然后将log和return命令放在上面几行。当它停止向日志写入两次时,您就找到了再次触发它的原因。假设onchange事件不会自然触发两次
$("#subjectsTable").on('change', '.selectedSubjects', function (event) {
event.stopPropagation();
    var selectedReg = $('#CouserFinder option:selected').val();
    var selectedCouse = $('#CourseSet option:selected').val();
    var selectedBatch = $('#alreadyBatchSorting option:selected').val();

    if(selectedBatch != "Select Your Batch"){
    var shouldChecked = $("#CT_No_Of_SubjectsCount").val();

  var bol = $(".selectedSubjects:checkbox:checked").length >= shouldChecked;     
  $(".selectedSubjects:checkbox").not(":checked").attr("disabled",bol);

    if ($(this).is(":checked")) {
        var indexChecked = $(this).closest("tr").attr("data-index");
        alert(indexChecked);
        var selectedSCode = $(this).closest("tr").find(".selectedSCode").text();
        $("#selectesSubjectsRecodes tr:last").after("<tr data-index=" + indexChecked + "><td>" + selectedReg + "</td><td>" + selectedCouse + "</td><td>" + selectedSCode + "</td><td>" + selectedBatch + "</td></tr>");


    } else {
        var indexAdded = $(this).closest("tr").attr("data-index");
        var findRow = $("#selectesSubjectsRecodes tr[data-index='" + indexAdded + "']");
        findRow.remove();

    }
}
else{
alert("Warning!: Select Your Batch");
$(this).prop('checked', false)
}
});
<tr class="success" data-index="10">
<td>
<input class="selectedSubjects" type="checkbox" name="selectedSubjects">
</td>
<td class="selectedSCode">BCS-DIP-UID</td>
<td class="selectedSName">UID</td>
</tr>
<tr data-index="10">
<td>BCS-DIP-S3</td>
<td>BCS-DIP</td>
<td>BCS-DIP-UID</td>
<td>BCS-DIP-APR/2014-002</td>
</tr>
<tr data-index="10">
<td>BCS-DIP-S3</td>
<td>BCS-DIP</td>
<td>BCS-DIP-UID</td>
<td>BCS-DIP-APR/2014-002</td>
</tr>