[javascript] Custom Alerts / Confirms

Pagina: 1
Acties:

  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 03-11 00:39
Jullie zullen wel bekend met de javascript functions alert, promp. confirm. Deze functions kun je natuurlijk overriden, zodat je custom boxjes kan maken:

code:
1
window.alert = function(strMessage) { fnShowAlert(strMessage);  }


De functie fnShowAlert(strMessage) maakt dan het `alert` venster. Maar nu komt het probleem.. Hoe vang de muis af. Het punt is nu dat de functie direct een null returned :

code:
1
2
3
4
5
6
7
8
9
10
11
function fnShowAlert(strMessage)
{
    iUserSelection = null;
    document.getElementById("dialogLayer").style.display="block";
    document.getElementById("alertDialog").style.display="block";   
    document.getElementById("alertMessage").innerHTML = strMessage;
    alertConfirmButton = document.getElementById("alertConfirmButton");
    alertConfirmButton.onclick = function() { fnDialogConfirm(); return iUserSelection; }

       // hier word dus een null gereturned, geen return aangeven is dus return void.
}


Maar hoe krijg je nu dat er netjes gewacht word op een actie van de button, aangezien javascript geen sleep statement kent, kun je ook niet via een flag-constructie gaan lopen wachten, en bussy wait is helemaal uit de boze

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Tja, je zult toch zoiets moeten doen, iets als een while-lus. Je kunt in je confirm-functie een globale variabele gebruiken (isConfirmed) die een triple-state-boolean is: true, false, not set.

Quick-and-Dirty voorbeeldje (ongetest btw):
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var isConfirmed = 0;
function confirm()
{
   // isConfirmed op 0 zetten zodat vorige resultaten niet lastig kunnen worden
   isConfirmed = 0;
   // ...
   isConfirmed = true;
   // ...
   isConfirmed = false;
}

function myFunction()
{

  confirm('bla');
  while(isConfirmed == 0)
  {
     // niks doen totdat isConfirmed ongelijk is aan 0
  }
  if (isConfirmed)  // doe iets
  else
    // doe iets anders
}

[ Voor 0% gewijzigd door Alex) op 21-11-2006 00:13 . Reden: typo ]

We are shaping the future


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
  while(isConfirmed == 0)
  {
     // niks doen totdat isConfirmed ongelijk is aan 0
  }

en dan freezed je browser of displayed uiteindelijk een 'this script is taking too long to run...' ;)

Intentionally left blank


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Daar heb je gelijk in, maar ik wist zo gauw geen betere oplossing, mede dankzij het gebrek aan een sleep-functie in JS.

We are shaping the future


  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

crisp schreef op maandag 20 november 2006 @ 23:57:
JavaScript:
1
2
3
4
  while(isConfirmed == 0)
  {
     // niks doen totdat isConfirmed ongelijk is aan 0
  }

en dan freezed je browser of displayed uiteindelijk een 'this script is taking too long to run...' ;)
Precies. Daar kun je dus beter een setTimeout voor gebruiken :) .

Ik ontken het bestaan van IE.


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Over het algemeen wordt dit 'probleem' opgelost door een 'layer' over de gehele content te plaatsen die verder ook alle events afvangt zodat de onderliggende content tijdelijk niet bereikbaar is.

Intentionally left blank


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 03-11 00:39
een while lus werkt niet, firefox zegt netjes dat het script traag word..

maar een alert override moet mogelijk zijn.. alleen weet iemand hoe dat zit?

de setTimOut functie werkt niet.. de meeste browsers creeren namelijk een nieuwe javascript thread voor dat soort dingen.. ook dat werkt ook niet..
Pagina: 1