estoy usando http://datatables.net/Datatables No puedo llamar a un evento onclick después de paginar?
La mesa de demostración en su página principal se asemeja más o menos la misma cosa que estoy usando (paginación, específicamente), excepto que cada fila tiene un área para hacer clic:
<a href="#" class="show-post"><%= Post.title %></a>
Este enlace abre un diálogo modal de la interfaz de usuario de jquery que muestra cierta información que se solicita ajax.
Parte 1 (resuelto), véase la parte 2 a continuación
Estoy intentando ejecutar un evento onclick que funciona normalmente en la primera página, pero tan pronto como me voy a la página 2 (o cualquier otro) deja de funcionar. Revisé la fuente para asegurarse de que no estaba haciendo nada gracioso en todo el código es de hecho allí (todas las filas, incluso los más ocultos por la paginación)
¿Alguna idea?
$(function() {
$('#dialog').dialog({
autoOpen: false,
resizable: false,
maxHeight: 600,
width: 650,
modal: true,
beforeClose: function close() {
$('#dialog').html('');
}
});
$('.show-post').click(function() {
clickLink(this);
return false;
});
});
Gracias a todos los que respondieron mi pregunta! Solucioné ese problema.
Parte 2
mi próximo 'problema' identificación como para llegar al trabajo es ... Estoy usando las teclas de flecha izquierda y derecha para que puedan 'exploración' de la fila siguiente o anterior y muestra la información. Esto es opuesto a cerrarlo y luego tener que hacer clic en el siguiente.
Me gustaría que sea así cuando llegue a la parte inferior de la página uno, o al principio de la página dos, ocultando siguiente/anterior respectivamente cargará automáticamente esa página, vaya a la parte superior (o inferior) y luego abra ese diálogo para esa fila en la otra página.
aquí está mi función de clic (sé que es tipo de probablemente no estructurado el mejor ... im nuevo en jQuery)
$(document).ready(function() {
oTable = $('#posts').dataTable({
"bJQueryUI": true,
"iDisplayLength": 400,
"bAutoWidth": false,
"sPaginationType": "full_numbers",
"aLengthMenu": [[-1, 400, 100, 50], ["All", 400, 100, 50]]
});
$(this).keydown(function(e) {
var id = $("#dialog").attr("data-id");
currentPost = $("#posts tr[data-id=" + id + "]");
if (e.keyCode == 39 && $('#dialog').html() != "") {
/* Remove current background */
$(currentPost).blur()
$(currentPost).removeClass("current");
$(currentPost).find("td.sorting_1").removeClass("current");
var next = currentPost.next().find(".show-post");
clickLink(next);
} else if (e.keyCode == 37 && $('#dialog').html() != "") {
/* Remove current background */
$(currentPost).removeClass("current");
$(currentPost).find("td.sorting_1").removeClass("current");
var prev = currentPost.prev().find(".show-post");
clickLink(prev)
}
});
});
aquí tiene la función de clic real
function clickLink(src) {
var post = $(src);
var id = $(post).parent().parent().attr('data-id');
/* Set background for current line */
$(post).parent().parent().find("td.sorting_1").addClass("current");
$(post).parent().parent().addClass("current");
$('#dialog').attr("data-id", id);
$('#dialog').load('/show-post/' + id, function() {
$.ajax({
type: "POST",
url: "/checkstatus/" + id,
dataType: "html",
error: function(data){
$("#dialog").fadeOut("fast", function() {
$("#dialog").html("<img src='/img/invalid.jpg' alt='invalid' style='margin: 40px auto; display: block;'>").fadeIn("slow");
});
}
});
/* Set Visited */
$(post).parent().parent().removeClass("visited").addClass("visited");
$('#dialog').dialog({
title: post.html(),
beforeClose: function close() {
$(post).parent().parent().find("td.sorting_1").removeClass("current");
$(post).parent().parent().removeClass("current");
},
buttons: {
"Email 1": function() {
$.ajax({
type: "POST",
url: "/get-email/" + id + "/" + "1",
dataType: "html",
success: function(data) {
window.location.href = data + "&subject=" + post.html();
}
});
},
}
});
$('#dialog').dialog('open');
});
return false;
};
Parece que su paginación no está volviendo a conectar el controlador de clics después de que el dom cambia. Intente volver a vincular los eventos o utilizar una forma dinámica de adjuntar el evento, como delegar o en vivo (dependiendo de la versión de jquery que esté utilizando). – scrappedcola