JQuery найти неправильные элементы в Chrome - PullRequest
5 голосов
/ 28 января 2011

Я использую jQuery для перебора таблицы HTML и динамического заполнения номеров строк каждой строки (путем заполнения номера строки в текстовом поле):

function updateRowNums() {
  $('#myTable').find('tr').each(function(index) {
    $(this).find('input[id$="_rowOrder"]').val(index);   
  });
}

Эта функция вызываетсяunder:

$(document).ready(function() {
  // .. code truncated ... //
  updateRowNums();
});

Это отлично работает под Firefox.Однако в Chrome (пробовал и 5.x, и 9.x (бета-версия)), а иногда и Safari, это приводит к заполнению множества других полей, которые даже не соответствуют критериям:

'input[id$="_rowOrder"]'

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

Я почти уверен, что это какая-то ошибка Chrome или jQuery, но я просто проверяю, так как это выглядит довольнобазовый функционал.Кстати, если я введу предупреждение в коде, то оно будет нормально работать в Chrome, так что это может иметь какое-то отношение ко времени загрузки документа в Chrome:

function updateRowNums() {
  $('#myTable').find('tr').each(function(index) {
    alert("XXXXXXXXXXXXXXXXXXX");
    $(this).find('input[id$="_rowOrder"]').val(index);   
  });
}

Перейдите сюда, чтобы увидеть пример:

http://jsfiddle.net/eGutT/6/

В этом примере необходимо воспроизвести следующие шаги:

  1. Перейти к URL-адресу с помощью Chrome (или Safari - иногда также не удается)).
  2. Вы заметите, что на данный момент все работает так, как ожидалось (т. Е. Числа, заполненные 1-м столбцом)
  3. Нажмите на ссылку «NAVIGATE AWAY».
  4. Нажмите назад
  5. Вы увидите числа, заполненные в верхней строке И внизу первого столбца

Вы заметите, что я добавил консольное ведение журнала, чтобы вывести идентификаторы элементов, для которых изменено их значение.Вывод этого журнала:

one_rowOrder
two_rowOrder
three_rowOrder

, который указывает, что были затронуты только 3 элемента.Однако из результата видно, что в 5 элементах есть числа.

Спасибо, Гален

Ответы [ 2 ]

6 голосов
/ 28 января 2011

Проблема в том, что ваши входные данные не имеют атрибута имени. Chrome / Safari, кажется, пытается сохранить то, что вы ввели в поля формы, когда вы идете вперед и назад в историю. Поскольку ваши входные данные не имеют атрибутов имени, он угадывает, в какое поле ввода вводить значения, и неверно угадывает.

Добавить атрибуты имени к вашим полям и все это исправлено: http://jsfiddle.net/petersendidit/eGutT/14/

Chrome / Safari, вероятно, должен проверять, отсутствует ли атрибут id атрибута name.

0 голосов
/ 28 января 2011

Если вы используете цифры в качестве идентификаторов, jQuery не распознает их и / или не будет действовать правильно, потому что это недопустимый HTML.Удалите цифры или поставьте перед ними букву.

...