2009-06-02 5 views
2
gemacht wird

ich dieses Stück Code verwenden, um Text-Button auf der WebseiteVorbild: Wie Taste verhindern drücken, bis Antwort

<a href='#' onclick="new Ajax.Updater('history', '/responsesG', {parameters: {name: '%s', port: '%s', profil: '201', action: 'profile'}, 
    insertion: Insertion.Top} 
     ); return false;">Do something</a> 

zu machen, da es teuer Anruf würde Ich mag Benutzer von mehrer verhindern, dass es zu klicken da es asynchronen Aufruf macht und sie bekommen zum Beispiel 3 Antworten für gleiche Sache (seit Antwort zuletzt für 3 bis 5 Sekunden) habe ich versucht Option

asynchron: false

mit gleichem Erfolg (Fehler). Wie kann ich es tun?

Edit:

<a href="#" onclick="diagnostika('mac_adresa');return false;">-Mac address</a> 
<script type="text/javascript"> 
function diagnostika(akcija) { 
      if(!this.clicked) { 
       this.clicked = true; 
       button = this; 
       new Ajax.Updater('history', '/responsesG', { 
        parameters: { 
         name: '%(name)s', 
         port: '%(port)s', 
         action: akcija}, 
        insertion: Insertion.Top, 
        onComplete: function() { 
        button.clicked = false;}});} 
       return false;}; 
</script> 

Dies ist, was ich am Ende umgesetzt.

Antwort

2

Sie müssen so etwas wie hinzufügen:

if(!this.clicked) { 
    this.clicked = true; 
    button = this; 
    new Ajax.Updater('history', '/responsesG', { 
     parameters: { 
      name: '%s', 
      port: '%s', 
      profile: '201', 
      action: 'profile' 
     }, 
     insertion: Insertion.Top, 
     onComplete: function() { 
      button.clicked = false; 
     } 
    }); 
} 

return false; 

Aber wirklich, das onClick aus einem Inline bringen, so dass es einfacher ist, zu lesen.

+0

Vielen Dank für den Schnitt, ich weiß nicht, wie man Multi-Line-Code zu tun. –

+0

gibt es Tippfehler onCompleted: function() es ist onComplete: function() – Ib33X

+0

ja das funktioniert wie erwartet danke – Ib33X

0

Deaktivieren Sie den Link im onclick-Handler, und zeigen Sie ihn erneut an, wenn Sie eine Antwort erhalten.

0

senden Sie den onclick zu Ihrer eigenen Funktion, deaktivieren Sie die Schaltfläche, starten Sie einen Timer, der die Schaltfläche wieder aktivieren dann tun Sie den Ajax.Updaer.

3

ein eindeutiges ID-Attribut Geben Sie Ihren Link, zB:

<a href="#" id="foo">Do something</a> 

in Ihrem JavaScript Dann können Sie dies tun:

$("foo").observe("click", function() { 
    this.disabled = true; 
    new Ajax.Updater("history", "/responsesG", 
        { parameters: { name: "%s", 
            port: "%s", 
            profile: "201", 
            action: "profile" }, 
        insertion: Insertion.Top }); 
    return false; 
}); 
+0

mit diesem ich immer noch 3 Anruf ist Benutzer klicken Sie 3 mal Link während warten auf den ersten zu beenden – Ib33X

+0

ich glaube, dass this.disabled = true; sollte Schaltfläche nur Schaltfläche deaktivieren ist immer noch Schaltfläche nach? – Ib33X

0

Rückkehr Onclick ein globales Flag, das einmal auf false gesetzt ist ein Anfrage erlischt, und zurück zu wahr, wenn es wieder kommt