Sur ma page Wicket (6.27), j'ai un AjaxLink. Dans cet AjaxLink j'utilise un AjaxCallListener pour appeler du javascript à afficher et un div de spinner qui remplit la page. Le Javascript est un simple appel addClass/removeClass.Wicket 6 - Empêcher la page de défilement de l'appel jQuery d'utiliser AjaxCallListener
Lorsque vous appelez cette classe addClass/removeClass, la page défile vers le haut. Ceci est indésirable. Je sais que l'addClass/removeClass est à blâmer pour le défilement comme quand je les enlève, tout va bien. Comment puis-je empêcher le défilement de la page sur le lien cliquer dans ma situation?
extraits de code ci-dessous:
Le lien en html:
<a wicket:id="do-things-link" class="do-things-link" href="javascript:void(0)">Do The Things</a>
Le lien dans le code:
final AjaxLink link = new AjaxLink(WICKET_ID_THE_LINK)
{
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getAjaxCallListeners().add(new GlobalSpinnerListener());
}
@Override
public void onClick(AjaxRequestTarget target)
{
doSomething(target);
}
};
La AjaxCallListener - classe GlobalSpinnerListener (où customScriptReference est mon code js, montré après):
@Override
public CharSequence getBeforeHandler(Component component) {
return ";displayGlobalSpinner();";
}
@Override
public CharSequence getCompleteHandler(Component component) {
return ";hideGlobalSpinner();"
}
@Override
public void renderHead(Component component, IHeaderResponse response) {
ResourceReference jqueryReference =
Application.get().getJavaScriptLibrarySettings().getJQueryReference();
response.render(JavaScriptHeaderItem.forReference(jqueryReference));
response.render(JavaScriptHeaderItem.forReference(customScriptReference));
}
Et le code js:
function displayGlobalSpinner() {
$('#global-page-activity-indicator').addClass('on');
}
function hideGlobalSpinner() {
$('#global-page-activity-indicator').removeClass('on');
}
La fileuse mondiale se trouve dans le code HTML sous tout autre contenu dans le corps:
<div id="global-page-activity-indicator" class="am-loading-spinner">
Et le css pour cette classe est la suivante:
/* Absolute Center Spinner */
.am-loading-spinner {
display: none;
position: fixed;
z-index: 9999;
height: 2em;
width: 2em;
overflow: visible;
margin: auto;
top: 0;
left: 0;
bottom: 0;
right: 0;
}
.am-loading-spinner.on {
display: block;
}
/* Transparent Overlay */
.am-loading-spinner:before {
content: '';
display: block;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.3);
}
Je ne vois pas vraiment pourquoi ce code JS ferait défiler la page. Est-ce tout ce que vous faites dans les fonctions JS? –
C'est tout ce qu'ils font comme indiqué. J'ai ajouté plus d'informations sur la façon dont le spinner est déclaré dans le html et ses classes css connexes (si cela a quelque chose à voir avec cela) –
Pourquoi n'utilisez-vous pas l'approche AjaxIndicatorAppender/IAjaxIndicatorAware de Wicket? (Voir aussi: https://github.com/apache/wicket/blob/master/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/AjaxIndicatorAppender.java) – RobAu