Бесконечный новый цикл окна при запуске события клика - PullRequest
1 голос
/ 21 июля 2011

У меня есть страница обзора, которая показывает данные в таблице.Всплывающее окно открывается, когда пользователь нажимает на строку.Но всплывающее окно загружается снова и снова до тех пор, пока оно не зависнет.

Код обзора:

<tbody>
    <tr>
       <td>
          <a href="/pop-up/details/1/" onClick="MyWindow=window.open('/details_screen/1/','window1','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=800,height=600'); return false;">details screen for 1</a>
       </td>
    </tr>
    <tr>
       <td>
          <a href="/pop-up/details/2/" onClick="MyWindow=window.open('/details_screen/2/','window2','toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=800,height=600'); return false;">details screen for 2</a>
       </td>
    </tr>
</tbody>

javascript, который делает строки активируемыми:

function make_rows_clickable(table){
    $(table).find('tbody tr').each(function() {
                $(this).hover(function(){
                    //rollover
                    $(this).addClass('hover');
                },
                function() {
                    //rolloff
                    $(this).removeClass('hover');
                }).click(function() {
                    $(this).find('a').click();
                });
    });
}

РЕШЕНИЕ

Как указано в ответе на комментарий, щелчок привязки запускает событие tr click и создает цикл infinte.Я решил это, удалив событие onClick и добавив атрибуты.Откроется событие tr click, затем всплывающее окно.

<td>
    <a href="/pop-up/details/2/"element_id="2" pop_w="800" pop_h="600">details screen for 2</a>
</td>

Js:

$(table).find('tbody tr').hover(function(){
                    //rollover
                    $(this).addClass('hover');
                },
                function() {
                    //rolloff
                    $(this).removeClass('hover');
                }).click(function(e) {
                    e.stopPropagation();
                    var anchor = $(this).find('a');

                    var el_id = $(anchor).attr('element_id');
                    var pop_w = $(anchor).attr('pop_w');
                    var pop_h = $(anchor).attr('pop_h');

                    MyWindow=window.open('/details/screen/' + el_id + '/', el_id, 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=' + pop_w + ',height=' + pop_h);
});

1 Ответ

2 голосов
/ 21 июля 2011

Таким образом, в каждой строке таблицы должно быть несколько тд. Поэтому, когда вы запускаете

$(this).find('a').click();

Он находит каждый тег a в строке (равный количеству тд) в строке и выполняет их функции щелчка. Благодаря этому открывается несколько всплывающих окон

Заменить код на:

$(this).find('a:first').click();

Или используйте:

$(table).find('tbody tr').click(function() {
   MyWindow = window.open('/details_screen/2/', 'window2', 'toolbar=no, location=no, directories=no, status=yes, menubar=no, scrollbars=yes, resizable=yes, width=800, height=600');
   return false;
})
...