2009-03-23 11 views
0

ich dieses Problem bin vor:Zwei Ereignisse auf einer Onclick

<p class="pushButton"> 
    <a href="javascript:return;" 
     onclick="SetOkCodeButton('=SC_ORDER', 'BBPForm', '', '',''); 
     return false;" name="Order" class="pushButton" 
     title="Orders your shopping cart. This completes the operation " 
     onmouseover="status=' ';return true;" onmouseout="status=' ';"> 
     &nbsp;Order&nbsp; 
    </a> 
</p> 

<p class="pushButton"> 
    <a href="javascript:return;" 
     onclick="SetOkCodeButton('=SC_REFRESH', 'BBPForm', '', '',''); 
     return false;" name="Refresh" class="pushButton" 
     title="Updates all details according to your changes. " 
     onmouseover="status=' ';return true;" onmouseout="status=' ';"> 
     &nbsp;Refresh&nbsp; 
    </a> 
</p> 

ich die Funktionalität der ORDER Taste ändern müssen. Es sollte die REFRESH (Generierung der SC_REFRESH Ereignis) -Funktion ausgelöst werden, bevor das Ereignis SC_ORDER generiert wird.

Es bedeutet, dass ich zwei Ereignisse mit einem onlick auf der ORDER Taste - zuerst und dann ORDER auslösen muss. Mit 2 Sekunden Pause zwischen den beiden Ereignissen. Die Funktionalität von REFRESH wird nicht geändert.

Antwort

2

A). Was ist der Grund für die Verzögerung von 2 Sekunden? Dies ist äußerst verdächtig ...

B). Jede gegebene Methode sollte genau eine Sache gut erreichen. Das Erstellen verschiedener Funktionen für REFRESH und ORDER innerhalb der Methode legt mir nahe, dass Sie wirklich zwei Methoden haben, die in zwei Teile aufgeteilt werden sollten (die vielleicht beide eine gemeinsame dritte Funktion nennen), aber dann habe ich Mühe, mir vorzustellen, warum Sie das wollen Aktualisieren Sie das Formular vor Buchung es.

C). Wenn Sie das wirklich brauchen, können Sie einen Timer mit setTimeout vorzugsweise in die neu geteilte Methode selbst einführen, aber wenn Sie mit der vorhandenen Implementierung fortfahren, dann denke ich an das onclick Attribut selbst, obwohl es jetzt unordentlich (er) wird. Sie würden so etwas schreiben:

onclick="SetOkCodeButton('=SC_REFRESH', 'BBPForm', '', '',''); setTimeout(function(){SetOkCodeButton('=SC_ORDER', 'BBPForm', '', '','');},2000);" 

Beachten Sie aber, dass setTimeout asynchron ist - wenn man eine echte Methode wait() möchten, müssen Sie ein schreiben müssen, um sich (und diese sind Prozessor teuer), aber sie‘ re teuer und wieder bezweifle ich, dass Sie es wirklich brauchen.

D). Die Rückkehr falsch ist auch sehr verdächtig ...

E). Ebenso mit den Mouseouts und Overs, ist das automatisch generierter Code?

+0

Die return false; Anweisung bricht die Standardaktion des Links ab (Navigieren zum Ankerstandort). Aus diesem Grund die href = "javascript: return;" Attribute könnten einfach durch href = "#" ersetzt werden. –

+0

Wenn Sie so viel Code in das Onclick-Attribut einfügen, wäre es viel besser, wenn Sie es aus Gründen der Lesbarkeit und Wartungsfreundlichkeit in einen Skriptblock aufspalten würden. –

+0

onclick erfordert keine Rückkehr false, hrefs do (und javascript: void foo() ist eine sicherere, klarere Art und Weise, dies zu tun - und ich konnte nicht zustimmen, dass dies ist schrecklich Code - siehe Punkte A, B, D und E :) – annakata

1

Aus irgendeinem Grund wird dies nicht funktionieren?

Wenn diese Funktionen synchron sind, sollte dies in Ordnung sein. Wenn sie asynchron sind, benötigen Sie wahrscheinlich einen Rückruf.

0

Ich habe gerade herausgefunden, dass der hier aufgelistete Code von dieser Vorlage aus SAP erzeugt wird. Ich bin neu in diesem. :-) Jeder kann eine Chance sehen, 2 Ereignisse (SC_REFRESH und SC_ORDER) statt nur einer (SC_ORDER) auszulösen?

TR()TD()

BBPVSpace() BBPButtonBegin()

if (BTN_SC_ORDER.exists) if (BTN_SC_ORDER.disabled) BBPDisabledButton(BTN_SC_ORDER.label) BBPButtonSpace() else BBPButton(BTN_SC_ORDER.OKCODE,BTN_SC_ORDER.label, tooltip=#BUTTON_ORDER) BBPButtonSpace() end end

if (BTN_SC_REFRESH.exists) if (BTN_SC_REFRESH.disabled) BBPDisabledButton(BTN_SC_REFRESH.label) BBPButtonSpace() else BBPButton(BTN_SC_REFRESH.OKCODE,BTN_SC_REFRESH.label,tooltip=#BUTTON_ACTUAL) BBPButtonSpace() end end

Verwandte Themen