jQuery: вызвать подэлемент ‹a /› ячейки таблицы

Можно ли добавить функцию jQuery, чтобы щелчок в ячейке таблицы вызывал скрытый элемент ‹a href="javascript: ..." /› (который является потомком TD)?

я пробовал с

$('#table td').click(function() { $(this).find('a').click(); });

Другие варианты, но безрезультатно.

--larsw


person larsw    schedule 29.12.2008    source источник
comment
Просто вопрос: почему бы не сделать содержимое ячейки таблицы элементом ‹a› (display: block)?   -  person cletus    schedule 29.12.2008


Ответы (3)


<html>
<head></head>
<body>
<table border=1>
    <tr>
        <td>a1<a href=# onclick='alert("a1")' /></td>
        <td>a2<a href=# onclick='alert("a2")' /></td>
    </tr>
    <tr>
        <td>b1<a href=# onclick='alert("b1")' /></td>
        <td>b2<a href=# onclick='alert("b2")' /></td>
    </tr>
</table>
<script src="scripts/jquery-1.2.6.min.js" ></script>
<script>
    $(function(){
        $('table td').click(function(){ $(this).find('a').click()});
    })
</script>
</body>
</html>

У меня это работает нормально с этим клипом выше. Однако обратите внимание, что перед вашим селектором jQuery стоит #, что приведет к сбою, если ваша таблица не имеет id 'table'.

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

person Corey Downie    schedule 29.12.2008
comment
Хорошее наблюдение, Кори. Я согласен, кажется, что # вызывает проблему. Это должно быть $('table td). - person Cyril Gupta; 02.01.2009

Почему бы вам не переместить код JavaScript из атрибута href в событие клика? jQuery был создан для написания ненавязчивого JavaScript.

Редактировать:

Нет, но на самом деле рассмотрите возможность удаления этих скрытых ссылок в пользу ненавязчивого JavaScript. Вот соответствующие части переписанного примера Кори:

JS:

  $(document).ready(function() {
    $('table td').click(function(event) {
      alert($(this).html())
    })
  })

HTML:

<table border="1">
  <tr>
    <td>a1</td>
    <td>a2</td>
  </tr>
  <tr>
    <td>b1</td>
    <td>b2</td>
  </tr>
</table>
person Zach Langley    schedule 29.12.2008

Это было бы обходным путем, если вы хотите избежать добавления onclick:

$('#table td').click(function() { 
    $(this).find('a').each(function(){ window.location = this.href; });
});
person Cristian Libardo    schedule 29.12.2008
comment
Это помогло мне. Мне нравится избегать события onclick для каждого элемента ‹a›, и мне это нужно для href=mailto:[email protected]›‹a›, подобных этим. Это просто сработало. Спасибо - person Bas Jansen; 06.01.2010