2015-08-25 12 views
1

我正在使用jQuery DataTables和一些自定义代码为网站构建比较篮子。如何在Datatables中强制执行.change()事件?

我知道.change()强制更改事件,但是当我在DataTable中执行此操作时,它似乎不起作用。

下面是有问题的代码:

table.on('change', '[type="checkbox"]', function() { 
~ 
~ 
~ 
removeCtrl.addEventListener('click', function() { 
    var removal_id = $(this).parent().data("idx"); 

    // .change() forces the 'changed' event to trigger. 
    $('#' + removal_id).prop('checked', false).change(); 

    $(this).parent().remove(); 
}); 
}); 

该代码附加到在图像的右上角小“X”。图像本身完全不在DataTable中。

该行找到需要取消选中的确切复选框,并取消选中该复选框,然后应该触发change事件,但似乎没有工作。它适用于我所处的任何页面。但是,如果我在第2页上并且需要取消选中的复选框位于第1页上,它将取消选中它,但不会触发我需要触发的更改事件。

我也试过table.$('#' + removal_id).prop('checked', false).change();,它也做同样的事情。引用DataTable对象的表。

当我在与需要取消选中的复选框相同的页面上时,change事件正确触发。

任何想法,我需要改变,使更改事件触发时,不在复选框在同一页上?

+0

应该发生时'change'发生的表有哪些? – jonmrich

+0

@jonmrich所有的代码都在'table.on('change''部分的代码中,并且除了在这个单独的实例中正常工作外,我只需要将事件改为fire,但为了简单起见, alert('change event');'。在所有其他部分'.change()'强制这个工作正常,但不是在上面描述的单个实例中。 –

回答

1

导致其他网页

元素不存在DOM。如下所示使用的委托事件处理程序仅适用于DOM中存在的元素。

table.on('change', '[type="checkbox"]', function(){}); 

SOLUTION

替换为change事件处理程序命名函数匿名功能,例如onCheckboxChange如下所示。

function onCheckboxChange(e){ 
    console.log(this); 
} 

// ... skipped ... 

table.on('change', '[type="checkbox"]', onCheckboxChange); 

然后,当你需要触发手柄change事件的复选框,使用下面的代码:

$('#' + removal_id) 
    .prop('checked', false) 
    .each(function(){ 
     onCheckboxChange.call(this); 
    }); 
+0

不仅仅是一个答案,而是它为什么不起作用的推理。感谢您花费额外的时间。:) –

相关问题