Toon posts:

[JS/Ajax] Disablen onclick in een <a>

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi,

Ik ben met wat ajax zaakjes bezig in een script. De ajax communiceerd met PHP en deze voert weer wat wijzigingen uit in een sessie. Om racing te voorkomen wil ik nu eigenlijk dat bij een request tijdelijk de link (in een <a>) of in ieder geval de onclick wordt geblokkeerd, zodat maar 1 ajax request tegelijk kan worden gestart.

Bij een button kan je makkelijk disabled gebruiken, maar bij een <a> is dit helaas geen mogelijkheid.

De ajax wordt allemaal gedaan dmv Prototype... zie ik misschien iets voor de hand liggends over het hoofd? Iemand een oplossing?

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Gewoon iets met onclick="return false; eventueelHierGewoonOudeCode();"? En als het weer actief moet worden de return false weer weghalen? Of afvangen in een functie die aangeroepen wordt uit onclick, en welke de request naar ajax doorgeeft. Die kan tijdens een request nieuwe requests blocken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hoe voeg ik die return false toe dan?

Is er geen makkelijkere methode om nieuwe requests te voorkomen voordat de oude is afgehandeld...

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Ik heb hier even in IE6 en FF2 getest en <a onclick="return false;" href="http://www.google.com">Klik hier als je kan</a> kan ik niet op klikken.

Dus je kan via javascript de onclick property van een link wijzigen zodat je er niet op kan klikken.

//edit damn, telang gewacht in het "post reply" scherm :+

[ Voor 11% gewijzigd door DanielG op 07-04-2008 14:52 ]

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:38

TeeDee

CQB 241

En waarom zou je de link gewoon niet weghalen bij een onClick. Request klaar? > Toon link.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:22

RM-rf

1 2 3 4 5 7 6 8 9

los van de eenvoudige A.onclick = function() { return; } zou je ook het gehele overkoepelende object een onmousedown event kunnen toevoegen en hierin een canclebubble uitvoeren, waardoor de event niet verder uitgevoerd wordt (in mootools gaat cancleBubble via 'stopPropagation()' )...

Dat kan handig zijn als het object mogelijk meerdere A-links en/of buttons kan bevatten die allemaal ge-disabled moeten worden.

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

  • Stephan Oudmaijer
  • Registratie: Oktober 2000
  • Laatst online: 16-08-2023
Of nog simpeler, je request synchroon maken :-)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@TeeDee ==> display:none?

@RM... heb je daarvan wellicht meer info, evt. over Mootools? Liefste Prototype uiteraard :)

@DanielG, kan, maar lijkt me een beetje een smerige oplossing.

Acties:
  • 0 Henk 'm!

Verwijderd

euhm, in uw functie gewoon kijken of hij bezig is met een ajax request, zoja, doe niets, anders doe je je ajax request?

Dan hoef je toch niets aan te passen in je onclick event of aan je href attribute?

Acties:
  • 0 Henk 'm!

  • RM-rf
  • Registratie: September 2000
  • Laatst online: 11:22

RM-rf

1 2 3 4 5 7 6 8 9

Verwijderd schreef op maandag 07 april 2008 @ 14:58:

@RM... heb je daarvan wellicht meer info, evt. over Mootools? Liefste Prototype uiteraard :)
mootools was naar ik meen oorspronkelijk een addon op prototypejs, en heeft veel overeenkomsten, dus het kan goed zijn dat ook protype dit soortgelijk toepast; het cancellen van het 'bubbellen' van events dmv een functie 'stopPropagation()'...

dat weet ik niet, maar ik kan het even nazoeken via google:

na wat zoekwerk, stopPropagation en preventdefault zijn standaard DOM level2 methods binnen events: die het 'afhandelen en 'flow' regelen:
http://www.w3.org/TR/DOM-...html#Events-flow-bubbling

waar browsers deze niet geimplementeerd hebben voegen javascript-libraries als prototypejs (en bv mootools) deze toe.

[ Voor 24% gewijzigd door RM-rf op 07-04-2008 15:14 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Smoerf... kan je me een richting opwijzen, heb in de prototype API zitten kijken, maar geen idee of daar een methode/functie inzit om te kunnen kijken of er momenteel al ajax requests bezig zijn. Ik kan wel de ajax request op synchroon zetten, maar dat wordt in de manual afgeraden.

Acties:
  • 0 Henk 'm!

Verwijderd

bij je Ajax.Request een onCreate event maken die een globale variable op true zet, en bij het afhandelen van je data die terug op false zetten.

En dan hoef je enkel bij het aanroepen van je functie kijken of je globale var op true staat, zonee, dan doe je je ajax request.

Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

De oplossing is heel erg simpel. Dit trukje gebruik ik ook om te voorkomen dat een formulier dubbel wordt verstuurd (bezoekers kunnen heel ongeduldig zijn..)


JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var ajaxRunning = false;

function calculateTemperature()
{
  if (ajaxRunning)
     return; //method is already running, exit method

   ajaxRunning = true; 

   //voer hier je ajax calls uit
}

function calculateTemperatureResult(result)
{
  //verwerk resultaat (parameters van deze functie zijn afhankelijk van het gebruikte ajax framework)
  ajaxRunning = false; 
}

Kunnen op een page meerdere verschillende ajax calls uitgevoerd worden dan dient elke ajax functie zijn eigen *globale* variabele te krijgen. Op het punt waar nu de return wordt gegeven, kun je eventueel ook een alert aanroepen met de melding dat de functie nog draait.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

JavaScript:
1
2
3
4
$$('A').addEvent('click', function(e) {
 new Event(e).stop();
 //doehieraljeanderemeuk();
}
:?

Stop uploading passwords to Github!

Pagina: 1