jquery .each и rails

#jquery

#jquery

Вопрос:

Я пытаюсь перевести этот скрипт на jQuery. Смотрите rails приведения #88

 var colors = new Array();
<%= for color in @colors %>
  colors.push(new Array(<%= colot.product_id %>, '<%= color.name %>', <%= color.id %>));
<% end %>

function productSelected() {
  product_id = $('order_items_attributes_0_product_id').val();
  options = $('item_color_id').options;
  colors.each(function(color) {
    if (color[0] == product_id) {
      options[options.length] = new Option(color[1], color[2]);
    }
  });
  if (options.length == 1) {
    $('color_field').hide();
  } else {
    $('color_field').show();
  }
}

$(document).ready(function() {
  productSelected();
  $('order_items_attributes_0_product_id').change(productSelected);
});
  

Firebug говорит

 TypeError: 'undefined' is not a function (evaluating 'colors.each(function(color) {
    if (color[0] == product_id) {
      options[options.length] = new Option(color[1], color[2]);
    }
  })')
  

Также код ruby больше не разрешен в файлах 3.1.1 js (в разделе активы)? Он также жалуется на SyntaxError: Unexpected token '<'

Ответ №1:

Ваша реализация .each неверна. Используйте:

 $.each(colors, function(){
  

colors это массив, в котором нет метода jQuery .each . $.each Функция принимает параметры:

  1. Элемент для перебора
  2. Функция для запуска в каждом цикле

Смотрите также

Комментарии:

1. Спасибо. Теперь жалуется на ошибку типа: ‘undefined’ не является объектом (оценивающим ‘параметры. длина = 1’)

2. Вы должны использовать $('item_color_id').get(0).options; , потому что вы пытаетесь получить доступ к свойству DOM. $(..).get(0) возвращает первый элемент DOM, который соответствует селектору jQuery.

3. options = $('item_color_id').options; $('item_color_id').get(0).options; результаты для TypeError: 'undefined' is not an object (evaluating '$('item_color_id').get(0).options')

4. Если item_color_id это идентификатор, добавьте перед ним диез: #item_color_id . Вы также должны добавить диез # к другим вашим селекторам.

5. Спасибо еще раз. Добиваюсь прогресса, но теперь у TypError: 'undefined' is not an object (evaluating 'options.length')