Создание связи всей строки таблицы с проблемой JQuery - PullRequest
1 голос
/ 11 февраля 2012

Вот HTML-разметка из 2 строк из моей огромной таблицы (которая была сгенерирована PHP и применена к ним после этого)

<tr url="?page=item&id=850">

    <td class="item_id"><input type="checkbox" name="checkbox[]" method="post" value="850" class="checkbox"/>    850</td>

    <td> 9007</td>

    <td style="text-align:center">BK</td>

    <td style="text-align:center">41</td>

    <td style="text-align:center" id="qt">1</td>

    <td style="text-align:center">7</td>

    <td style="text-align:center">11</td>

    <td>09.02.2012</td>

</tr>

А вот и второй ряд

<tr url="?page=item&id=587">

   <td class="item_id"><input type="checkbox" name="checkbox[]" method="post" value="587" class="checkbox"/>    587</td>

   <td> 779-59</td>

   <td style="text-align:center">BR</td>

   <td style="text-align:center">37</td>

   <td style="text-align:center" id="qt">2</td>

   <td style="text-align:center">15</td>

   <td style="text-align:center">14</td>

   <td>08.02.2012</td>

</tr>

Функция ниже работает для 90% строк. Я действительно понятия не имею, почему этот сценарий работает для второй строки из примеров, но ничего не делает для первой строки. Эти 2 ряда почти одинаковы.

$("td").not('.item_id').click(function(){
    window.open ($(this).closest("tr").attr("url"));
});

Как вы думаете, что может вызвать эту проблему?

Ответы [ 3 ]

1 голос
/ 11 февраля 2012

Вместо этого используйте это, чтобы прикрепить обработчик click к tr и игнорировать, если щелкнуть по checkbox или содержащей его ячейке.Попробуйте это.

$("tr").click(function(){
    window.open($(this).attr("url"));
});

$("td.item_id").click(function(e){
    e.stopPropagation();
});

В качестве предупреждения вы также можете использовать event.target, чтобы проверить, если это checkbox, не делайте этого.

$("tr").click(function(e){
    if(!$(e.target).is(':checkbox') && !$(e.target).is('.item_id')){
        window.open($(this).attr("url"));
    }
});
0 голосов
/ 11 февраля 2012

работает ЗДЕСЬ что-то еще не так.Вы упаковываете код в обработчик ready?

0 голосов
/ 11 февраля 2012

Я понимаю этот кусок:

$("td").not('.item_id').click(function(){
  ...
});

Но можно ли обновить этот кусок, чтобы он стал лучше?

window.open ($(this).closest("tr").attr("url"));

Также, свойство url проверяется? Возможно, вы захотите использовать атрибуты данных для более предсказуемого опыта. Может быть, это будет работать лучше:

<tr data-url="">
  ...
</tr>

с открытым окном даже так:

window.open( $(this).parent().attr("data-url") );

См. Этот пример: http://jsfiddle.net/Zuhrx/

...