AJAX之后Jquery不起作用


Jquery not working after AJAX

使用此代码:

    $("table > :not(thead) > tr.Selected").removeClass('Selected')

查找具有类Selected的所有表行并删除该类。

另外,使用此代码:

    var ReqID = $("table > :not(thead) > tr.Selected").attr('id')

它正在尝试从已选择类的行中查找ID。

这段代码可以很好地工作,直到使用AJAX重新加载表,然后它全部停止工作,这一行也不起作用。

有什么想法吗?

谢谢!

编辑

更多代码:

这是AJAX调用:

function EditRequest()
{var ReqID = $("table > :not(thead) > tr.Selected").attr('id')
alert(ReqID);
$.post("a/outputresults2.php", {editdynamic: ReqID} ,      function(data){
$('#resultstable').html(data);
});
}
function Selected(x)
{
$("table > :not(thead) > tr.Selected").removeClass('Selected')
$('#'+x).toggleClass('Selected');
}

以下是php,它输出原始文件和AJAX后更新的表:

    if($RequestID == $ID){
                $requestrows.="
    <tr id='"$RequestID'" onClick='"Selected($RequestID)'" class='"Selected'" >
        <td><input type='"text'"  id='"MCode'" value='"$ModCode'"></td>
        <td><input type='"text'"  id='"RName'" value='"$RoomName'"></td>
  ..etc etc etc
    </tr>"; 
    }
    }
    if($RequestID != $ID){
$requestrows .=
"       <tr id= '"$RequestID'" onClick='"Selected($RequestID)'" > 
        <td>$ModCode</td>
        <td>$RoomName</td>
        ... etc etc etc
    </tr>"; 
    }
}

echo($requestrows);

动态更改的表也被称为结果稳定

感谢

您可能需要调用带有实时点击事件的事件,该事件可以正确绑定新加载的对象:

$('#my_trigger').live('click', function() {
  .. some code
})

这将有助于从你那里获得更多关于你使用它的确切方式的信息。

查看jquery实时文档

我怀疑这可能是因为jQuery滥用了innerHTML属性。当您试图替换表时,您的"ajax"响应实质上破坏了现有的DOM结构。

要检查这是否是原因,您应该查看javascript控制台。尝试使用console.log()检查您选择的元素是否真的存在。

如果您试图识别单击的行,可以执行以下操作:

$('#resultstable').on('click', 'tbody tr', function() {
    $('#resultstable tr.Selected').removeClass('Selected');
    $(this).addClass('Selected');
});

您不再需要呈现onClick事件,并且可以摆脱function Selected(x)

edit:渲染整个表只是为了让一行处于编辑模式吗?它不是很有效,但如果你这样做,那么你的jquery脚本可以简化为:

$('#resultstable').on('click', 'tbody tr', function() {
    $.post('a/outputresults2.php', {editdynamic: this.id}, function(data) {
        $('#resultstable').html(data);
    });
});

您可以通过将js复制到重新加载视图outputresults2.php来解决此问题。这时$(function(){})再次触发。