Rails 4 JS TypeError: $ (...). Previous не является функцией

Я пытаюсь сделать ссылку под названием remove под текстовым полем, чтобы уничтожить и скрыть ее с помощью java-скрипта, но она не работает, и я получаю эту ошибку в консоли TypeError: $(...).previous is not a function

вот код rails в

app/views/surveys/_question_fields.html.erb

<p>
 <%= f.label :content, "answer" %>
 <%= f.text_field :content %>
 <%= f.hidden_field :_destroy %>
 <%= link_to_function "remove", "remove_fields(this)" %>
</p>

app/assests/javascripts/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .
//= require cocoon

function remove_fields(link) {
 $(link).previous("input[type=hidden]").value = "1";
 $(link).up(".fields").hide();
}
1 ответ

Ваш код выглядит как сочетание jQuery и PrototypeJS. (Неудивительно, что PrototypeJS долгое время был огромным в сообществе Ruby...)

Здесь версия jQuery:

// 1
$(link).prevAll("input[type=hidden]").first().val("1");

// 2
$(link).closest(".fields").hide();
// Or: $(link).parents(".fields").first().hide();
// Or: $(link).parent().closest(".fields").first().hide();
  1. PrototypeJS previous поиск через элемент предыдущих братьев и сестер для соответствия. jQuery не имеет функции, которая делает именно это (его функция prev только смотрит на сразу-предыдущего родного брата, она не продолжает сканирование), но вы можете комбинировать prevAll (который строит список всех предыдущих братьев и сестер, чтобы первые из которых один ближайших исходного элемента), и first, вы получите то, что фактически то же самое, как PrototypeJS previous.

    А затем, чтобы установить значение, вы используете функцию val, а не присваиваете свойству value. PrototypeJS украшает фактические элементы DOM; С другой стороны, jQuery основан на теории множеств и обертываниях. Таким образом, экземпляры jQuery не имеют свойств DOM, но у них есть функции для управления элементами DOM, которые они содержат.

  2. Во второй строке jQuery не имеет up но имеет самое closest, что делает что-то подобное (хотя оно начинается с текущего элемента при проверке селектора). Если текущий элемент может совпадать, вы захотите, чтобы parents сочетании с first повторили; поочередно, используйте parent чтобы подняться на один уровень, а затем используйте closest.

licensed under cc by-sa 3.0 with attribution.