2013-01-18 7 views
8

Próbuję użyć alertify.js jako okna dialogowego potwierdzenia dla wszystkich skryptów potwierdzających. Ale po prostu nie działa tak, jak robi to zwykły JS confirm. W kodzie poniżej nigdy nie dostać return trueJavaScript Powiadom z powrotem z potwierdź

function aConf (mes) { 
    alertify.confirm(mes, function (e) { 
     return e; 
    }); 
} 

<a href="#" onclick="if(aConf(\'Are you sure you wish to remove this?\')) { function(); } return false;">Delete</a> 

oczywiście jeśli mogę zastąpić aConf z JS”confirm to działa. Dlaczego więc alertify nie odsyła mnie z powrotem?

Odpowiedz

9

Ponieważ confirm jest funkcją blokującą (żaden javascript nie zostanie uruchomiony dopóki nie zwróci true/false), a alert nie jest blokowany (JS kontynuuje wykonywanie). Alertify nie zwraca natychmiast wartości true/false, ale zamiast tego prawdopodobnie natychmiast zwraca undefined, a następnie wywołuje funkcję zwrotną później, gdy użytkownik kliknie przycisk OK lub Anuluj. Zwracana wartość z tej funkcji wywołania zwrotnego nie ma wpływu w twoim przykładzie, ponieważ kod onclick został już zakończony (ponieważ nie jest blokowany).

Zakładając, że używasz tego: https://github.com/fabien-d/alertify.js/

Jak to faktycznie działa z funkcji wywołania zwrotnego, a nie wartość zwracana:

alertify.confirm(message, function (e) { 
    if (e) { 
     //after clicking OK 
    } else { 
     //after clicking Cancel 
    } 
}); 

Dla próbki kodu, możesz spróbować czegoś takiego:

function performDelete (a_element) { 
    // perform your delete here 
    // a_element is the <a> tag that was clicked 
} 

function confirmAction (a_element, message, action) { 
    alertify.confirm(message, function(e) { 
     if (e) { 
      // a_element is the <a> tag that was clicked 
      if (action) { 
       action(a_element); 
      } 
     } 
    }); 
} 

<a href="#" onclick="confirmAction(this, 'Are you sure you wish to remove this?', performDelete); return false;">Delete</a> 

EDYCJA: zaktualizowano jako ogólne okno potwierdzenia, które wywołuje funkcję zwrotną, jeśli użytkownik kliknie przycisk OK.

+0

To jest problem. Nie chcę tworzyć nowej funkcji za każdym razem, gdy ją nazywam. Chciałem mieć ogólną funkcję do wyświetlenia i powrotu. Dzięki. – jfreak53

+0

Czy chcesz, aby link prowadził do jego href, jeśli użytkownik kliknie przycisk OK? lub jest jakiś javascript, który wykonuje akcję, jeśli użytkownik kliknie OK? Zobacz moją zaktualizowaną odpowiedź. – Levi

+0

Nie, ale to, co napisałeś powyżej, mogę zmienić teraz, aby zrobić to, co potrzebne :) dziękuję. – jfreak53