2016-08-18 3 views
0

Я пишу код, чтобы запустить всплывающее окно 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(); 
    } 
    } 
} 

ответ

1

Что такое HTML идентификатор элемента ввода поля файл? Вы должны иметь возможность проверить значение ввода для пустой строки.

Предположим, что идентификатор идентификатора элемента ввода файла - attachment.

Использование простой Javascript:

var file_input = document.getElementById("attachment"); 
var filename = file_input.value; 
if(filename != "") { 
    // There is a file specified 
} else { 
    // There is no file specified 
} 

Использование JQuery:

if($('#attachment').val() != "") { 
    // There is a file specified 
} else { 
    // There is no file specified 
} 

Если вы хотите проверить на наличие имени файла в вашей destructionWarning функции:

function destructionWarning(server_status) { 
    if (server_status == true) { 
    var file_input = document.getElementById("attachment"); 
    var filename = file_input.value; 
    if(filename != "") { // user has attached a file 
     var user_confirmed = 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."); 
     if (user_confirmed != true) { 
     // cancel the form submission 
     event.preventDefault(); 
     } 
    } 
    } 
} 
+0

Спасибо за Помогите! Идентификатор элемента - 'quiz_campaign_location_csv_attributes_attachment'. У меня все работает. Почти все, кажется, работает так, как мне нужно, если я правильно интерпретирую поведение, я думаю, что оставшаяся часть состоит в том, что мое значение «var filename» создается, когда страница сначала загружается, а не когда я нажимаю кнопку отправки формы. Мне нужно «имя файла var», когда человек отправляет форму, после того как они выбрали файл для загрузки. – Charles847

+0

@ Charles847, думаю, я понимаю. Похоже, у вас есть два условия, которые необходимо выполнить, чтобы вы могли предупредить пользователя. 1.) На сервере уже загружены данные и 2.) пользователь пытается загрузить новые данные. Верный? Код, который я поставил в своем ответе, призван помочь вам проверить условие 2. Я обновил ответ, чтобы сделать его более понятным. –

+0

@Bill_Doughty См. Мой обновленный фрагмент. Проблема, с которой я сталкиваюсь, заключается в том, что мой 'var csvAttachment' мы всегда возвращаемся как' '' '. '' "' Делает смысл, прежде чем я выберу файл для загрузки, но не после. – Charles847