Re: Tab Order / Focus after replacement per Ajax

Joachim Tuchel <[email protected]> Fri, 23 Jun 2023 08:48:08 +0200
Newsgroups gmane.comp.lang.smalltalk.squeak.seaside
Organization objektfarik Joachim Tuchel
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--===============6719389251617777953==
Content-Type: multipart/alternative;
 boundary="------------63gs7tPKmFAZU00YBAvPhy5E"

This is a multi-part message in MIME format.
--------------63gs7tPKmFAZU00YBAvPhy5E
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

HI Karsten,


thanks for your input. Sounds good, and since we assign ids to all our 
compoinents and save them on the server side already, might work in many 
situations.

However, the order of components (and tehrefor their íd) is not 
necessarily the order of the components' tabbing order. If an input is 
part of a component and the next tabbable element is a subcomponent of 
another component, there is not really an easy way to know the "real" 
tabbing order of the page in a browser. The order of the ids also 
doesn't really match wirh the order of the elements on that page. We 
tried to assign a tabindex at render time and were hoping to solve 
problems that way, but we never found a solution that is reliable enough.

One idea we haven't investigated to the bottom is to extend 
WARenderCanvas to assign tabindex at render time. But in case of 
replacements in Ajax callbacks (load html: or replaceWith:), the canvas 
that renders the new elements is a new one. It would have to have 
knowledge of the origina tabindeces.... Maybe we could let the canvas 
set the tabindex on a currently rendered component (write back to the 
WAComponent at ender time)... and reuse these on every subsequent 
render.... need to think about this.

So I guess the only "reliably correct" way to do things is to ask the 
Browser for the actual elelemnts in tabbing order and compare the 
situation before/after replacement. (onBeforeSend...). Border cases like 
the old element not being part of the replaced section of the page, or 
being re-rendered as disabled  need to be addressed too...

There seems to be no way to ask the browser for the actual tab order 
(although it must be able to determine it, since it provides the 
tabbing...). JQeury has the pseudo-class :tabbable which seems to be 
lose to the truth, so maybe I'll play with it for a while...


Joachim


Am 22.06.23 um 12:03 schrieb Karsten Kusche:
> Hi Joachim,
>
> you need to explicitly set the keyboard focus after the replacement. 
> One possibility is to remember the focused element’s id before the 
> replacement and then use the information after replacement.
>
> Kind regards
> Karsten
>
> 	
>
> Georg Heeg eK | Amtsgericht Dortmund HR A 12812
> Wallstr. 22 | D-06366 Köthen
> Tel.: +49-3496-214328 <tel:+49-3496-214328>
> Web: www.heeg.de <https://www.heeg.de/>
>
>
> Am 22. Juni 2023 um 11:53:09, Joachim Tuchel ([email protected]) 
> schrieb:
>
>> Dear Seasiders,
>>
>>
>> it seems this list is more or less abandoned, but I'll try anyways... My
>> question is probably more JS related that Seaside..
>>
>> I have a question regarding tab order and replaced components via Ajax.
>> Let's assume we have a form with 3 inputs. Teh middle one has an onblur
>> event handler that replaces the form. So far, so good. The problem is
>> that the focus moves to the first text input element instead of the
>> "next" one (which is not the same element as before, because we replaced
>> all three with new ones).
>>
>> I tried a few things like using the tablndex attribute on elements, but
>> found nothing that works. Does anybody have a clue what to do in this
>> situation? I am pretty sure it is a JS only or even plan HTML solution,
>> but cannot find it on my own...
>>
>>
>> Joachim
>>
>>
>> _______________________________________________
>> seaside mailing list -- [email protected]
>> To unsubscribe send an email to [email protected]

-- 

-----------------------------------------------------------------------
Objektfabrik Joachim Tuchelmailto:[email protected]  
Fliederweg 1http://www.objektfabrik.de
D-71640 Ludwigsburghttp://joachimtuchel.wordpress.com
Telefon: +49 7141 56 10 86 0                    Fax: +49 7141 56 10 86 1

--------------63gs7tPKmFAZU00YBAvPhy5E
Content-Type: multipart/related;
 boundary="------------p1gHOIV0zNEfrNDu0ha5y95P"

--------------p1gHOIV0zNEfrNDu0ha5y95P
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>HI Karsten,</p>
    <p><br>
    </p>
    <p>thanks for your input. Sounds good, and since we assign ids to
      all our compoinents and save them on the server side already,
      might work in many situations.</p>
    <p>However, the order of components (and tehrefor their íd) is not
      necessarily the order of the components' tabbing order. If an
      input is part of a component and the next tabbable element is a
      subcomponent of another component, there is not really an easy way
      to know the "real" tabbing order of the page in a browser. The
      order of the ids also doesn't really match wirh the order of the
      elements on that page. We tried to assign a tabindex at render
      time and were hoping to solve problems that way, but we never
      found a solution that is reliable enough. <br>
    </p>
    <p>One idea we haven't investigated to the bottom is to extend
      WARenderCanvas to assign tabindex at render time. But in case of
      replacements in Ajax callbacks (load html: or replaceWith:), the
      canvas that renders the new elements is a new one. It would have
      to have knowledge of the origina tabindeces.... Maybe we could let
      the canvas set the tabindex on a currently rendered component
      (write back to the WAComponent at ender time)... and reuse these
      on every subsequent render.... need to think about this.<br>
    </p>
    <p>So I guess the only "reliably correct" way to do things is to ask
      the Browser for the actual elelemnts in tabbing order and compare
      the situation before/after replacement. (onBeforeSend...). Border
      cases like the old element not being part of the replaced section
      of the page, or being re-rendered as disabled  need to be
      addressed too... <br>
    </p>
    <p>There seems to be no way to ask the browser for the actual tab
      order (although it must be able to determine it, since it provides
      the tabbing...). JQeury has the pseudo-class :tabbable which seems
      to be lose to the truth, so maybe I'll play with it for a while...</p>
    <p><br>
    </p>
    <p>Joachim<br>
    </p>
    <p><br>
    </p>
    <div class="moz-cite-prefix">Am 22.06.23 um 12:03 schrieb Karsten
      Kusche:<br>
    </div>
    <blockquote type="cite"
      cite="mid:[email protected]">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <style>body{font-family:Helvetica,Arial;font-size:13px}</style>
      <div style="font-family:Helvetica,Arial;font-size:13px; ">Hi
        Joachim,</div>
      <div style="font-family:Helvetica,Arial;font-size:13px; "><br>
      </div>
      <div style="font-family:Helvetica,Arial;font-size:13px; ">you need
        to explicitly set the keyboard focus after the replacement. One
        possibility is to remember the focused element’s id before the
        replacement and then use the information after replacement.</div>
      <div style="font-family:Helvetica,Arial;font-size:13px; "><br>
      </div>
      <div style="font-family:Helvetica,Arial;font-size:13px; ">Kind
        regards</div>
      <div style="font-family:Helvetica,Arial;font-size:13px; ">Karsten</div>
      <br>
      <div class="gmail_signature">
        <table class="MsoNormalTable" style="font-family: Helvetica;
          width: 683px;" width="100%" cellpadding="0" border="0">
          <tbody>
            <tr>
              <td style="width: 67.5pt; padding: 0.75pt;" width="93">
                <p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;
                  font-size: 11pt; font-family: Calibri, sans-serif;">
                  <img src="cid:[email protected]"
                    class=""><o:p></o:p></p>
              </td>
              <td style="padding: 0.75pt;">
                <p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt;
                  font-size: 11pt; font-family: Calibri, sans-serif;">
                  Georg Heeg eK | Amtsgericht Dortmund HR A 12812<br>
                  Wallstr. <span lang="DE">22 | D-06366 Köthen<br>
                    Tel.: </span><a href="tel:+49-3496-214328"
                    target="_blank" style="color: rgb(149, 79, 114);"
                    moz-do-not-send="true"><span style="color:
                      windowtext;" lang="DE">+49-3496-214328</span></a><span
                    lang="DE"><br>
                    Web: </span><a href="https://www.heeg.de/"
                    style="color: rgb(149, 79, 114);"
                    moz-do-not-send="true"><span style="color:
                      windowtext;" lang="DE">www.heeg.de</span></a></p>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
      <br>
      <p class="airmail_on">Am 22. Juni 2023 um 11:53:09, Joachim Tuchel
        (<a href="mailto:[email protected]" moz-do-not-send="true"
          class="moz-txt-link-freetext">[email protected]</a>)
        schrieb:</p>
      <blockquote type="cite" class="clean_bq"><span>
          <div>
            <div>Dear Seasiders, <br>
              <br>
              <br>
              it seems this list is more or less abandoned, but I'll try
              anyways... My <br>
              question is probably more JS related that Seaside.. <br>
              <br>
              I have a question regarding tab order and replaced
              components via Ajax. <br>
              Let's assume we have a form with 3 inputs. Teh middle one
              has an onblur <br>
              event handler that replaces the form. So far, so good. The
              problem is <br>
              that the focus moves to the first text input element
              instead of the <br>
              "next" one (which is not the same element as before,
              because we replaced <br>
              all three with new ones). <br>
              <br>
              I tried a few things like using the tablndex attribute on
              elements, but <br>
              found nothing that works. Does anybody have a clue what to
              do in this <br>
              situation? I am pretty sure it is a JS only or even plan
              HTML solution, <br>
              but cannot find it on my own... <br>
              <br>
              <br>
              Joachim <br>
              <br>
              <br>
              _______________________________________________ <br>
              seaside mailing list -- <a class="moz-txt-link-abbreviated" href="mailto:[email protected]">[email protected]</a>
              <br>
              To unsubscribe send an email to
              <a class="moz-txt-link-abbreviated" href="mailto:[email protected]">[email protected]</a> <br>
            </div>
          </div>
        </span></blockquote>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 

----------------------------------------------------------------------- 
Objektfabrik Joachim Tuchel              <a class="moz-txt-link-freetext" href="mailto:[email protected]">mailto:[email protected]</a> 
Fliederweg 1                                 <a class="moz-txt-link-freetext" href="http://www.objektfabrik.de">http://www.objektfabrik.de</a>
D-71640 Ludwigsburg                  <a class="moz-txt-link-freetext" href="http://joachimtuchel.wordpress.com">http://joachimtuchel.wordpress.com</a>
Telefon: +49 7141 56 10 86 0                    Fax: +49 7141 56 10 86 1

</pre>
  </body>
</html>
--------------p1gHOIV0zNEfrNDu0ha5y95P
Content-Type: image/png; name="88B4C6D5-0BDC-431B-84B6-CB438ECA0C62.png"
Content-Disposition: inline;
 filename="88B4C6D5-0BDC-431B-84B6-CB438ECA0C62.png"
Content-Id: <[email protected]>
Content-Transfer-Encoding: base64

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

--------------p1gHOIV0zNEfrNDu0ha5y95P--

--------------63gs7tPKmFAZU00YBAvPhy5E--

--===============6719389251617777953==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
seaside mailing list -- [email protected]
To unsubscribe send an email to [email protected]

--===============6719389251617777953==--