Я пишу код, чтобы запустить всплывающее окно js, которое потребует от пользователя подтверждения, прежде чем они совершают определенное деструктивное действие, перезаписав данные с помощью рельсов form_for
. У меня уже есть js popup и какая-то другая логика, моя последняя оставшаяся задача в том, что я хочу, чтобы этот js popup активировал , если файл был прикреплен в определенном file_field
на форме. Если на этом файле нет файла file_field
, мне это не нужно всплывать.Используйте javascript, чтобы захватить имя файла, выбранного в Rails form_for file_field, перед отправкой
Как я могу захватить статус того, есть ли в данный момент прикрепленный файл/имя файла? Вот мой текущий соответствующий код. Синтаксис Худой:
Форма выпуска: Соответствующий file_field раздел
tr
= f.fields_for :location_csv, LocationCSV.new do |p|
td = p.label :attachment, "#{@campaign.form_attributes[:location_csv][:label]}"
td.csv-example
- if @campaign.has_entrants_with_locations?
p.alert Warning: Updating Will Delete Location Information For Past Completed Entries
= p.file_field :attachment, accept: "text/csv", class: 'form-control'
Форма выпуска: Отправить Раздел кнопки, включая какой-либо другой логики
tr
td colspan='2'= f.submit class: "button success", id: "btn-form-submit", onclick: "destructionWarning(#{@campaign.has_entrants_with_locations?})"
Javascript Отрывок
function destructionWarning(status) {
if (status === true) {
if (confirm("WARNING: This update will delete the store location data for #{@campaign.entrants_with_locations_count} campaign entrant#{'s' if @campaign.entrants_with_locations_count > 1}! Cancel to abort.") == true) {}
else {
event.preventDefault();
}
}
}
EDIT: Вот мой обновляемые Фрагмент кода JavaScript:
var csvElement = document.getElementById("quiz_campaign_location_csv_attributes_attachment");
var csvAttachment = csvElement.value;
function destructionWarning(status) {
if (status === true && csvAttachment != "") {
if (confirm("WARNING: This update will delete the store location data for #{@campaign.entrants_with_locations_count} campaign entrant#{'s' if @campaign.entrants_with_locations_count > 1}! Cancel to abort.") == true) {}
else {
event.preventDefault();
}
}
}
Спасибо за Помогите! Идентификатор элемента - 'quiz_campaign_location_csv_attributes_attachment'. У меня все работает. Почти все, кажется, работает так, как мне нужно, если я правильно интерпретирую поведение, я думаю, что оставшаяся часть состоит в том, что мое значение «var filename» создается, когда страница сначала загружается, а не когда я нажимаю кнопку отправки формы. Мне нужно «имя файла var», когда человек отправляет форму, после того как они выбрали файл для загрузки. – Charles847
@ Charles847, думаю, я понимаю. Похоже, у вас есть два условия, которые необходимо выполнить, чтобы вы могли предупредить пользователя. 1.) На сервере уже загружены данные и 2.) пользователь пытается загрузить новые данные. Верный? Код, который я поставил в своем ответе, призван помочь вам проверить условие 2. Я обновил ответ, чтобы сделать его более понятным. –
@Bill_Doughty См. Мой обновленный фрагмент. Проблема, с которой я сталкиваюсь, заключается в том, что мой 'var csvAttachment' мы всегда возвращаемся как' '' '. '' "' Делает смысл, прежде чем я выберу файл для загрузки, но не после. – Charles847