Powinieneś to zrobić inaczej, korzystając z podstawowych możliwości programowania funkcyjnego w JavaScripcie. Właśnie m.in. dlatego polecam ludziom naukę samego języka JavaScript, a nie tylko jQuery i innych bibliotek. Do nauki języka polecam zawsze książkę "JavaScript -- mocne strony" Douglasa Crockforda -- zwięzła, niedroga, dobra.
W tym wypadku niepotrzebne Ci jest definiowanie mycallback
, skoro chcesz tej funkcji użyć tylko raz. To zbyt dużo tłumaczenia żebym Ci to teraz wyjaśniał (kup książkę, serio -- polecam!), ale może mniej-więcej to zrozumiesz patrząc na konkretny kod.
Użyję w nim funkcji anonimowej i własności zwanej domknięciem:
$(document).ready(function(){
$('a[msg]').click(function(evt) {
var msg = $(this).attr('msg');
$.prompt(msg,{
buttons: { 'yes':true, 'no':false },
prefix: 'cleanblue',
callback: function(clickedButtonValue, $message, formValueMap) { // te ich nazwy parametrów: v, m, f -- są beznadziejne
if (clickedButtonValue === true) {
evt.preventDefault();
}
}
});
});
});
Pisałem to na sucho, ale może od razu zadziała.
W skrócie, w "funkcji anonimowej" chodzi o to, że podstawiam sobie jakąś funkcję bezpośrednio do literału obiektowego, czyli opcji funkcji prompt. Tworzę funkcję bez nazwy (anonimową) i podstawiam ją pod callback
. Nie mam tu nigdzie funkcji o nazwie mycallback
.
W domknięciu chodzi zaś o to, że moja funkcja anonimowa, zdefiniowana w funkcji obsługi zdarzenia click (funkcja obsługi zdarzenia click jest funkcją zewnętrzną, moja funkcja callback jest funkcją zewnętrzną), widzi zmienną evt
, która pochodzi z funkcji zewnętrznej. To bardzo przydatne, bo mogę wywołać metodę evt.preventDefault()
z wnętrza mojej funkcji callback. I to wystarczy żeby przeglądarka nie przechodziła do strony wskazywanej przez kliknięty link.