jquery - Vaadin and independent JavaScript Events -


i develop strength password indicator using progressbar , passwordfield. problem can't use jquery events handlers e.g. onkeydown or native javascript's addeventlistener because works 1 time vaadin somehow override it. dont want remove permanently , completly, should work jquery object. ideas or better solution welcome.

any ideas or better solution welcome.

that's how batman (code first, explanation later):

@suppresswarnings("serial") @theme("so5") @javascript("batman.js") public class so5ui extends ui {      @webservlet(value = "/*", asyncsupported = true)     @vaadinservletconfiguration(productionmode = false, ui = so5ui.class)     public static class servlet extends vaadinservlet {     }      @override     protected void init(vaadinrequest request) {         verticallayout layout = new verticallayout();         textfield field = new textfield();         field.setid("batmanfield");         layout.addcomponent(field);         setcontent(layout);     } } 

and batman.js located in same package so5ui class.

alert('script loaded'); var = setinterval(batmanfunction, 300);  function batmanfunction() {     var element = document.getelementbyid("batmanfield");     if(element != null)     {         element.addeventlistener("mouseover", batmanscript);         clearinterval(i);     } } function batmanscript() {     alert('i batman'); } 

this code works , every time mouse on textfield alert "i batman" text appears. point out important stuff:

  1. i've added id field can find getelementbyid()
  2. i run batmanfunction register listener field in intervals. that's because have no control on execution time of javascript , dom creation. need register listener after dom creation.
  3. while working javascript , vaadin sure disable js caching in browser because leads confusion ("this script should work" while browser still use cached script). here how on firefox.

the code has been tested on firefox 34, vaadin 7.3, tomcat 7.0. if still having troubles please provide more details.

edit: tested , works keydown too

edit2 believe figured out why might works "once" you. since vaadin removes , adds div's automatically via ajax, must add event listener component every time it's added dom. in example: if click on button removes field layout, , later click on button adds same field layout event no longer generated. must find places , execute given script once again. can check following code:

    @override     protected void init(vaadinrequest request) {     verticallayout layout = new verticallayout();     textfield field = new textfield();     field.setid("batmanfield");     layout.addcomponent(field);     button button = new button("remove");     button.addclicklistener(new clicklistener()     {          @override         public void buttonclick(clickevent event)         {             layout.removecomponent(field);         }     });     layout.addcomponent(button);     button button2 = new button("add");     button2.addclicklistener(new clicklistener()     {          @override         public void buttonclick(clickevent event)         {             layout.addcomponent(field);             com.vaadin.ui.javascript.eval("setinterval(batmanfunction, 300)");         }     });     layout.addcomponent(button2);     setcontent(layout); } 

Comments

Popular posts from this blog

java - Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved -

Round ImageView Android -

How can I utilize Yahoo Weather API in android -