2009-03-23 4 views
0

je suis confronté à cette question:Deux événements sur un 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> 

Je dois changer la fonctionnalité du bouton ORDER. Il doit déclencher la fonctionnalité REFRESH (générant l'événement SC_REFRESH) juste avant que l'événement SC_ORDER ne soit généré.

Cela signifie que j'ai besoin de déclencher deux événements avec un seul clic sur le bouton ORDER - d'abord REFRESH puis ORDER. Avec 2 secondes de pause entre les deux événements. La fonctionnalité de REFRESH ne changera pas.

Répondre

2

A). Quelle est la raison du retard de 2 secondes? Ceci est extrêmement suspect ...

B). Toute méthode donnée devrait atteindre exactement une chose bien. Créer différentes fonctionnalités pour REFRESH et ORDER dans la méthode me suggère que vous avez vraiment deux méthodes qui devraient être divisées en deux (qui appellent peut-être une troisième fonction commune), mais encore une fois, j'ai du mal à imaginer pourquoi vous voudriez actualisez le formulaire avant en l'affichant.

C). Si vous en avez vraiment besoin, vous pouvez introduire un temporisateur avec setTimeout de préférence dans la méthode nouvellement divisée, mais si vous continuez avec l'implémentation existante, je devine dans l'attribut onclick lui-même, mais maintenant il devient désordonné (er). Vous écririez quelque chose comme ceci:

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

Notez cependant que setTimeout est asynchrone - si vous voulez une vraie méthode attente(), vous devez écrire vous-même (et ce sont le processeur cher), mais ils » re cher et encore je doute que vous en ayez vraiment besoin.

D). Le retour faux est également profondément suspect ...

E). De même avec les passages de souris et overs, est ce code généré automatiquement?

+0

return false; L'instruction annule l'action par défaut du lien (navigation vers l'emplacement de l'ancre). Pour cette raison, le href = "javascript: return;" les attributs pourraient simplement être remplacés par href = "#". –

+0

Si vous mettez autant de code dans l'attribut onclick, vous feriez mieux de le décomposer en une fonction dans un bloc de script pour plus de lisibilité et de facilité de maintenance. –

+0

onclick ne nécessite pas de retour false, hrefs do (et javascript: void foo() est une façon plus sûre et plus claire de le faire - et je ne pourrais pas être d'accord que c'est un code horrible - voir points A, B, D et E :) – annakata

1

Une raison ne fonctionne pas? Si ces fonctions sont synchrones, cela devrait être OK. Si elles sont asynchrones, vous aurez probablement besoin d'un rappel.

0

Je viens de découvrir que le code que j'ai énuméré ici est généré par ce modèle de SAP. Je suis nouveau dans ce domaine. :-) Quelqu'un peut-il voir une chance de déclencher 2 événements (SC_REFRESH et SC_ORDER) au lieu d'un seul (SC_ORDER)?

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

Questions connexes