Попробуйте заменить ваш обработчик кликов этим делегированным обработчиком, прикрепленным к родительскому элементу таблицы.
$("#report").delegate("tr.odd", "click", function() {
$(this).next("tr").toggle();
$(this).find(".arrow").toggleClass("up");
});
Поскольку событие click фиксируется таблицей, нажатие на новые (замененные) элементы будет работать, как и ожидалось, поскольку событие всплывает от целевого элемента к родительскому элементу.который обработчик прикреплен.Обработчик выполнит переданную функцию, только если элемент, захваченный селектором, переданным в первом параметре .delegate
, соответствует целевому элементу .
EDIT: jQuery 1.3.2 не имеет.delegate
, но вы можете использовать .live
вместо:
$("#report tr.odd").live("click", function() {
$(this).next("tr").toggle();
$(this).find(".arrow").toggleClass("up");
});
Чтобы повторно применить CSS, вы можете сделать это:
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
$("#report tr:odd").addClass("odd");
$("#report tr:not(.odd)").hide();
$("#report tr:first-child").show();
}
или избавьтесь от этого длинного ajax-метода и используйте $.load
согласно предложению @Tieson T:
$("#changeContent").click"(function() {
$("#myDiv").load("getData.php", function() {
$("#report tr:odd").addClass("odd");
$("#report tr:not(.odd)").hide();
$("#report tr:first-child").show();
});
});
и убедитесь, что изменили свою кнопку на эту для использования с вышеуказанным решением.
<button type="button" id="changeContent">Change Content</button>