Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: [return] Czekanie na wynik

Słuchajcie
Potrzebuje zrobić funkcję która będzie zastępować wbudowany confirm(\'jakiś tekst\'). Mam problem przechwyceniem wartości w funkcji, która będzie realizowała ów confirm. Dla przykładu:

function isConfirm(){
var v;
if(confirm(\'Pytanie\')){
alert(\'Super\');
return v = true;

}else{
return v = false; }}


Jak wiadomo funkcja zwróci odpowiednią wartość v ( tak jak i sam confirm()), ale co ważniejsze - alert(\'Super\') zostanie uruchomiony dopiero wtedy, gdy zajdzie reakcja na oknie utworzonym przez confirm. Jak zrobić własny mechanizm, to znaczy funkcję, która zostanie uruchomiona z funkcji-matki i zmusi ją do czekania na wynik, a następnie (po zajściu zdarzenia w funkcji wywołanej) uruchomi ciąg dalszy tejże ?

Thx!Grzegorz K. edytował(a) ten post dnia 30.06.10 o godzinie 10:38

konto usunięte

Temat: [return] Czekanie na wynik

dodać callback do confirm?

confirm('Pytanie', nastepnaFunkcja);
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: [return] Czekanie na wynik

Może i tak, ale ja muszę zastosować inną funkcję, niż confirm - właściwie to ma być taki customowy confirm, który tworzy okno z dwoma przyciskami i czeka na reakcję użytkownika.
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: [return] Czekanie na wynik

A czemu nie przypiąć funkcji do eventów buttonów w Twoim confirmie?

konto usunięte

Temat: [return] Czekanie na wynik

Grzegorz K.:
to ma być taki customowy confirm, który tworzy okno z dwoma przyciskami i czeka na reakcję użytkownika.
Chcesz chyba pisać kod tak, jakby wywołania były synchroniczne. A nie są i o ile wiem w JS nie da się tak pisać - wszędzie stosujesz pattern wywołań asynchronicznych z callbackiem w odpowiedzi, bo jest to platforma jednowątkowa i nie można tego wątku w pełni przejąć.
Synchronicznie to masz tylko wbudowane alert, confirm.

Ja robiłem funkcjonalnie coś podobnego z jQuery UI Dialog - tylko w beforeclose musisz się zabezpieczyć przed przypadkowym zamknięciem okienka. Ale nie zapiąłem tego w jednej funkcji tylko dwóch - inicjacja dialog'u i potem callback, gdy user dokona wyboru. Między inicjacją a callbackiem funkcjonalnie zakładam, że nic się nie dzieje.
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: [return] Czekanie na wynik

maciek kański:
Grzegorz K.:
to ma być taki customowy confirm, który tworzy okno z dwoma przyciskami i czeka na reakcję użytkownika.
Chcesz chyba pisać kod tak, jakby wywołania były synchroniczne. A nie są i o ile wiem w JS nie da się tak pisać - wszędzie stosujesz pattern wywołań asynchronicznych z callbackiem w odpowiedzi, bo jest to platforma jednowątkowa i nie można tego wątku w pełni przejąć.
Synchronicznie to masz tylko wbudowane alert, confirm.

Ja robiłem funkcjonalnie coś podobnego z jQuery UI Dialog - tylko w beforeclose musisz się zabezpieczyć przed przypadkowym zamknięciem okienka. Ale nie zapiąłem tego w jednej funkcji tylko dwóch - inicjacja dialog'u i potem callback, gdy user dokona wyboru. Między inicjacją a callbackiem funkcjonalnie zakładam, że nic się nie dzieje.

Taki mechanizm mam do tej pory. Callbacki dla buttonów w komunikacie - ale chciałem osiągnąć duże uproszczenie sprawdzając czy funkcja zwraca true czy false, tak jak w przypadku


if(confirm('Tekst')){
/* work */
}else{
/* not work */
}


ale jak się nie da to się nie da :(.

konto usunięte

Temat: [return] Czekanie na wynik

Grzegorz K.:
ale jak się nie da to się nie da :(.
no moim zdaniem się nie da, trzeba na tych Callbackach pozostać. W każdym razie jak ktoś umie to chętnie podejrzę:)
Andrzej Błaszczyk

Andrzej Błaszczyk Programowanie,
e-marketing,
e-commerce

Temat: [return] Czekanie na wynik

Ja też nie widzę opcji aby się dało. A jaką wartość by to miało Twoim zdaniem gdyby się dało?
Jacek W.

Jacek W. Web Developer

Temat: [return] Czekanie na wynik

Dobry wieczór :)

Coś takiego (???) (Prototype żeby było szybciej):


window.cnf = function (fYes, fNo) {

// tu chyba najlepiej wywołać jakiś lightbox/popup
// a roboczo zróbmy tak:
tmpHTML = "<a href='#' onClick='actYes();return false;'>yes</a> ";
tmpHTML += "<a href='#' onClick='actNo();return false;'>no</a>";
// ---

var alertObj = new Element('DIV',{id:'box'});
alertObj.update(tmpHTML);

window.actYes= function() {
window.setTimeout(function (){close()},0);
fYes();
return false;
};

window.actNo= function() {
window.setTimeout(function (){close();},0);
fNo();
return false;
};

document.body.appendChild(alertObj);
}

function close(){$('box').remove();}

function wrapper(){
cnf(function(){fnYes()}, function(){fnNo()});
}

var fnYes = function(){alert('yes')}
var fnNo = function(){alert('no')}


... i wywołujemy sobie funkcję wrapper() :)

edit: w akcie desperacji ;) to może być nawet:


window.confirm = function (fYes, fNo) {

// to samo co w funkcji window.cnf

}
Jacek Wakuliński edytował(a) ten post dnia 21.07.10 o godzinie 09:50
Grzegorz K.

Grzegorz K. Angular, JavaScript,
Frontend, UI

Temat: [return] Czekanie na wynik

Co nie zmienia faktu, że trzeba wcześniej i tak zdefiniować zdarzenia obsługi.
Nie znalazłszy metody na której zależało mi najbardziej zrobiłem właśnie tak: przed każdym confirmem jest zdefiniowana odpowiednia obsługa na true or false. Trochę uciążliwe ale co tam.



Wyślij zaproszenie do