Member 14588143 Ответов: 1

Установите положение курсора в дочернем элементе редактируемого div (третья строка), когда пользователь нажимает enter в первой строке с помощью javascript


Когда пользователь нажимает enter в редактируемом div, позиция курсоров (текстовая каретка) должна двигаться на две строки вниз вместо одной, потому что вторая строка (дочерний div) будет содержать вывод (не редактируемый), а третья строка будет содержать новый входной div (редактируемый), где теперь должен находиться курсор.

Я сделал простую картину, чтобы проиллюстрировать.

проект кода — Postimage.org[^]

Может ли кто-нибудь объяснить, как это можно сделать?

Что я уже пробовал:

HTML
<!DOCTYPE html>
<html>

<head>
  <script type="text/javascript" src="JavaS.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  <meta charset="utf-8" />
  <style>
   div:focus {
    background-color: Aqua;
    }
    #box {
      background-color: lightblue;
      width: 600px;
      height: 600px;
      border: none;
      font-size: 15px;
      resize: none;
      overflow: auto;
      overflow-wrap: break-word;
    }
   </style>
   </head>
   <body>

  <div id="box" contenteditable="true" onkeypress="parse(event, this)"></div>

<script> setfocus(); </script>

</body>

</html>


В JavaScript JavaS.js
// first row cursor position in textarea inputbox on page load
function setfocus() {
  document.getElementById('box').focus();
}

// counts the number of times the user push enter
function increment() {
  increment.n = increment.n || 0;
  console.log("increment.n = " + increment.n);
  return ++increment.n;
}

function parse(e) {
  var key = window.event.keyCode;
  if (key == 13) { //keycode for enter 
    event.preventDefault(); 

    // creates child div for output
    var div2 = document.createElement("div");
    div2.setAttribute("contenteditable", "false");
    // div2.setAttribute("tabindex", "1");
    div2.style.background = "lightgreen";
    div2.style.height = "auto";
    div2.style.width = "600px";
    document.getElementById("box").appendChild(div2);

    // assign output to child div 
    var input = document.getElementById('box').innerText;
    console.log("input = " + input); 
    var output = eval(input);
    console.log("output = " + output);
    div2.innerHTML = output;

    // creates new child div for input
    var div3 = document.createElement("div");
    div3.setAttribute("id", "div3");
    div3.style.height = "20px";
    div3.style.width = "600px";
    document.getElementById("box").appendChild(div3);
    div3.setAttribute("tabindex", "0");
  }
}

// an array with random numbers between -1 and 1
function rand(n) {
  x = [];
  for (var i = 0; i < n; i++) {
    x[i] = Math.random() * 2 - 1;
  }
  console.log("x = " + x);
  return x;
}

1 Ответов

Рейтинг:
0

Gerry Schmitz

Люди обычно получают кнопку "редактировать" или "добавить"; вы пытаетесь создать настольное приложение в браузере. Плохая идея.