Java 删除textarea中的内容时触发的事件
我有一个wicket应用程序,当textarea中的内容发生变化时,需要通过Ajax保存数据。当内容发生变化时,我可以通过“onchange”DOM事件轻松完成。但是当用户删除(通过退格或删除键)整个内容时,onchange事件不会被触发。触发哪个事件 我尝试了oninput,onkeyup和onchange。所有这些都会工作,直到至少剩下1个字符 Wicket特定信息:版本1.5。文本区域将添加到面板,并添加到DefaultDataTable。因此,组件不会直接添加到表单中。TextArea连接到PropertyModelJava 删除textarea中的内容时触发的事件,java,html,ajax,dom,wicket,Java,Html,Ajax,Dom,Wicket,我有一个wicket应用程序,当textarea中的内容发生变化时,需要通过Ajax保存数据。当内容发生变化时,我可以通过“onchange”DOM事件轻松完成。但是当用户删除(通过退格或删除键)整个内容时,onchange事件不会被触发。触发哪个事件 我尝试了oninput,onkeyup和onchange。所有这些都会工作,直到至少剩下1个字符 Wicket特定信息:版本1.5。文本区域将添加到面板,并添加到DefaultDataTable。因此,组件不会直接添加到表单中。TextArea连
final TextArea commentsTa = new TextArea("commentsTa", new PropertyModel<String>(dataObject, "property1"));
commentsTa.setOutputMarkupId(true);
commentsTa.setRequired(true);
commentsTa.setOutputMarkupPlaceholderTag(true);
commentsTa.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
System.out.print("Starting onchange.... ");
System.out.print("onchange: " + commentsTa.getConvertedInput());
}
});
final TextArea commentsTa=new TextArea(“commentsTa”,新属性模型(dataObject,“property1”);
commentsTa.setOutputMarkupId(true);
注释STA.setRequired(真);
注释STA.setOutputMarkupPlaceholderTag(真);
添加(新的AjaxFormComponentUpdateBehavior(“onchange”){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
系统输出打印(“更改后开始…”);
System.out.print(“onchange:+commentsTa.getConvertedInput());
}
});
更新:
我删除了
commentsTa.setRequired(true)代码>从上面的代码开始,它开始工作。我猜原因是Wicket强制执行验证,因此onchange事件确实会被触发 onchange仅在元素失去焦点时触发(用户单击外部、制表符等)。尽管Wicket可能生成JavaScript,但JavaScript与这里的问题无关。这是一个关键问题。我已经删除了不相关的标记(并添加了Java标记)。(注意:input
在textarea
:)@T.J.Crowder-Wicket只为JavaScript事件注册监听器,当您在textarea
:)中使用backspace等时,input确实在JavaScript层触发。如果没有JavaScript事件,那么Wicket就不会调用Ajax。所以,我不明白为什么这是Wicket的一个问题。我已将您的JSFIDLE修改为使用change
事件,即使在删除整个内容并移出文本区域后,它也会正确地激发。@martin-g:当然会,这就是change
激发的时候。但OP在上面明确表示,他们已经尝试了oninput
。如果oninput
不起作用,这是Wicket的问题,因为在浏览器级别,在这种情况下,input
肯定会被触发。我始终建议使用OnChangeAjaxBehavior
onchange仅在元素失去焦点时触发(用户在外部单击、选项卡等),尽管Wicket可能会生成JavaScript,JavaScript与这里的问题无关。这是一个关键问题。我已经删除了不相关的标记(并添加了Java标记)。(注意:input
在textarea
:)@T.J.Crowder-Wicket只为JavaScript事件注册监听器,当您在textarea
:)中使用backspace等时,input确实在JavaScript层触发。如果没有JavaScript事件,那么Wicket就不会调用Ajax。所以,我不明白为什么这是Wicket的一个问题。我已将您的JSFIDLE修改为使用change
事件,即使在删除整个内容并移出文本区域后,它也会正确地激发。@martin-g:当然会,这就是change
激发的时候。但OP在上面明确表示,他们已经尝试了oninput
。如果oninput
不起作用,这是一个Wicket问题,因为在浏览器级别,在这种情况下,input
肯定会被触发。我总是建议使用OnChangeAjaxBehavior