[英]Vaadin : How to trigger change events by javascript?
我有一个TextField组件,并在上面添加了ValueChangeListener。
@Theme("myTheme")
@SuppressWarnings("serial")
@Title("VaadinTest")
@PreserveOnRefresh
@JavaScript({ "vaadin://js/jquery/jquery-1.10.1.min.js", "vaadin://js/test.js" })
public class HelloWorldUI extends UI {
@Override
protected void init(VaadinRequest request) {
final VerticalLayout layout = new VerticalLayout();
final TextField txtName = new TextField();
txtName.setId("test");
txtName.setImmediate(true);
txtName.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(final ValueChangeEvent event) {
System.out.println(txtName.getValue());
}
});
layout.addComponent(txtName);
Button btnOK = new Button("OK");
btnOK.addClickListener(new ClickListener() {
public void buttonClick(ClickEvent event) {
Page.getCurrent().getJavaScript().execute("doSomething()");
}
});
layout.addComponent(btnOK);
setContent(layout);
}
}
在我的js文件中( test.js )
function doSomething() {
$('input#test').val("John").change();
}
但是我从来没有得到ValueChangeEvent,我从来没有得到文本John的控制台日志。
我想念什么? 还是可以通过javascript触发组件的事件?
不幸的是,自vaadin 7.2版以来,JQuerys .trigger()和.change()函数不起作用。
我不确定是Jquery还是Vaadin Bug。 可能是Jquery Bug。
但是,您必须使用本机javascript函数.dispatchEvent()
com.vaadin.ui.JavaScript.getCurrent().execute(
"var field = document.getElementById('test');" +
"field.dispatchEvent(new Event('change'));"
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.