我正在开发一个包含所有用户的表,也可以通过单击tablerow并在执行单击后打开的表单中编辑数据来更改这些用户.
如果我在页面加载时加载了所有用户,我的代码工作正常.
一旦我更改了我的数据表以在数据表初始化时加载用户,它将只在第一页上工作.
如果我取消注释我的下半部分ready(function())并删除fnInitComplete它甚至不会在第一页上工作.
这是我的代码的相关部分:
$(document).ready(function(){
tbl = $('#nutzer').dataTable( {
"bJQueryUI": true,
"sScrollX": "100%",
"bProcessing": true,
"bServerSide": true,
"iDisplayLength": 10,
"sAjaxSource": "xhr.php",
"sPaginationType": "full_numbers",
"fnInitComplete": function() {
$('#nutzer tbody tr').on("click", function () {
aufklappen(this);
} );
}
} );
$( "#create-user" ).button().click(function() {
$( "#dialog-form" ).dialog( "open" );
});
// $('#nutzer tbody tr').on("click", function () {
// aufklappen(this);
// } );
});
function aufklappen(row) {
if ( tbl.fnIsOpen(row) ) {
tbl.fnClose(row);
} else {
set = tbl.fnSettings().aoOpenRows[0];
(set != null) ? (tbl.fnClose(set.nParent)) : null;
$.post("benutzerBearbeiten.php", {
funktion : "benutzerDaten",
id : $(row).children( "td:first-child" ).text()
}, function(data){
tbl.fnOpen( row, data);
$( "#deaktivieren").button().click(function(e){
e.preventDefault();
deaktivieren();
});
$( "#speichern").button().click(function(e){
e.preventDefault();
speichern();
});
}
) };
}
Run Code Online (Sandbox Code Playgroud)
通过数据表分页页面加载或页面更改后,我可以手动调用
$('#nutzer tbody tr').on('click', function () {
aufklappen(this);
} );
Run Code Online (Sandbox Code Playgroud)
并且click函数完美地绑定到tr.
在我看来,由datatables-plugin创建的元素没有起到我定义的on()处理程序的dom,但我无法弄清楚原因.
利用"系统重启"的答案,我最终删除了fnInitComplete部件并添加
"asStripeClasses": [ "odd nutzer_tr", "even nutzer_tr"]
Run Code Online (Sandbox Code Playgroud)
到初始化部分和
$("body").delegate(".nutzer_tr", "click", function () {
aufklappen(this);
});
Run Code Online (Sandbox Code Playgroud)
到了ready(function()).附加类nutzer_tr是为了防止打开的tablerow关闭.
The*_*art 23
我想你需要现场活动:
$('body').on('click', '#nutzer tbody tr', function () {
aufklappen(this);
});
Run Code Online (Sandbox Code Playgroud)
或者可以使用delegate()
$('body').delegate('#nutzer tbody tr', 'click', function () {
aufklappen(this);
});
Run Code Online (Sandbox Code Playgroud)