ClientJS: Funktion zum Setzen der Cursorposition (z.B. in textareas)
authorMoritz Bunkus <m.bunkus@linet.de>
Wed, 18 Nov 2020 10:22:25 +0000 (11:22 +0100)
committerMoritz Bunkus <m.bunkus@linet.de>
Wed, 18 Nov 2020 10:32:55 +0000 (11:32 +0100)
SL/ClientJS.pm
js/client_js.js
js/kivi.js

index 336f971..7d8c362 100644 (file)
@@ -123,6 +123,8 @@ my %supported_methods = (
   run_once_for           => 3,  # kivi.run_once_for(<TARGET>, <ARGS>)
 
   scroll_into_view       => 1,  # $(<TARGET>)[0].scrollIntoView()
+
+  set_cursor_position    => 2,  # kivi.set_cursor_position(<TARGET>, <ARGS>)
 );
 
 my %trim_target_for = map { ($_ => 1) } qw(insertAfter insertBefore appendTo prependTo);
index 9fc14b6..d231d10 100644 (file)
@@ -113,7 +113,7 @@ ns.eval_json_result = function(data) {
 
       // ## jQuery UI dialog plugin ##
 
-      // Opening and closing and closing a popup
+      // Opening and closing a popup
       else if (action[0] == 'dialog:open')          kivi.popup_dialog(action[1]);
       else if (action[0] == 'dialog:close')         $(action[1]).dialog('close');
 
@@ -159,6 +159,7 @@ ns.eval_json_result = function(data) {
       else if (action[0] == 'run')                  kivi.run(action[1], action.slice(2, action.length));
       else if (action[0] == 'run_once_for')         kivi.run_once_for(action[1], action[2], action[3]);
       else if (action[0] == 'scroll_into_view')     $(action[1])[0].scrollIntoView();
+      else if (action[0] == 'set_cursor_position')  kivi.set_cursor_position(action[1], action[2]);
 
       else                                          console.log('Unknown action: ' + action[0]);
 
index b2b39e1..77dfe5c 100644 (file)
@@ -662,6 +662,15 @@ namespace("kivi", function(ns) {
     $input.parent().replaceWith($area);
     $area.focus();
   };
+
+  ns.set_cursor_position = function(selector, position) {
+    var $input = $(selector);
+    if (position === 'end')
+      position = $input.val().length;
+
+    $input.prop('selectionStart', position);
+    $input.prop('selectionEnd',   position);
+  };
 });
 
 kivi = namespace('kivi');