Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除textarea中的内容时触发的事件_Java_Html_Ajax_Dom_Wicket - Fatal编程技术网

Java 删除textarea中的内容时触发的事件

Java 删除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连

我有一个wicket应用程序,当textarea中的内容发生变化时,需要通过Ajax保存数据。当内容发生变化时,我可以通过“onchange”DOM事件轻松完成。但是当用户删除(通过退格或删除键)整个内容时,onchange事件不会被触发。触发哪个事件

我尝试了oninputonkeyuponchange。所有这些都会工作,直到至少剩下1个字符

Wicket特定信息:版本1.5。文本区域将添加到面板,并添加到DefaultDataTable。因此,组件不会直接添加到表单中。TextArea连接到PropertyModel

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