Ich schreibe Code, um ein js Popup zu starten, das einen Benutzer bestätigen muss, bevor sie eine bestimmte destruktive Aktion durch Überschreiben von Daten mit einem Rails form_for
vornehmen. Ich habe bereits das Popup js und einige andere Logik funktioniert, meine letzte verbleibende Aufgabe ist, dass ich nur dieses js Popup aktivieren möchte , wenn eine Datei in einem bestimmten file_field
auf dem Formular angefügt wurde. Wenn es keine Datei an diesem file_field
angeschlossen ist, brauche ich das Popup nicht.Verwenden Sie Javascript, um den Dateinamen der in Rails form_for file_field ausgewählten Datei vor dem Senden zu wählen
Wie kann ich den Status abgreifen, ob momentan eine Datei angehängt ist/der Dateiname? Hier ist mein aktueller relevanter Code. Die Syntax ist Slim:
Formularansicht: Relevante file_field Abschnitt
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'
Formularansicht: Senden-Schaltfläche Abschnitt mit einer anderen Logik
tr
td colspan='2'= f.submit class: "button success", id: "btn-form-submit", onclick: "destructionWarning(#{@campaign.has_entrants_with_locations?})"
Javascript Snippet
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: Hier ist meine aktualisierte JavaScript-Snippet:
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();
}
}
}
Vielen Dank für die Hilfe! Die Element-ID lautet 'quiz_campaign_location_csv_attributes_attachment'. Ich habe all das funktioniert. Fast alles scheint so zu funktionieren, wie ich es brauche. Wenn ich das Verhalten richtig interpretiere, glaube ich, dass mein 'var filename' Wert beim ersten Laden der Seite erzeugt wird und nicht beim Klicken auf den Formular Submit Button. Ich brauche den 'var filename', wenn die Person das Formular abschickt, nachdem sie eine Datei zum Hochladen ausgewählt haben. – Charles847
@ Charles847, ich glaube, ich verstehe. Es scheint, als hätten Sie zwei Bedingungen, die erfüllt sein müssen, damit Sie den Benutzer warnen können. 1.) Es sind bereits Daten auf dem Server hochgeladen und 2.) der Benutzer versucht, neue Daten hochzuladen. Richtig? Der Code, den ich in meine Antwort geschrieben habe, soll Ihnen helfen, die Bedingung 2 zu testen. Ich habe die Antwort aktualisiert, um sie klarer zu machen. –
@Bill_Doughty Bitte beachten Sie mein aktualisiertes Snippet. Das Problem, das ich habe, ist, dass mein "var csvAttachment" uns immer wieder als "" "zurückkommt. '' '' Sinn ergibt, bevor ich eine Datei zum Hochladen ausgewählt habe, aber nicht danach. – Charles847