jQuery 1.3 выбирает только первый элемент - PullRequest
3 голосов
/ 19 января 2009

Я не уверен, что это ошибка или просто какая-то сумасшедшая новость в jQuery 1.3, о которой я не знаю, или я просто сошел с ума.

У меня есть таблица с 11 флажками, и я не могу выбрать их все, используя jQuery 1.3:

// jQuery 1.2.6
$(".myTable").find(":checkbox");  // finds 11 elements

// jQuery 1.3
$(".myTable").find(":checkbox");  // finds 1 element: the first checkbox
$(":checkbox", $(".myTable"));    // finds 1 element
$('.myTable :checkbox'));         // finds all 11 elements

Результаты будут такими же, если я использую .find('*'): он выбирает только первый элемент в 1.3, поэтому ничего особенного в :checkbox.

нет.

На своей собственной странице я могу каждый раз воссоздавать это, но когда я вставляю (казалось бы) соответствующие части в JSBin, это работает!

На исходной странице также есть Mootools, но я очень внимательно относился к области видимости и не было никаких проблем с jQ 1.2.6, поэтому я не думаю, что это могло бы быть. Есть еще идеи?

И прежде чем кто-либо скажет это, использование функции .find() намного удобнее, чем комбинированный селектор (".myTable :checkbox") в этом случае, и изменение всего кода в этом стиле не вариант!

1 Ответ

5 голосов
/ 19 января 2009

Если это действительно ошибка, вам следует посетить сайт отслеживания ошибок jQuery и сообщить об этом (см. http://dev.jquery.com/).

Это особенно верно, поскольку 1.3 только что был выпущен. Однако, учитывая количество пройденного тестирования, я настоятельно рекомендую вам попробовать очень простую веб-страницу, чтобы увидеть, действительно ли это проблема с jQuery или, как вы предлагаете, возможное взаимодействие с другими вашими инструментами (например, Mootools) , Идеальная страница с двумя парами флажков, 1.3 jQuery и код, который вы задали в своем вопросе, были бы идеальными.

Только если это все еще проблема, я бы поднял ошибку в jQuery, иначе я бы начал с различных дискуссионных групп, чтобы посмотреть, могут ли они помочь.

Например, этот фрагмент кода действительно действительно работает, поэтому вряд ли это будет ошибкой в ​​jQuery.

<html>
  <head>
    <script type="text/javascript" src="jquery-1.3.js"></script>
    <script type="text/javascript">
      $(document).ready(function(){
        $(document).find(":checkbox").attr('checked',false);
        $("a").click(function(event){
          $(".myTable").find(":checkbox").attr('checked',true);
          event.preventDefault();
        });
      });
    </script>
  </head>
  <body>
    <a href="http://nowhere.com/">Click me!</a><hr>
    <table class="myTable"><tr>
      <td><input type="checkbox">One</input></td>
      <td><input type="checkbox">Two</input></td>
      <td><input type="checkbox">Three</input></td>
    </tr></table>
  </body>
</html>
...