Written by

Question Ruslan K · Jun 14, 2018

AddEventListener for a control

Is there a way to add event listener for a zen control?

I have a custom text control and I want to add 'change' event listener for it.

Is it possible to do not using 'onchange' property? 

Comments

Ruslan K · Jun 14, 2018

I have tried to do that in my custom text control class in method  onloadHandler()

var elem document.getElementById(this.id);

elem.firstChild.addEventListener('change', function(){
        zenThis.doSomeWork();
    });

But this code is not working.

0
Vitaliy Serdtsev · Jun 14, 2018

Try so:

Class dc.test Extends %ZEN.Component.page
{

XData Contents [ XMLNamespace "http://www.intersystems.com/zen" ]
{
  <page xmlns="http://www.intersystems.com/zen">
    <button id="btn1" caption="Test Server"/>
    <button id="btn2" caption="Test Client"/>
  </page>
}

ClassMethod SrvTest() [ ZenMethod ]
{
  &js<zenAlert('from Server');>
}

ClientMethod test() [ Language = javascript ]
{
  zenAlert('from Client');
}

ClientMethod onloadHandler() [ Language = javascript ]
{
  document.getElementById('btn1').addEventListener('click',new Function('evt','return zenPage.SrvTest();'),false);
  document.getElementById('btn2').addEventListener('click',new Function('evt','return zenPage.test();'),false);
}
}
0
Ruslan K · Jun 14, 2018

This solution works for me.

Maybe somebody will  need it.

Method onloadHandler()  is  in custom text control class.


ClientMethod onloadHandler() [ Language = javascript ]
{
var comp this;
var elem this.findElement('control');
elem.addEventListener('click', function(){
        comp.someMethod();
    });
    
}

0