Recent

Author Topic: [SOLVED] pas2js click listener  (Read 2036 times)

yus

  • Jr. Member
  • **
  • Posts: 57
[SOLVED] pas2js click listener
« on: May 03, 2020, 10:27:26 pm »
I have a question about working with pas2js.
For demonstration i created simple application.
I have DIV element in HTML page.
Code: Text  [Select][+][-]
  1. <div id="mydiv">
  2. </div>
In pascal code i try add two additional <a> elements to this DIV element.

Result HTML code
Code: Text  [Select][+][-]
  1. <div id="mydiv">
  2.   <div>
  3.     <a href="#" id="myid0">VALUE0</a>
  4.   </div>
  5.   <div>
  6.     <a href="#" id="myid1">VALUE1</a>
  7.   </div>
  8. </div>
  9.  
Elements are added, but when I add for these elements 'click' event listener, 'click' event work only for latest added element.

Code for add  OnClick.
Code: Pascal  [Select][+][-]
  1. program project1;
  2.  
  3. {$mode objfpc}
  4.  
  5. uses
  6.   JS, Classes, SysUtils, Web;
  7.  
  8. const
  9.   LINK = '<div><a href="#" id="myid%d">VALUE%d</a></div>';
  10.  
  11. var
  12.   TestHTMLElement: TJSHTMLElement;
  13.   i: integer;
  14.   LinkElement: TJSHTMLLinkElement;
  15.  
  16. function OnClick(aEvent: TJSMouseEvent): boolean;
  17. begin
  18.   Writeln('Click');
  19. end;
  20.  
  21. begin
  22.   writeln('Start');
  23.   TestHTMLElement := TJSHTMLElement(document.getElementById('mydiv'));
  24.   if not Assigned(TestHTMLElement) then
  25.     writeln('not found');
  26.   TestHTMLElement.innerHTML := '';
  27.   for i := 0 to 1 do
  28.   begin
  29.     TestHTMLElement.innerHTML := TestHTMLElement.innerHTML + format(LINK, [i, i]);
  30.     LinkElement := TJSHTMLLinkElement(document.getElementById(format('myid%d',[i])));
  31. //    LinkElement.onclick := @OnClick;
  32. //    LinkElement.addEventListener('click', @OnClick);
  33.     LinkElement.addEventListener('click',
  34.     procedure
  35.     begin
  36.       writeln('OnClick');
  37.     end
  38.     );
  39.   end;
  40.   writeln('End');
  41. end.
Where I'm wrong?
Maybe there is another way to solve my problem?

example project in github https://github.com/seryal/pas2js_question

Thank you very much!




« Last Edit: May 03, 2020, 11:15:12 pm by yus »

yus

  • Jr. Member
  • **
  • Posts: 57
Re: pas2js click listener
« Reply #1 on: May 03, 2020, 10:48:07 pm »
I Understood my mistake.  :)
Code: Pascal  [Select][+][-]
  1. TestHTMLElement.innerHTML := TestHTMLElement.innerHTML + format(LINK, [i, i]);
This code deletes previous element.

 

TinyPortal © 2005-2018