Функции jQuery в GridView перестают работать после PostBack на странице (при наведении курсора мыши) - PullRequest
2 голосов
/ 10 ноября 2011

Все мои функции jQuery работают отлично при первой загрузке страницы, после того как я выполняю обратную передачу, которая вызывает заполнение фильтра строк для GridView и снова связывает Grid на основе фильтра строк. Мой GridView построен полностью из кода и отображается в виде таблицы. После этого PostBack функция mouseover, mouseout и клик по строкам таблицы в моей таблице больше не работают.

Я размещаю свои функции jQuery внутри функции document.ready. Я также заметил, что перед постбэком это добавляется в html строк:

<tr jQuery1320916="3">

Таким образом, в основном последовательность в конце каждой строки (3) и несколько случайных чисел с jQuery перед ним. После обратной передачи он удаляется из строк.

Вот часть моего кода jQuery (функция первого щелчка все еще работает после PostBack, но функции в GridView больше не работают):

 $(document).ready(function(){
        //start click function select all
        $('input[id$="SelectDeselectAllBox"]').click(function(){            
        //start if
        if($(this).is(':checked')){
           $(this).parent().parent().parent().parent().children().find('input:checkbox').attr('checked',true).closest('tr').addClass('SelectedRow')
        }else{
            $(this).parent().parent().parent().parent().children().find('input:checkbox').attr('checked',false).closest('tr').removeClass('SelectedRow')};
        //end if

        //end click function select all
             });


        //highligth hovered row
             $('table[id^=taskgrid] tbody tr').mouseover(function () {
                 $(this).addClass('HightlightRow');
             }).mouseout(function () {
                 $(this).removeClass('HightlightRow');
             });            

        //end document ready
        });

Я что-то упустил, заранее спасибо.

Я обнаружил, что jQuery больше не находит мой gridview этим методом:

$ ('table [id ^ = taskgrid] tbody tr'), если я введу полный идентификатор сетки задач, то она сработает. Но это не вариант для меня.

    //is everthing checked? start if
 if($(this).parent().find('input:checkbox:not(:checked)').length == 0){
    $(this).parent().parent().parent().parent().find('input:checkbox:first').attr('checked',true)
    }else{
    $(this).parent().parent().parent().parent().find('input:checkbox:first').attr('checked',false)};
//end if

1 Ответ

1 голос
/ 10 ноября 2011

Проблема в том, что вы используете селектор «начинается с»:

$('table[id^=taskgrid] tbody tr')

Лучше использовать селектор «заканчивается с» для сгенерированного идентификатора ASP.NET WebForms.Предполагая, что ваш идентификатор GridView - «TaskGrid», попробуйте использовать следующий селектор:

$('table[id$="taskgrid"] tbody tr')

Если вы нацеливаетесь на несколько элементов таблицы, а «TaskGrid» является только частью идентификатора, вы можете использовать селектор «Содержит»:

$('table[id*="taskgrid"] tbody tr')
...