JQuery在AJAX之后无法正常工作

时间:2012-02-15 01:15:45

标签: php javascript jquery ajax

使用此代码:

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

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

另外,使用此代码:

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

试图从已选择类的行中找到ID。

此代码完美无缺,直到使用AJAX重新加载表,然后它才停止工作,并且该行无效。

有什么想法吗?

Thankss!

修改

更多代码:

以下是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);

动态更改的表也称为resultstable

由于

4 个答案:

答案 0 :(得分:2)

您可能需要使用实时点击事件来呼叫您事件,该事件正确绑定新加载的对象:

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

将有助于您了解有关使用此内容的确切方式的更多信息。

查看jquery live docs

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

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

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

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

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

答案 3 :(得分:0)

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