jQuery $ .live () не работает со строками таблицы на iPhone - PullRequest
3 голосов
/ 18 июня 2010

Я делаю строки таблицы активируемыми с помощью функции $.live() в jQuery.
Прекрасно работает на Chrome, Firefox и даже на настольных Windows Safari, но не на iPhone.
$.bind() работает везде, но по понятным причинам я бы хотел использовать другую функцию.

Кто-нибудь знает, почему это не работает и как я могу это исправить?
Пример кода ниже.

<!DOCTYPE html>
<html lang="en">
<head>
 <title>test</title>
 <meta charset="utf-8" />
 <meta name="viewport" content="user-scalable=no,width=device-width" />
 <meta name="apple-mobile-web-app-capable" content="yes" />
 <style type="text/css">table { width: 100%; border-collapse: collapse; } table tr {     background: #eee; } table td { padding: 10px; border-top: 1px solid #ccc; }</style>
 <script type="text/javascript" src="http://jquery.com/src/jquery-latest.pack.js">        </script>
 <script type="text/javascript">
$(document).ready(function() {
  /* $.bind() works */
  /*
  $('table').find('tr').bind('click', function() {
    alert($(this).text());
  });
  */
  /* $.live() doesn't */
  $('table').find('tr').live('click', function() {
    alert($(this).text());
  });
});
 </script>
</head>
<body>
 <table>
  <tbody>
   <tr><td>words are flying out \ </td><td>like endless rain into a paper cup</td></tr>
   <tr><td>they slither while they pass \ </td><td>they slip away across the             universe</td></tr>
  </tbody>
 </table>
</body>
</html>

1 Ответ

1 голос
/ 19 июня 2010

Одна проблема с этим кодом заключается в том, что вы используете .live неправильно - он должен вызываться непосредственно на селекторе:

$('table tr').live( /* ... */)

Из спецификаций :

Методы обхода DOM не полностью поддерживаются для поиска элементов для отправки в .live ().Скорее, метод .live () всегда должен вызываться непосредственно после селектора

Далее, в jQuery 1.4.2, вероятно, лучше использовать delegate:

$('table').delegate('tr', 'click', function(){/* ... */} );
...