focus: Zeilenfokus in die normale Behandlung verschoben
authorSven Schöling <s.schoeling@linet-services.de>
Tue, 6 Dec 2016 09:03:20 +0000 (10:03 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 6 Jan 2017 10:22:24 +0000 (11:22 +0100)
js/common.js
templates/webpages/oe/sales_order.html

index b4784f4..5f13ee0 100644 (file)
@@ -192,22 +192,39 @@ function focus_by_name(name){
   return false;
 }
 
-$(document).ready(function () {
+$(function () {
   $('input').focus(function(){
     if (focussable(this)) window.focused_element = this;
   });
 
-  // Lowest priority: first focussable element in form.
-  set_cursor_to_first_element();
-
-  // Medium priority: class set in template
-  var initial_focus = $(".initial_focus").filter(':visible')[0];
-  if (initial_focus)
-    $(initial_focus).focus();
+  // setting focus inside a tabbed area fails if this is encountered before the tabbing is complete
+  // in that case the elements count as hidden and jquery aborts .focus()
+  setTimeout(function(){
+    // Lowest priority: first focussable element in form.
+    set_cursor_to_first_element();
+
+    // Medium priority: class set in template
+    var initial_focus = $(".initial_focus").filter(':visible')[0];
+    if (initial_focus)
+      $(initial_focus).focus();
+
+    // special: honour focus_position
+    // if no higher priority applies set focus to the appropriate element
+    if ($("#display_row")[0] && kivi.myconfig.focus_position) {
+      switch(kivi.myconfig.focus_position) {
+        case 'last_partnumber'  : $('#display_row tr.row:gt(-3):lt(-1) input[name*="partnumber"]').focus(); break;
+        case 'last_description' : $('#display_row tr.row:gt(-3):lt(-1) input[name*="description"]').focus(); break;
+        case 'last_qty'         : $('#display_row tr.row:gt(-3):lt(-1) input[name*="qty"]').focus(); break;
+        case 'new_partnumber'   : $('#display_row tr:gt(1) input[name*="partnumber"]').focus(); break;
+        case 'new_description'  : $('#display_row tr:gt(1) input[name*="description"]').focus(); break;
+        case 'new_qty'          : $('#display_row tr:gt(1) input[name*="qty"]').focus(); break;
+      }
+    }
 
-  // legacy. sone forms install these
-  if (typeof fokus == 'function') { fokus(); return; }
-  if (focus_by_name('cursor_fokus')) return;
+    // legacy. sone forms install these
+    if (typeof fokus == 'function') { fokus(); return; }
+    if (focus_by_name('cursor_fokus')) return;
+  }, 0);
 });
 
 $('form').submit(function(){
index acdadfc..4c72780 100644 (file)
@@ -28,7 +28,7 @@
 [%- FOREACH row = ROWS %]
      <tr valign="top" class="row [% IF row.error %]error_message[% ELSE %]listrow[% loop.count % 2 %][% END %]">
  [%- FOREACH row1 = row.ROW1 %]
-      <td[% IF row1.align %] align="[% row1.align %]"[% END %][% IF row1.nowrap %] nowrap[% END %]>[% row1.value %]</td>
+      <td[% IF row1.align %] align="[% row1.align %]"[% END %][% IF row1.nowrap %] nowrap[% END %][% IF row1.class %] class="[% row1.class %]"[% END %]>[% row1.value %]</td>
  [%- END %]
      </tr>
      <tr style='display:none'>
 [%- END %]
 
   </table>
-
-  <script type='text/javascript'>
-    $(function() {
-      setTimeout(function(){
-        [% SWITCH( MYCONFIG.focus_position ) %]
-          [% CASE 'last_partnumber' %]
-            $('#display_row tr.row:gt(-3):lt(-1) input[name*="partnumber"]').focus();
-          [% CASE 'last_description' %]
-            $('#display_row tr.row:gt(-3):lt(-1) input[name*="description"]').focus();
-          [% CASE 'new_partnumber' %]
-            $('#display_row tr:gt(1) input[name*="partnumber"]').focus();
-          [% CASE DEFAULT %]
-            $('#display_row tr:gt(1) input[name*="description"]').focus();
-        [% END %]
-      }, 1);
-    });
-  </script>
-
  </td>
 </tr>