2012-02-15 6 views
0

Используя этот код:Jquery не работает после того, как AJAX

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

Чтобы найти все строки таблицы, которые имеют класс Selected и удалить этот класс.

Plus, используя этот код:

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

который пытается найти идентификатор от ряда, который имеет класс выбран.

Этот код отлично работает до тех пор, пока таблица не будет перезагружена с помощью AJAX, а затем все перестанет работать, и эта линия не работает.

Любые идеи?

Спасибо!

EDIT

Подробнее Код:

Вот 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'ed:

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

Благодаря

+1

Не могли бы вы разместить соответствующие части процедуры AJAX и HTML? – HackedByChinese

+0

Добавлен дополнительный код. Благодаря! – user1096685

+0

Как вы называете editRequest? – nodrog

ответ

2

Вы, вероятно, нужно позвонить вам событие с живым щелкните событие, которое связывает недавно загруженный объект правильно:

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

помогло бы иметь больше информации от вас о точном пути вы используете это.

взглянуть на jquery live docs

+0

Что это касается вопроса? В коде нет обработчиков кликов или любых других обработчиков. – Jacob

+0

Спасибо за ваш ответ. Когда я исследовал, прежде чем я опубликовал, я увидел, что многие люди ссылаются на использование on(). Но, как сказал Иаков, я не мог видеть, что я использовал обработчик кликов. Так что это просто меня смутило! Спасибо – user1096685

+0

@ Якоб согласился, было бы хорошо видеть больше кода. но часто это так, поэтому, хотя полезно указать на это. я должен удалить свой ответ? я не совсем уверен в этикете. – nodrog

2

Я подозреваю, что это может быть из-за нарушения Jquery innerHTML свойства. Ваш ответ «ajax» по существу разрушает существующую структуру DOM, когда вы пытаетесь заменить таблицу.

Чтобы проверить, если это причина, вы должны посмотреть на консоль javascript. Попробуйте использовать console.log(), чтобы проверить, действительно ли элементы, которые вы выбираете.

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); 
    }); 
}); 
+0

Привет, это не работает, но это именно то, что я был после? Это не приносит никаких ошибок в консоли ошибок, и, похоже, ничего не делает! Я попытался положить его в document.ready и все это безрезультатно. В этой строке есть что-то не так: $ ('# resultstable'). On ('click', 'tbody tr', function() { . Просто для подтверждения, есть идея, что есть таблица, которая при нажатии строки будет красным, а затем, когда будет нажата другая линия, эта линия станет красной, а другая линия снова станет нормальной. Это то, что мне нужно. Спасибо, много! – user1096685

+0

Это то, что он будет делать. Эта линия, о которой вы говорили, предполагает, что структура из вашего стола есть т. Я сделал это предположение, когда увидел, что ваш код использовал тэд. Если нет тёмного, попробуйте добавить это. – rkw

0

вы можете решить эту проблему путем копирования ваших JS для перезагрузки вида outputresults2.php.Таким образом $(function(){}) снова запущен.

+0

Извините, я не понимаю, как и что делать для этого? объясните? – user1096685

+0

, когда вы загружаете некоторые элементы html с помощью ajax, ваша функция не будет запускать события для вновь добавленных элементов. Для решения этой ситуации вам нужно снова инициализировать свои события, и для этого мой выбор прошел мимо вашего события, чтобы загрузить новую в документе document.ready – Yorgo

Смежные вопросы