#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. Спасибо. Теперь жалуется на ошибку типа: ‘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')