Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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
Vaadin:如何通过javascript触发更改事件?_Javascript_Vaadin_Vaadin7 - Fatal编程技术网

Vaadin:如何通过javascript触发更改事件?

Vaadin:如何通过javascript触发更改事件?,javascript,vaadin,vaadin7,Javascript,Vaadin,Vaadin7,我有一个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 {

我有一个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)中

但我从未获得ValueChangeEvent,我的意思是我从未获得文本John的控制台日志


我错过了什么?或者可以通过javascript触发组件的事件吗?

不幸的是,自vaadin 7.2版以来,JQuerys.trigger().change()函数不起作用

我不确定这是Jquery还是Vaadin Bug。可能是Jquery错误

但是,您必须使用本机javascript函数.dispatchEvent()


如果调用
document.getElementById('test').blur()
来触发valuechangelistener,它也应该可以工作
function doSomething() {
$('input#test').val("John").change();
}
  com.vaadin.ui.JavaScript.getCurrent().execute(
    "var field = document.getElementById('test');" +
            "field.dispatchEvent(new Event('change'));"
    );