2016-04-14 9 views
7

Ich verwende SweetAlert2 und ich erhalte die folgenden FehlerUncaught Typeerror: kann nicht lesen Eigentum ‚und dann‘ undefinierter mit Süße Benachrichtigung

Uncaught TypeError: Cannot read property 'then' of undefined

Wenn ich den exakt gleichen Code verwenden, wie in SweetAlert Seite vorgeschlagen.

swal({ 
title: 'Are you sure?', 
    text: "You won't be able to revert this!", 
    type: 'warning', 
    showCancelButton: true, 
    confirmButtonColor: '#3085d6', 
    cancelButtonColor: '#d33', 
    confirmButtonText: 'Yes, delete it!', 
    cancelButtonText: 'No, cancel!', 
    confirmButtonClass: 'btn btn-success', 
    cancelButtonClass: 'btn btn-danger', 
    buttonsStyling: false, 
    closeOnConfirm: false, 
    closeOnCancel: false 
}).then(function(isConfirm) { 
    if (isConfirm === true) { 
    swal(
     'Deleted!', 
     'Your file has been deleted.', 
     'success' 
    ); 
    } else if (isConfirm === false) { 
    swal(
     'Cancelled', 
     'Your imaginary file is safe :)', 
     'error' 
    ); 
    } else { 
    // Esc, close button or outside click 
    // isConfirm is undefined 
    } 
}) 

Ich habe den Code am Ende der Seite. Ich benutze es in einer Ruby on Rails App. Ich habe versucht, einen Wert wie in anderen Posts vorgeschlagen, aber es löst nicht das Problem

+0

Haben Sie Referenz auf die zugehörige js-Datei hinzugefügt? –

+0

Weil es bedeutet, dass es im Kontext nicht swal ist. Es bedeutet entweder, dass die Javascript-Datei nicht in der Datei referenziert ist oder die Swal nicht korrekt erstellt wurde. –

+0

@HiradNikoo Ich habe swal referenziert. Es erscheint tatsächlich die modale Ansicht. Aber nach der Bestätigung/Abbrechen geht es nicht durch. – marimaf

Antwort

6

sieht aus wie die sweetalert2 Implementierung verwendet die native Versprechen api, und es gibt keine eingeschlossenen Polyfill. In einigen Browsern funktioniert die Bedeutung möglicherweise nicht. Selbst die GitHub-Seite zeigt den gleichen Fehler. Funktioniert gut, wenn ich es in Chrom versuche, aber nicht in IE11 funktioniert. Ich würde sehen, eine verheißungs-API-Polyfill, je nachdem, welchen Browser Sie unterstützen möchten. Das hat nichts mit Schienen zu tun.

Polyfill ist here oder Google ES6 versprechen Polyfill. Fügen Sie es vor der Datei sweetalert2 js ein und Sie sollten in Ordnung sein.

Wenn nicht verstehe, worüber ich spreche mit der Versprechen API, guter Artikel here darüber, oder google JS Versprechen.

Nun, wenn all dies zu schwer und/oder verwirrend ist, warum nicht einfach das Original sweetalert (link here) verwenden, da es nicht das Versprechen api verwendet. Nicht genau, warum sie Gabeln, wie ich keine drastisch neue Funktionalität sehen kann, abgesehen von Versprechungen natürlich, und ein paar neue modale Symbole (Info und Frage)

+0

Ja, ich denke, Sie haben Recht. Ich habe den Code gesehen. Es verwendet natives Versprechen in Zeile 321. –

+0

Ich versuche meinen Code in Chrom – marimaf

+1

Mit dem ursprünglichen Sweetalert-Code löste das Problem. Vielen Dank – marimaf