У меня есть форма Rails 5.1 для создания пользовательского объекта, который выглядит так:
<form class="upload-form" action="/users" accept-charset="UTF-8" data-remote="true" method="post">
<input name="utf8" type="hidden" value="✓">
...all the fields...
<div class="actions">
<input type="submit" name="commit" value="Submit" data-disable-with="Submit">
</div>
</form>
Он подает штраф, и срабатывает действие контроллера. Вот:
def create
@user = User.new(user_params)
if @user.save
respond_to do |format|
format.js
end
end
end
Но возвращенный файл create.js.erb не выполняется в браузере:
$('#upload-form').on('ajax:success', function(event, data, status, xhr) {
console.log(data);
var field = $('#upload-form').find('input[name=fileinput]');
var file = field[0].files[0];
console.log(file);
});
Я смущен, почему этот js не выполняется (я вижу, что он вернулся в ответ).
Вы определили upload-form
как class
, но вы называете ее ID
в JS
+ Изменить
$('#upload-form').on('ajax:success', function(event, data, status, xhr) {
console.log(data);
var field = $('#upload-form').find('input[name=fileinput]');
var file = field[0].files[0];
console.log(file);
});
к этому
$('.upload-form').on('ajax:success', function(event, data, status, xhr) {
console.log(data);
var field = $('.upload-form').find('input[name=fileinput]');
var file = field[0].files[0];
console.log(file);
});
Для тех, кто еще не справляется с этой проблемой, но вышеизложенное не помогает:
Я использую CoffeeScript и столкнулся с этой проблемой. У меня был файл index.coffee, который бы превратил частичный шаблон в функцию для замены div на стороне клиента. Работал БОЛЬШОЙ, когда я вызывал маршрут обычным способом, но не работал, когда я показывал его с помощью кнопки "button_to".
Rails правильно отображал JS, отправляя его в браузер, и я мог тестировать JS, и он работал нормально. Но он не будет вызываться при нажатии кнопки button_to.
Все, что я сделал, было переименовано в файл index.js.coffee, и он начал работать. Yay, Rails странность!