我试图将AjaxEventBehavior(“ onkeypress”)添加到TextField中,我这样做
TextField<String> input = new TextField<String>("input");
input.setOutputMarkupId(true);
input.add(new AjaxEventBehavior("onkeypress") {
@Override
protected void onEvent(AjaxRequestTarget target) {
Panel.this.info("hello!");
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
attributes.getAjaxCallListeners().add(new AjaxCallListener(){
public CharSequence getPrecondition(Component component) {
return "if (Wicket.Event.keyCode(attrs.event) == 13) " +
" { return true; } " +
"else { return false; }";
}
});
}
});
当我在输入内容中按Enter键(keyCode == 13)时,我的反馈面板显示了您好!但是当我按下另一个键时,Wicket Ajax调试什么也没发生,但得到的信息是:“由于先决条件检查而停止了Ajax请求”,我的ajaxIndicator启动,并且永不停止。
我有一个与此的application.js
Wicket.Event.subscribe('/ajax/call/before',showBusysign);
Wicket.Event.subscribe('/ajax/call/success',hideBusysign);
Wicket.Event.subscribe('/ajax/call/failure',hideBusysign);
}
function hideBusysign() {
document.getElementById('busyIndicator').style.display = 'none';
hideMask();
}
function showBusysign() {
document.getElementById('busyIndicator').src = 'img/busy.gif'
document.getElementById('busyIndicator').style.display = 'inline';
}
hideBusysign永远不会被调用,我尝试这样做但不起作用!
@Override
public CharSequence getFailureHandler(Component component) {
return "document.getElementById('busyIndicator').style.display = 'none'; " +
" hideMask();";
那是实现EnterKeypressEvent的正确方法吗?
谢谢,最好的问候。
最佳答案
您应该使用'/ajax/call/beforeSend
而不是'/ajax/call/before
。
仅当所有前提条件均通过时,才会执行beforeSend
。