首页 > 解决方案 > 对textarea中的多行执行更新功能

问题描述

我有一个 textarea 将每一行发布到数据库,然后提取该数据以将其显示在单独的文本区域上。我有一个函数,当被调用时调用一个 php 更新函数。这将更新数据库中对应于文本区域中的行的行。我想要做的是当这个更新函数被调用时,我希望所有的行都被更新,而不仅仅是被选中的那一行。这是因为目前我必须手动选择要更新的每一行,如果在任何地方进行了更改以确保行和缩进是相同的。

    <script>
    var lineNo = 0;
    var lineText = "";
    var ta;
    var numOfSpaces;


   function update(e) {
       ta = $("#textEditor")[0];
     lineNo = ta.value.substr(0, ta.selectionStart).split(/\r?\n|\r/).length;
      lineText = ta.value.split(/\r?\n|\r/)[lineNo - 1];
       numOfSpaces = lineText.split(/\s/).length - 1;


      console.log(" line num: " +lineNo+ " line data: " + lineText);



        $.ajax({

         url: "update1.php",
         method: "POST",
         data: {lineN: lineNo, lineT: lineText},
         dataType: 'text',
         success: function(data){

          console.log(data);
         }
       });
     }

           $('#textarea').keydown(update).mousedown(update);

以上是捕获一行文本和相应行号的函数。它将信息传递给以下 php 文件

    <?php


    $linec = $_POST['lineT'];
    $linenumber = $_POST['lineN']



     $update = "UPDATE Code_Stream1 SET Line_Code='$linec' where LineNumber='$linenumber' ";

    $resultinsert = $conn->query($update);

    echo $update;


?>

ps 我有一个到数据库的连接,但上面没有包含

标签: javascriptphp

解决方案


也许我误解了你的问题,但你不能简单地使用.setSelectionRangetextarea 来选择所有文本吗?

$('#textEditor').on('focus', function(e) {
    // setTimeout skips to the next tik in the eventLoop
    // preventing timing issues in some browser
    setTimeout(function() {
        e.currentTarget.setSelectionRange(0, e.currentTarget.value.length);
    }, 0);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<textarea id="textEditor" rows="4">
    Line 1
    Line 2
    Line 3
    Line 4
</textarea>


推荐阅读